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…

Kommentare [0]
Geschrieben am 29.07.2009 von admin in Computer, Web
TrackbackPermanent Link

Hinterlasse einen Kommentar