Пользовательский поиск только для изображений Google
Так как API поиска изображений Google устарел, для этого следует использовать API пользовательского поиска Google.
Я сделал небольшой пример, используя его. Моя проблема в том, что я хочу вернуть результаты поиска изображений Google только. Таким образом, это показывает веб-результаты, и пользователь может переключиться на результат изображения. Как я могу показать только результаты изображения по умолчанию?
<div id="cse" style="width: 100%;">Loading</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
google.load('search', '1', {language : 'hu'});
google.setOnLoadCallback(function() {
var customSearchOptions = {
enableImageSearch: true,
imageSearchOptions: {
layout: google.search.ImageSearch.LAYOUT_CLASSIC
}
};
var options = new google.search.DrawOptions();
options.setAutoComplete(true);
var customSearchControl = new google.search.CustomSearchControl('XXX', customSearchOptions);
customSearchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
customSearchControl.setAutoCompletionId('XXX');
customSearchControl.draw('cse', options);
}, true);
</script>
<link rel="stylesheet" href="#" onclick="location.href='http://www.google.com/cse/style/look/default.css'; return false;" type="text/css" />
Документация API довольно плохая, она описывает только, как добавлять дополнительные результаты.
Ответы
Ответ 1
Поиск изображений Google теперь поддерживается в API пользовательской поисковой системы. См. Раздел параметров API этой страницы. Я использую API с python, и для моего приложения я просто указываю параметр в вызове API.
searchType = "image"
Смотрите этот пост в блоге cse.
EDIT: Как указывает Марк в своем комментарии ниже, вам нужно нажать "Включить поиск изображений" на консоли консоли CSE.
Ответ 2
В API-интерфейсе API пользовательского поиска Google - веб-сайте документации, это возможно.
https://developers.google.com/custom-search/docs/element
Это фрагмент, используемый для поиска по изображению по умолчанию:
'defaultToImageSearch'
Поэтому я считаю, что полный синтаксис для использования этого будет:
<script>
.
// Google custom search code, ids go here...
.
</script>
<gcse:search></gcse:search>
**<gcse:searchresults enableImageSearch="true" defaultToImageSearch="true">**
Ответ 3
Я не уверен в этом на 100%, но я не думаю, что API поддерживает то, что вы пытаетесь сделать. Это совсем не удивительно, поскольку API поиска Google печально известен тем, что ему не хватает даже базовых функциональных возможностей (например, стандартного предела API поиска 20 результатов и т.д.). Я думаю, что тот факт, что я первый человек, который ответил на это за 3 дня, когда он был активным, является еще одним признаком того, что это, вероятно, просто не поддерживается (или, если это так, Google никогда не удосужился сообщить кому-либо).
Я знаю, что вам это не понравится, но я думаю, что ваш лучший вариант - очистить изображения из возвращаемого результата. Как правило, людям приходится прибегать к данным о результатах Google. К счастью, их внешний код замечательно согласован, поэтому несколько хорошо настроенных регулярных выражений и/или разделов должны делать трюк для ya.
И да, это общая BS, что Google предоставил такую паршивую поддержку для этого API. =)
Ответ 4
Для тех, кто просматривает учебное пособие по WebExtensions, здесь обновленный код, который я использовал в popup.js, чтобы он работал с новой функциональностью CSE:
/**
* @param {string} searchTerm - Search term for Google Image search.
* @param {function(string,number,number)} callback - Called when an image has
* been found. The callback gets the URL, width and height of the image.
* @param {function(string)} errorCallback - Called when the image is not found.
* The callback gets a string that describes the failure reason.
*/
function getImageUrl(searchTerm, callback, errorCallback) {
// Google image search - 100 searches per day.
// https://developers.google.com/image-search/
// var searchUrl = 'https://ajax.googleapis.com/ajax/services/search/images' +
// '?v=1.0&q=' + encodeURIComponent(searchTerm);
var searchUrl = 'https://www.googleapis.com/customsearch/v1' +
'?key=' + key + '&cx=' + cx + '&searchType=image&q=' + encodeURIComponent(searchTerm);
var x = new XMLHttpRequest();
x.open('GET', searchUrl);
// The Google image search API responds with JSON, so let Chrome parse it.
x.responseType = 'json';
x.onload = function() {
// Parse and process the response from Google Image Search.
var response = x.response;
if (!response || !response.items || response.items.length === 0) {
errorCallback('No response from Google Image search!');
return;
}
var firstResult = response.items[0];
// Take the thumbnail instead of the full image to get an approximately
// consistent image size.
var imageUrl = firstResult.image.thumbnailLink;
var width = parseInt(firstResult.image.thumbnailWidth);
var height = parseInt(firstResult.image.thumbnailHeight);
console.assert(
typeof imageUrl == 'string' && !isNaN(width) && !isNaN(height),
'Unexpected respose from the Google Image Search API!');
callback(imageUrl, width, height);
};
x.onerror = function() {
errorCallback('Network error.');
};
x.send();
}
В основном это изменение URL-адреса поиска (который должен иметь searchType=image
, как указано) и структурных ссылок ответа в getImageUrl, и настройки механизма CSE. Убедитесь, что в CSE включен Image search
, а под Sites to search
выберите Search the entire web but emphasize included sites
из списка опций.
Ответ 5
Я попытался получить более авторитетный ответ в официальной группе API Google AJAX,
и кажется, что ответ NO (!). API пользовательского поиска Google в настоящее время не поддерживает только поиск изображений. Вместо этого вы можете использовать устаревший API поиска изображений Google.
проверить this
Ответ 6
Попробуйте добавить эту строку:
customSearchOptions['disableWebSearch'] = true;
Ответ 7
Попробуйте этот
customSearchOptions['searchType'] = "image"
customSearchOptions['enableImageSearch'] = true
customSearchOptions['disableWebSearch'] = true;