web-dev-qa-db-fra.com

Recherche personnalisée Google pour les images uniquement

Étant donné que API de recherche d'images Google est déconseillé, il convient d'utiliser API de recherche personnalisée Google pour cela.

J'ai fait un petit exemple en l'utilisant. Mon problème est que je souhaite renvoyer les résultats de recherche d'images Google uniquement . Ainsi, cela montre les résultats Web et l'utilisateur peut basculer vers le résultat de l'image. Comment puis-je afficher uniquement les résultats de l'image par défaut?

<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" />

La documentation de l'API est assez pauvre, elle ne décrit que comment ajouter des résultats supplémentaires.

21
sibidiba

La recherche d'images Google est désormais prise en charge dans l'API du moteur de recherche personnalisé. Voir la section des paramètres API de cette page . J'utilise l'API avec python et pour mon application, je spécifie simplement le paramètre dans l'appel d'API.

searchType = "image"

Voir cet article sur le blog cse .

EDIT: Comme Marc le souligne dans son commentaire ci-dessous, vous devez cliquer sur "Activer la recherche d'images" dans votre console CSE.

30
kelorek

Selon l'API Google Custom Search Element Control - site Web de documentation, cela est possible.

https://developers.google.com/custom-search/docs/element

C'est le fragment utilisé pour la recherche par image par défaut:

'defaultToImageSearch'

Je pense donc que la syntaxe complète pour utiliser ceci serait:

<script>
.
// Google custom search code, ids go here...
.
</script>
<gcse:search></gcse:search>
**<gcse:searchresults enableImageSearch="true" defaultToImageSearch="true">**
4
Paul Kane

Pour ceux qui passent par le didacticiel WebExtensions, voici le code mis à jour que j'ai utilisé dans popup.js pour le faire fonctionner avec la nouvelle fonctionnalité 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();
}

Il s'agit principalement de modifier l'URL de recherche (qui devrait avoir searchType=image comme mentionné) et les références structurelles de réponse dans getImageUrl, et la configuration du moteur CSE. Assurez-vous que votre CSE a Image search activé et sous Sites to search assurez-vous de sélectionner Search the entire web but emphasize included sites dans la liste des options.

3
user10000000

Je ne suis pas sûr à 100% de cela, mais je ne pense pas que l'API supporte ce que vous essayez de faire. Ce n'est pas du tout surprenant, car les API de recherche de Google sont tristement célèbres pour leur manque de fonctionnalités, même de base (telles que la limite de 20 résultats de l'API de recherche standard, etc.). Je pense que le fait que je sois la première personne à répondre à cela dans les 3 jours où il a été actif est une autre indication que cela n'est probablement pas pris en charge (ou, si c'est le cas, Google n'a jamais pris la peine de le dire à personne).

Je sais que vous n'aimerez pas cela, mais je pense que votre meilleure option est de gratter vous-même les images du jeu de résultats renvoyé. C'est généralement ce à quoi les gens doivent recourir lorsqu'ils traitent des données de résultats Google. Heureusement, leur code frontal est remarquablement cohérent, donc quelques correspondances et/ou divisions regex bien ajustées devraient faire l'affaire pour vous.

Et oui, c'est au total BS que Google a fourni un support aussi moche pour cette API. =)

3
Kris Craig

J'ai essayé d'obtenir une réponse plus fiable dans le groupe officiel Google AJAX APIs, et il semble que la réponse soit NON (!). L'API de recherche personnalisée de Google ne prend actuellement pas en charge uniquement la recherche d'images. Vous pouvez utilisez plutôt l'API de recherche d'images Google obsolète.

vérifier ce

2
sibidiba

Essayez d'ajouter cette ligne:

customSearchOptions['disableWebSearch'] = true;
2
migueltonic

Essaye celui-là

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