GIPP: Google Image PHP Parser
GIPP, ist mir eigentlich erst in den Sinn gekommen, als ich den Titel angeschaut habe…
Da ich die Suche für ein Covers von Filme etwas schneller machen wollte, habe ich nach einem GIPP gesucht. Hab auch einen gefunden, doch tollerweise benützt dieser cURL und naja dies kann man ja auch ein wenig anderst lösen, vorallem wenn cURL nicht installiert ist.
Darum hab ich dann meine eigene Funktion, bzw. GIPP geschrieben.
<?php function googleImageResults($search,$start=0) { $html = file_get_contents("http://images.google.ch/images?q=".htmlspecialchars(str_replace(" ","+",$search))."&start=".$start); //echo $html; preg_match_all('/dyn.setResults((.+));/', $html, $matches); $html = $matches[0][0]; // Special chars decode $html = str_replace("\x3d","=",$html); $html = str_replace("\x26","&",$html); $html = str_replace("\x3c","<",$html); $html = str_replace("\x3e",">",$html); // Replace Useless Things $html = str_replace("dyn.setResults(","",$html); $html = str_replace(");","",$html); $html = str_replace("[]","",$html); $html = str_replace("[[","[",$html); $html = str_replace("]]","]",$html); $html = str_replace(",,""","",$html); // Loading in a Array $images = array(); $imgs = array(); $img = array(); while(strpos($html,"[")!==FALSE) { $start = strpos($html,"["); $end = (strpos($html,"],")===FALSE?strpos($html,"]"):strpos($html,"],")); $image = substr($html,$start+1,$end-$start-1); $images[] = $image; $html = str_replace("[".$image."]","",$html); } foreach($images as $image) { $image = str_replace('","',"n",$image); $image = str_replace('"',"",$image); $img = explode("n",$image); //echo $image; $temp = array(); $temp['searchurl'] = $img[0]; $temp['searchhost'] = $img[14]; $temp['searchlanguage'] = substr($img[0],strpos($img[0],"&hl=")+4,strpos($img[0],"&",strpos($img[0],"&hl=")+1)-(strpos($img[0],"&hl=")+4)); $temp['searchstart'] = substr($img[0],strpos($img[0],"&start=")+7,strpos($img[0],"&",strpos($img[0],"&start=")+1)-(strpos($img[0],"&start=")+7)); $temp['searchum'] = $img[15]; $temp['searchcachid'] = $img[2]; $temp['searchusg'] = substr($img[0],strpos($img[0],"&usg=")+5,strpos($img[0],"&",strpos($img[0],"&usg=")+1)-(strpos($img[0],"&usg=")+5)); $temp['fileurl'] = $img[3]; $temp['fileheight'] = substr($img[0],strpos($img[0],"&h=")+3,strpos($img[0],"&",strpos($img[0],"&h=")+1)-(strpos($img[0],"&h=")+3)); $temp['filewidth'] = substr($img[0],strpos($img[0],"&w=")+3,strpos($img[0],"&",strpos($img[0],"&w=")+1)-(strpos($img[0],"&w=")+3)); $temp['filesize'] = substr($img[0],strpos($img[0],"&sz=")+4,strpos($img[0],"&",strpos($img[0],"&sz=")+1)-(strpos($img[0],"&sz=")+4)); $temp['fileformat'] = $img[10]; $temp['fileinfo'] = $img[9]; $temp['thumbnailurl'] = $img[14]."?q=tbn:".$img[2].$img[3]; $temp['thumbnailwidth'] = $img[4]; $temp['thumbnailheight'] = $img[5]; $temp['host'] = $img[11]; $temp['hostsite'] = substr($img[0],strpos($img[0],"&imgrefurl=")+11, strpos($img[0],"&",strpos($img[0],"&imgrefurl=")+1)- (strpos($img[0],"&imgrefurl=")+11)); $temp['hostkeywords'] = $img[6]; $temp['nothing1'] = $img[1]; $temp['nothing2'] = $img[7]; $temp['nothing3'] = $img[8]; $temp['nothing4'] = $img[12]; $temp['nothing5'] = $img[13]; $imgs[] = $temp; } return $imgs; } ?>
Nicht gerade der beste Schreibstil, aber ich komm irgendwie nie so richt mit regulären Ausdrücken klar, darum das ganze strpos/substr Zeugs…
Am Ende erhält man ein normales Index-Array mit mehreren Assoziierten-Arrays.
Die «nothing» Inhalte enthalten normalerweise nichts, aber vielleicht findet jemand mehr darüber raus…
Die «unknow» Inhalte hab ich bis jetzt einfach nicht zuordnen können. Aber da gibt es auch noch weitere Sachen, bei denen ich den Sinn noch nicht begriffen habe (z.B. ’searchum› oder ’searchusg›).
Also für allen nicht so experimentier freudigen:
<?php include("fileMitDer_googleImageResults_Funktion"); $images = googleImageResults("James Bond"); $jamesBondBild = $images[0]['fileurl']; $images2 = googleImageResults("James Bond",21); $jBBOffSet21 = $images[0]['fileurl']; ?>
So ich hoffe man kommt nach und das Script findet irgendwo seinen Zweck!
Sorry dass es nicht so schön dargestellt wird…