2013-05-31 13 views
11

So come possiamo utilizzare l'API di Google per restituire i risultati delle immagini in AJAX, ma voglio essere in grado di restituire le immagini per una query specifica e quindi inviarle in HTML sul mio pagina.Restituisci i risultati di ricerca di immagini HTML in HTML utilizzando PHP

Ad esempio:

http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=sausages

Consegne risultati con infomation e immagini sui primi 10 risultati per la parola chiave salsicce.

Come posso interrogare questo url per l'output di immagini e titoli delle immagini sulla mia pagina utilizzando PHP in HTML.

Sto usando il seguente nella parte superiore della funzione per restituire il titolo:

$tit = get_the_title(); 

allora io sono apending qui:

$json = get_url_contents('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q='.$tit.''); 

Ma non riconoscerà il titolo

+0

Restituisce una stringa JSON. Incollalo qui e vedrai il risultato: http://chris.photobooks.com/json/default.htm Leggi di JSON. – enenen

+0

Quella sigla del titolo è in parte ciò che ha contribuito al mio voto. –

risposta

18
function get_url_contents($url) { 
    $crl = curl_init(); 

    curl_setopt($crl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)'); 
    curl_setopt($crl, CURLOPT_URL, $url); 
    curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($crl, CURLOPT_CONNECTTIMEOUT, 5); 

    $ret = curl_exec($crl); 
    curl_close($crl); 
    return $ret; 
} 

$json = get_url_contents('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=sausages'); 

$data = json_decode($json); 

foreach ($data->responseData->results as $result) { 
    $results[] = array('url' => $result->url, 'alt' => $result->title); 
} 

print_r($results); 

uscita:

01.235.164,106174 millions
Array 
(
    [0] => Array 
     (
      [url] => http://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Salchicha_oaxaque%25C3%25B1a.png/220px-Salchicha_oaxaque%25C3%25B1a.png 
      [alt] => Sausage - Wikipedia, the free encyclopedia 
     ) 

    [1] => Array 
     (
      [url] => http://upload.wikimedia.org/wikipedia/commons/c/c1/Reunion_sausages_dsc07796.jpg 
      [alt] => File:Reunion sausages dsc07796.jpg - Wikimedia Commons 
     ) 

    [2] => Array 
     (
      [url] => http://1.bp.blogspot.com/-zDyoLPoM1Zg/ULXDPba_2iI/AAAAAAAAAAs/QzfNNmDFmzc/s1600/shop_sausages.jpg 
      [alt] => Maik's Yummy German Sausage 
     ) 

    [3] => Array 
     (
      [url] => http://sparseuropeansausage.com/images/sausage-web/sausagesBiggrilling2.jpg 
      [alt] => Spar's European Sausage Shop 
     ) 

) 

che mostra le immagini:

<?php foreach($results as $image): ?> 
    <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>"/><br/> 
<?php endforeach; ?> 

Modifica dopo i commenti:

$url = 'http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' . get_the_title(); 

$json = get_url_contents($url); 
+0

Ciao Enenen, Grazie, ok, funziona, ma come potrei produrre un semplice codice HTML senza tutti i dettagli dell'array. Quindi solo l'URL dell'immagine e il titolo, in testo normale? –

+0

Ok, bene al monetizza tutte le informazioni dell'array come: [0] => Array, voglio solo essere in grado di stampare l'url e il titolo. –

+0

Quindi nel ciclo ('foreach ($ data-> responseData-> risultati come $ result)') puoi semplicemente usare l'URL 'echo ''. $ result-> alt. '';' senza memorizzare le informazioni in un array. – enenen

0

Siamo spiacenti, dovrei essere questo distacco come un commento alla risposta di enenen. Sfortunatamente non ho la reputazione di poterlo fare al momento.

La risposta di Enenen ha funzionato molto bene, tuttavia ho trovato alcune immagini che si sono rifiutate di caricare correttamente per me. Potrebbe essere ovvio per gli altri, ma mi ci è voluto un po 'per capirlo.

Alcuni degli URL restituiti hanno caratteri codificati che non sono stati rilevati correttamente dal browser e hanno provocato un'immagine interrotta. Questo era solo ogni 1 su 50 immagini o giù di lì.

la stringa restituita è stato per esempio: http://pix4.agoda.net/hotelimages/106/10615/10615_14033018230018907115.jpg%3Fs%3D800x600

risolto il problema utilizzando la funzione PHP urldecode $ image on [ 'url']

$img_url=urldecode($image['url']); 
echo '<img src="'.$img_url.'" alt="'.$image['alt'].'">'; 

Nuova stringa che funziona correttamente nel browser (% 3F e% 3D decodificati) http://pix4.agoda.net/hotelimages/106/10615/10615_14033018230018907115.jpg?s=800x600

7

Si noti che questa API non è più disponibile da Google e restituirà sempre un codice di errore.

0

Dimentica Google e ottieni gli stessi URL delle immagini utilizzando Bing.com

Le ricerche di esempio funzionano correttamente sul mio website.

Si può dare questa funzione una prova:

La funzione restituisce un array di immagini trovate. Puoi scegliere di più per i tuoi parametri personalizzati.

function searchImage($search){ 

$url="http://www.bing.com/images/search?pq=".urlencode(strtolower($search))."&count=50&q=".urlencode($search); 
$data=file_get_contents($url); 

$rr=explode("<div class=\"item\">", $data); 
$execc=""; 
for($r=2;$r<(count($rr));$r++){ 
    $nf=explode("\"", $rr[$r]); 
    $nextFile=$nf[1]; 
    $no="stock;123;dreams"; 
    $x=true; 
    $tt=explode(";", $no); 
    for($a=0;$a<count($tt);$a++){ 

      if(strpos($nextFile, $tt[$a])!=false){ 
        $x=false; 
      } 
    } 
    if($x==true){ 
      $nextFil[]=$nextFile; 
    } 
} 
return $nextFil; 
}