Anonymní profil maniakum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil maniakum – Programujte.comAnonymní profil maniakum – Programujte.com

 

Příspěvky odeslané z IP adresy 82.142.100.–

PHP › CSFD api
28. 12. 2015   #207556

#18 Kit
Tak pak takhle: 

$dom = new domDocument;
$csfd = file_get_contents("http://www.csfd.cz/film/$csfd_id");
$html = (ord($csfd[0]) == 31) ? gzdecode($csfd) : $csfd;
@$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;

$xpath = new DOMXPath($dom);
$nazvy = array();
$zeme = array();
$names_other = "";
$nodes = $xpath->query("//h1[@itemprop='name']");
$names_cs = $nodes->item(0)->nodeValue;

foreach($xpath->query("//ul[@class='names']/li/h3") as $li) {
    $nazvy[] = $li->nodeValue;
}
foreach($xpath->query("//ul[@class='names']/li/img") as $li) {
    $zeme[] = $li->getAttribute('alt');
}
for($i=0;$i<count($nazvy);$i++){
    if($i==count($nazvy)-1)
        $names_other .= $zeme[$i]."-".$nazvy[$i];
    else
        $names_other .= $zeme[$i]."-".$nazvy[$i].";";
}

$nodes = $xpath->query("//h2[@class='average']");
$hodnoceni = str_replace('%', '', $nodes->item(0)->nodeValue);

$nodes = $xpath->query("//p[@class='origin']");
$podrobnosti = explode(", ", $nodes->item(0)->nodeValue);

$nodes = $xpath->query("//p[@class='genre']");
$genre = str_replace(' / ', '@;@', $nodes->item(0)->nodeValue);

$nodes = $xpath->query("//span[@data-truncate='340']");
$hraji = $nodes->item(0)->nodeValue;

$nodes = $xpath->query("//div[@data-truncate='570']");
$popis = $nodes->item(0)->nodeValue;

$nodes = $xpath->query("//img[@class='film-poster']");
$poster_url = "http:".$nodes->item(0)->getAttribute('src');

Pak mám ještě ale problém s těmi dalšími názvy, určitě to jde udělat lépe, tedy, aby se to všechno udělalo v jednom kroku.

PHP › CSFD api
27. 12. 2015   #207552

#16 Kit
Jo, to souhlasím. Koukám, že errory mám vypnutý. Projedu si to. 

Každopádně děkuji za pomoc! 

PHP › CSFD api
27. 12. 2015   #207550

Kdyby to někoho zajímalo, tak jsem to nakonec udělal takto. Určitě by to šlo udělat lépe, budu rád za každý komentář. Žádný zázrak to není, ale funguje to.  

$dom = new domDocument;
$csfd = file_get_contents("http://www.csfd.cz/film/$csfd_id");
$html = (ord($csfd[0]) == 31) ? gzdecode($csfd) : $csfd;
@$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;

$names = $dom->getElementsByTagName('title'); //zjištění CZ a druhého názvu filmu
$i=0;
while($names_2 = $names->item($i++))
{
    $name = $names_2->nodeValue;
    if ($name_obsahuje = strpos($name, "/") === false) {
        $names_3 = explode(" | ", $name);
        $names_4 = explode(" ( ", $names_3);
        $names_cs = $names_4[0];
        $names_en = $names_cs;
    } else {
        $names_3 = explode(" / ", $name);
        $names_4 = explode(" (", $names_3[1]);
        $names_cs = $names_3[0];
        $names_en = $names_4[0];
    }
}

$entries = $dom->getElementsByTagName('h2'); //hodnocení

for ($i=0;$i<$entries->length;$i++) {
    $entry = $entries->item($i);
    $average = $entry->attributes->getNamedItem('class')->value;
    if($average=="average") 
        $hodnoceni = str_replace('%', '', $entry->nodeValue);
}

$entries = $dom->getElementsByTagName('p'); //rok, žánr, země, délka filmu

for ($i=0;$i<$entries->length;$i++) {
    $entry = $entries->item($i);
    $p = $entry->attributes->getNamedItem('class')->value;
    if($p == "origin") 
        $podrobnosti = explode(", ",$entry->nodeValue);
    elseif($p == "genre")
        $genre = str_replace(' / ', '@;@', $entry->nodeValue);
}

$entries = $dom->getElementsByTagName('span'); //herci

for ($i=0;$i<$entries->length;$i++) {
    $entry = $entries->item($i);
    $p = $entry->attributes->getNamedItem('data-truncate')->value;
    if($p == 340)
        $hraji = $entry->nodeValue;
}

$entries = $dom->getElementsByTagName('div'); //popis

for ($i=0;$i<$entries->length;$i++) {
    $entry = $entries->item($i);
    $p = $entry->attributes->getNamedItem('data-truncate')->value;
    if($p == 570)
        $popis = $entry->nodeValue;
}

