Hallo liebe Community,
ich schreibe gerade an einer kleinen Anwendung für mich selbst und wollte dabei dei BildsuchAPI von Bing verwenden. Da die Ergebnisse der API allerdings erheblich schlechter ausfallen als die der online Suchmaschine habe ich mir ein kleines Script gebastelt, welches aus der Suchmaschine die Adressen der Bilder herausfiltert. Mein Code sieht ungefähr so aus:
Zur Erklärung: Das betreffende HTML-Element auf der Website von Bing sieht folgendermaßen aus
mich interessieren die Daten die unter dem m-Attribut gespeichert sind. Mit Regulären Ausdrücken kam ich nicht weit, wobei ich auch zugeben muss, dass ich diese nur selten verwende und mich nicht sonderlich gut damit Auskenne.
In der Switch-Anweisung sind die Daten schon in Key-Value-Paare getrennt was soweit auch prima funktioniert, jetzt zum Problem. Ich bekomme beim besten willen die Anführungszeichen nicht aus dem $value String. Definiere ich manuell die $value beispielsweise als $value = ' "300" ', werden die Anführunszeichen korrekt entfernt, bei dem Text, den Curl liefert allerdings nicht. Kann es an dem Charset des Textes liegen und habt Ihr eine Idee wie sich das ändern lässt?
Grüße
ich schreibe gerade an einer kleinen Anwendung für mich selbst und wollte dabei dei BildsuchAPI von Bing verwenden. Da die Ergebnisse der API allerdings erheblich schlechter ausfallen als die der online Suchmaschine habe ich mir ein kleines Script gebastelt, welches aus der Suchmaschine die Adressen der Bilder herausfiltert. Mein Code sieht ungefähr so aus:
PHP:
$keywords = "sushi";
$url = "http://www.bing.com/images/search?q=".rawurlencode($keywords)."&go=&qs=n&sk=&form=QBIR";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
#curl_setopt($ch, CURLOPT_ENCODING , "gzip");
$response_text = curl_exec($ch);
curl_close($ch);
$parts = explode('class="sg_u" m="', $response_text);
array_shift($parts);
$results = array();
foreach($parts as $part){
$part = explode('" id=', $part);
$part = $part[0];
$options = explode(',',$part);
foreach($options as $option){
list($key, $value) = explode(":",$option, 2);
if($key == 'height' or $key == 'width' or $key == 'turl' or $key == 'imgurl'){
$replace = "\"";
$value = str_replace($replace, "", $value);
echo $value."<br>";
switch($key){
case 'height':
break;
case 'width':
break;
case 'turl':
break;
case 'imgurl':
break;
default:
break;
}
}
# echo gettype($value);
#
# echo $option."<br>";
}
$results[] = $part;
}
Zur Erklärung: Das betreffende HTML-Element auf der Website von Bing sieht folgendermaßen aus
HTML:
<span id="1022800167996" class="sg_u" m="{ms:"images,5139.1",height:"300",width:"239",turl:"http://ts1.mm.bing.net/images/thumbnail.aspx?q=1022800167996&id=e0244b6cdc8f854c171a0d6d6c1b1437&url=http%3a%2f%2fxn--sushi-nrnberg-2ob.de%2fsushi.jpg",imgurl:"http://xn--sushi-nrnberg-2ob.de/sushi.jpg",offset:"8",t:"Die beste Sushi-online in Nürnberg",w:"558",h:"700",ff:"jpeg",fs:"83",durl:"sushi-nürnberg.de",surl:"http://xn--sushi-nrnberg-2ob.de/",mid:"310EC249FA572E0769E6237704E25D0300621E02",k:"22",ns:"API.images"}">
mich interessieren die Daten die unter dem m-Attribut gespeichert sind. Mit Regulären Ausdrücken kam ich nicht weit, wobei ich auch zugeben muss, dass ich diese nur selten verwende und mich nicht sonderlich gut damit Auskenne.
In der Switch-Anweisung sind die Daten schon in Key-Value-Paare getrennt was soweit auch prima funktioniert, jetzt zum Problem. Ich bekomme beim besten willen die Anführungszeichen nicht aus dem $value String. Definiere ich manuell die $value beispielsweise als $value = ' "300" ', werden die Anführunszeichen korrekt entfernt, bei dem Text, den Curl liefert allerdings nicht. Kann es an dem Charset des Textes liegen und habt Ihr eine Idee wie sich das ändern lässt?
Grüße