Вернуть результаты поиска изображений Google в HTML с помощью PHP
Я знаю, как мы можем использовать API Google для возврата результатов изображения в AJAX, но я хочу, чтобы иметь возможность возвращать изображения для определенного запроса, а затем выводить их в HTML на моей странице.
Например:
http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=sausages
Возвращает результаты с информацией и изображениями о 10 лучших результатах для ключевого слова колбасы.
Как я могу запросить этот url для вывода изображений и заголовков изображений на моей странице с помощью PHP в HTML.
Я использую следующее в верхней части функции, чтобы вернуть заголовок:
$tit = get_the_title();
Затем я предлагаю его здесь:
$json = get_url_contents('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q='.$tit.'');
Но он не узнает название
Ответы
Ответ 1
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);
Выход:
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 Yummy German Sausage
)
[3] => Array
(
[url] => http://sparseuropeansausage.com/images/sausage-web/sausagesBiggrilling2.jpg
[alt] => Spar European Sausage Shop
)
)
Отображение изображений:
<?php foreach($results as $image): ?>
<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>"/><br/>
<?php endforeach; ?>
Редактировать после комментариев:
$url = 'http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' . get_the_title();
$json = get_url_contents($url);
Ответ 2
Следует отметить, что этот API больше не доступен для Google и всегда будет возвращать код ошибки.
Ответ 3
Извините, я должен опубликовать это как комментарий для ответа enenen. К сожалению, у меня нет репутации, чтобы быть в состоянии сделать это в данный момент.
Ответ Enenen работал очень хорошо, однако я встретил некоторые изображения, которые отказались загружать правильно для меня. Это может быть очевидно для других, но мне потребовалось некоторое время, чтобы понять это.
Некоторые из возвращаемых URL-адресов имеют закодированные символы, которые не были правильно подобраны браузером и привели к сломанному изображению. Это было всего лишь 1 из 50 изображений или около того.
Возвращаемая строка была, например:
http://pix4.agoda.net/hotelimages/106/10615/10615_14033018230018907115.jpg%3Fs%3D800x600
Решено это с помощью PHP-функции urldecode на $image ['url']
$img_url=urldecode($image['url']);
echo '<img src="'.$img_url.'" alt="'.$image['alt'].'">';
Новая строка, которая корректно работает в моем браузере (% 3F и% 3D декодировано)
http://pix4.agoda.net/hotelimages/106/10615/10615_14033018230018907115.jpg?s=800x600
Ответ 4
Забудьте о Google и получите один и тот же URL-адрес изображений с помощью Bing.com
Пример поиска отлично работает на моем сайте.
Вы можете попробовать эту функцию:
Функция возвращает массив найденных изображений. Вы можете отказаться от дополнительных параметров.
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;
}