$xpath = new DOMXPath($dom); //obrázek plakátu
$nodes = $xpath->query("//img[@class='film-poster']");
$poster_url = "http:".$nodes->item(0)->getAttribute('src');
PHP › CSFD api
27. 12. 2015   #207548

#12 Kit
Jako jo, funguje a jak jsi na to přišel? Co přesně děl ord()?

PHP › CSFD api
27. 12. 2015   #207546

Přesměrováním to není, pokud zadám tuto url adresu http://www.csfd.cz/film/349573-creed/prehled/

tak mi to stejně pokáždý háže prázdný resp. nějakou blbost. Něco dělám špatně a nejsem schopen přijít na to co.

PHP › CSFD api
27. 12. 2015   #207545

#8 Kit
Tak nevím, asi se to pokouším vydolovat nějak blbě. Jak to děláš? Já žádnou signaturu nevidím, jen rozsypaný čaj, který jako gzip nefunguje.

PHP › CSFD api
27. 12. 2015   #207529

#3 maniakum
Jak kdyby se CSFD bránila a posílala tam náhodný bordel a občas se povede načíst stránka v pořádku

‹ í}K“Ç•îZúix¤nZ( Ux7‰fMÒ¤$R4›¢l‰ŠŽ*T£PÕM´ÅˆYÎbôÚ˜O„/æÆ]8B^¸É?rÉýNf֏ÐÝäXŽ‘-5*둯“'Ïã;'?¼ñ«;_ŽöøËÛŸ?8`­\þªzP.ßyz‡ýþþÓ‡ŸòäÎ=“é¥J¹|÷Q†a8Ù+—ONNJ'Õ’çÊMôå„Þ(¿ oi¾Õ75½d…VaÿÃâó/ÆŽt–¼¬·ÛmùZÚsLwÐ)ôqå{®T•Þ„»ßœ'¾z=ϵ½!›åøù~7yÞâSîà%?(õÍïzÞ¨ÔóÆÉÔ6nZû~pcÌCãN4þ]dO;…Ï ¹jOg^`=yÕ)„üEX¦Æ^g½¡éاÞÐ COÞ{ûÊOì³ÿvM6eá›ßþ}tö›ž½:åìÖÄs“øœ[f‘BîŸýÌNùøퟸÎùÛWxMpeá sMß;åîÙëq‰=FqzlŠF¨òí_ñè_§ž…öšô3Y×{ÁÆg¯P÷ÈŸÚEš£·çß«AxöÊá(â	Ëc‡¶cZÜ™môbüæÇ ¤fYœœyúxþÿýûÍ݈ÏN$£Þ£>™øƒÇ?ÄX‡vèð}ÑY¶kTôú5ö={óŸ‡÷î”z§7Êò6=èØîˆùÜ邡燽(d6>\`CŸ÷R±ÇƒR/è[x¹l˜Ö ÜÕÍfÙ›”ûæ”Þ*á?‚&:q§üB_£éOk2'‡k¡õ†òöv•‰×ÄëG¢Ö‰;ÝÎu'œ9rÎ}Þž7p¸9±AòTVvìnP>þ.âþ,²Ëz©UÒkå«ìšW÷´ÈÆX`üe?ÉÓu¾ÁªêWåس"´¸|»eù¶ú#k+¯þþ\C6MUÇÄ·ÝPV1æ–mv ¢„ã)—)ü^§PVS_2-¯Ë­p,†®ÖåfϬוšiêV·i6­¶Ñn˜•–Õªv9¯¶[¼Ù·ÊrDZCþ¹ÝÕºõZϨY=½ß5jfC¯õõV¯Ë£i4¬Z·Òh7 K¯—Ž1°7À’¨‚`U‹2}>6§¦,ÅšP\§ ÙŽl¸â›L
PHP › CSFD api
27. 12. 2015   #207528

#2 Kit
Ok. Tak jsem zkusil napsat tohle pro vytažení názvu filmu. 

<?php
$dom = new domDocument; 
$dom->loadHTMLfile('http://www.csfd.cz/film/32'); 
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('h1');
while($table = $tables->item($i++))
{
    echo $table->nodeValue;
}
?>

Funguje, ale napříklád jednou za 5 opakování se mi nic nenačte, čím to?

EDIT: respektive jsem ještě přišel třeba na to, že pod id 349573 to nic nezobrazí. To jako proč?

PHP › CSFD api
26. 12. 2015   #207526

Ahoj, 

používáte někdo nějaké funkční API na ČSFD? Poslední dobou se mi stalo, že mi nefunguje žádný možný přístup, ani přes simple dom html parser. Jsem jediný nebo chyba někde jinde?

Díky

PHP › Filtry výběru z DB
24. 12. 2015   #207520

Děkuji za kód. S drobnými úpravami funkční přesně jak jsem si představoval.

maniakum
PHP › Filtry výběru z DB
14. 12. 2015   #207326

Ahoj, 

mám databázi filmů a seriálů a snažím se pomocí selectu vyfiltrovat to co přesně hledám. Zatím to mám takto:

<select name="druh" onchange="this.form.submit()">
    <option value=""> zobrazit
        <?php
        if($druh=="serial")
            $selected_serial = "selected";
        else
            $selected_serial = "";
        if($druh=="film")
            $selected_film = "selected";
        else
            $selected_film = "";
        ?>
    <option value="serial" <?php echo $selected_serial?>> seriály
    <option value="film" <?php echo $selected_film?>> filmy
</select>
<select name="hodnoceni" onchange="this.form.submit()">
    <option value=""> hodnocení
        <?php
        if($hodnoceni=="top")
            $selected_top = "selected";
        else
            $selected_top = "";
        if($hodnoceni=="worst")
            $selected_worst = "selected";
        else
            $selected_worst = "";
        ?>
    <option value="top" <?php echo $selected_top?>> od nejlepšího
    <option value="worst" <?php echo $selected_worst?>> od nejhoršího
</select>
<select name="zanr" onchange="this.form.submit()">
    <option value=""> žánr
    <?php
    sort($zanr_filtr);
    for($i=1;$i<count($zanr_filtr);$i++){
        if($zanr==$zanr_filtr[$i])
            $selected = "selected";
        else
            $selected = "";
        echo "<option value=\"$zanr_filtr[$i]\" $selected> $zanr_filtr[$i]";
    }
    ?>
</select>
<select name="videno" onchange="this.form.submit()">
    <option value=""> historie
    <?php
    if($videno=="yes")
        $videno_y = "selected";
    else
        $videno_y = "";
    if($videno=="no")
        $videno_n = "selected";
    else
        $videno_n = "";
    ?>    
    <option value="yes" <?php echo $videno_y;?>> viděno
    <option value="no" <?php echo $videno_n;?>> neviděno
</select>
<select name="jazyk" onchange="this.form.submit()">
    <option value=""> zvuková stopa
    <?php
    sort($jazyk_filtr);
    for($i=1;$i<count($jazyk_filtr);$i++){
        if($jazyk==$jazyk_filtr[$i])
            $selected = "selected";
        else
            $selected = "";
        echo "<option value=\"$jazyk_filtr[$i]\" $selected> $jazyk_filtr[$i]";
    }
    ?>
</select>
elseif($druh=="" and $zanr=="" and $videno!="" and $jazyk!=""){
	$Podminka .= "WHERE audio LIKE '%".$jazyk."%' ";
        if($videno=="yes") {
       		for($i = 0; $i <= $csfd_id_historie_count - 1; $i++){
        		if($i == $csfd_id_historie_count - 1)
                		$nic .= "'".$csfd_id_historie[$i]."'";
	                else
        	                $nic .= "'".$csfd_id_historie[$i]."',";
	        }
	        $Podminka .= "AND csfd_id in ($nic) ";
	}
	elseif ($videno=="no") {
        	for($i = 0; $i <= $csfd_id_historie_count - 1; $i++){
	        	if($i == $csfd_id_historie_count - 1)
	        	        $nic .= "'".$csfd_id_historie[$i]."'";
        	        else
                	        $nic .= "'".$csfd_id_historie[$i]."',";
	        }
        	$Podminka .= "AND csfd_id not in ($nic)";
	}
}
elseif($druh=="" and $zanr!="" and $videno!="" and $jazyk!=""){
	$Podminka .= "WHERE genres LIKE '%".$zanr."%' AND audio LIKE '%".$jazyk."%' ";
        if($videno=="yes") {
        	for($i = 0; $i <= $csfd_id_historie_count - 1; $i++){
                	if($i == $csfd_id_historie_count - 1)
                        	$nic .= "'".$csfd_id_historie[$i]."'";
                        else
                                $nic .= "'".$csfd_id_historie[$i]."',";
        	}
                $Podminka .= "AND csfd_id in ($nic) ";
        }
        elseif ($videno=="no") {
                for($i = 0; $i <= $csfd_id_historie_count - 1; $i++){
        		if($i == $csfd_id_historie_count - 1)
                        	$nic .= "'".$csfd_id_historie[$i]."'";
                        else
                                $nic .= "'".$csfd_id_historie[$i]."',";
                }
                $Podminka .= "AND csfd_id not in ($nic)";
        }
}

A tak dále ve stejném duchu. 

Jak se to dá udělat jinak, abych nemusel používat elseif?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý