2015-07-28 5 views
1

Я начал использовать API пользовательского поиска Google для проекта, идея заключается в поиске изображений, и я хотел использовать пользовательский поиск, потому что API изображений Google устарел.API Google Custom Search API, возвращающий документы HTML вместо изображений

Я уже включен поиск изображений на консоли CSE

Мой запрос выглядит так:

https://www.googleapis.com/customsearch/v1?key=APIKEY&cx=CSECX&q=flower&alt=json&searchType=image&num=1&start=NUMBER

Где ЧИСЛО является случайной величиной от 1 до 20

Иногда она возвращается результаты, подобные этому:

{u'kind': u'customsearch#result', u'title': u'Flower Wallpaper Tumblr #6790199', u'displayLink': u'7-themes.com', u'htmlTitle': u'<b>Flower</b> Wallpaper Tumblr #6790199', u'snippet': u'Flower Wallpaper Tumblr', u'htmlSnippet': u'<b>Flower</b> Wallpaper Tumblr', u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg', u'image': {u'thumbnailWidth': 150, u'byteSize': 808360, u'height': 1200, u'width': 1920, u'contextLink': u'http://7-themes.com/6790199-flower-wallpaper-tumblr.html', u'thumbnailLink': u'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSad0z_Wla0nRHAcQrjO5jLQkFjcoqnNHhejjuGmdA1AW2BqIVEpLARAk0s', u'thumbnailHeight': 94}} 

Выделив интересная часть:

u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg' 

Таким образом, кажется, что URL является http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg и MimeType этого изображения/JPEG, но если вы идете в URL, вы увидите, что это не образ, но HTML документ

Конечно, я мог бы зафиксировать это как исключение, но я не хочу тратить ежедневные запросы API (из 100 лимитов в день), потому что API не дал мне изображения, когда я прямо сказал об этом.

Итак, вопрос: Является ли это нормальным поведением или неправильной конфигурацией/неправильным использованием с моей стороны? Если да, то как я могу это исправить?

Спасибо за внимание

+1

хотя я недостаточно уверен, чтобы опубликовать это как ответ, я предполагаю, что сайт, на котором размещен образ, сделал что-то теневое с их миметиками. вероятно, из рук Google, если сервер будет лгать о том, что он размещает. –

+0

Да ... Я хоть об этой возможности тоже ... Я просто надеюсь, что это моя вина, а не то, что я не могу исправить –

+2

после небольшого чтения, похоже, что серверы используют технику, похожую на [это] (http://altlab.com/htaccess_tutorial.html), чтобы внешние клиенты (включая искатель Google) не могли напрямую обращаться к изображению. Однако я не знаю, как подтвердить это для этого случая. это означало бы, что файл рекламируется как изображение, но попытка его открыть заставляет сервер обслуживать html-файл. –

ответ

1

После немного чтения, мое лучшее предположение, что некоторые сервера делают перенаправление ресурсов для предотвращения внешних источников от хотлинкинга непосредственно к ресурсу. Этот файл объявляется как изображение, но доступ к нему с внешнего сервера предоставит HTML-документ. Это не перенаправление URL-адресов, поэтому оно не обнаруживается клиентами (включая искатель Google) до тех пор, пока ресурс не будет загружен.

Такое перенаправление ресурсов осуществляется на серверах Apache, используя .htaccess файл и RewriteEngine, с методикой, аналогичной той, которая описана here, хотя этот конкретный метод не может быть использован для приманки и подменить изображения для HTML документы.

Короче говоря, если сервер лжет о том, какой тип файла он размещает, Google ничего не может с этим поделать. Вы можете подтвердить, что это не проблема с API пользовательского поиска, выполнив тот же запрос в обычном интерфейсе веб-поиска - обратите внимание, что при нажатии на изображение загружается документ HTML, а не сам образ.

Смежные вопросы