Пользовательский поиск Google только для изображений - PullRequest
19 голосов
/ 09 декабря 2011

Поскольку 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="http://www.google.com/cse/style/look/default.css" type="text/css" />

Документация API довольно скудная, она только описывает, как добавить дополнительные результаты.

Ответы [ 7 ]

29 голосов
/ 02 октября 2012

Поиск картинок Google теперь поддерживается в API пользовательской поисковой системы.См. Раздел параметров API этой страницы .Я использую API с python и для своего приложения я просто указываю параметр в вызове API.

searchType = "image"

См. это сообщение в блоге cse .

РЕДАКТИРОВАТЬ: Как отмечает Марк в своем комментарии ниже, вам нужно нажать «Включить поиск изображений» в консоли CSE.

4 голосов
/ 26 января 2013

В соответствии с 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 голосов
/ 08 апреля 2017

Для тех, кто изучает руководство по 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 из списка параметров.

3 голосов
/ 13 декабря 2011

Я не уверен на 100% в этом, но я не думаю, что API поддерживает то, что вы пытаетесь сделать.Это вовсе не удивительно, поскольку поисковые API Google печально известны тем, что им не хватает даже базовых функций (таких как ограничение стандартного API поиска в 20 результатов и т. Д.).Я думаю, тот факт, что я первый, кто ответил на это за 3 дня, когда он был активным, является еще одним свидетельством того, что это, вероятно, просто не поддерживается (или, если это так, Google никогда не удосужился никому рассказать).

Я знаю, что вам это не понравится, но я думаю, что ваш лучший вариант - вычистить изображения из возвращенного набора результатов самостоятельно.Это обычно то, к чему люди должны прибегать при работе с данными результатов Google.К счастью, их код внешнего интерфейса удивительно непротиворечив, поэтому несколько хорошо настроенных совпадений и / или разбиений регулярных выражений должны помочь вам.

И да, именно BS, Google предоставил такую ​​паршивую поддержку для этого API,=)

2 голосов
/ 04 июня 2012

Попробуйте добавить эту строку:

customSearchOptions['disableWebSearch'] = true;
2 голосов
/ 14 декабря 2011

Я попытался получить более авторитетный ответ в официальной группе API Google AJAX, и, похоже, ответ НЕТ (!).API пользовательского поиска Google в настоящее время не поддерживает только поиск изображений.Вместо этого вы можете использовать устаревший API поиска изображений Google.

check this

1 голос
/ 04 июня 2015

Попробуйте это

customSearchOptions['searchType'] = "image"
customSearchOptions['enableImageSearch'] = true
customSearchOptions['disableWebSearch'] = true;
...