javascript google-search-api google-image-search

javascript - Búsqueda personalizada de Google solo para imágenes



google-search-api google-image-search (7)

Dado que la API de búsqueda de imágenes de Google está en desuso, se debe usar la API de búsqueda personalizada de Google para esto.

He hecho un pequeño ejemplo usándolo. Mi problema es que quiero devolver solo los resultados de búsqueda de imágenes de google. Por lo que esto muestra los resultados web, y el usuario puede cambiar al resultado de la imagen. ¿Cómo puedo mostrar solo los resultados de la imagen por defecto?

<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 documentación de la API es bastante deficiente, solo describe cómo agregar resultados adicionales.


Intenté obtener una respuesta más autorizada en el grupo oficial de API de AJAX de Google, y parece que la respuesta es NO (!). La API de búsqueda personalizada de Google actualmente no admite solo la búsqueda de imágenes. Puede utilizar la API de búsqueda de imágenes de Google en desuso.

mira this


Intenta agregar esta línea:

customSearchOptions[''disableWebSearch''] = true;


La búsqueda de imágenes de Google ahora es compatible con la API del motor de búsqueda personalizado. Vea la sección de parámetros API de esta página . Estoy usando la API con python y para mi aplicación simplemente especifico el parámetro en la llamada a la API.

searchType = "image"

Vea esta publicación en el blog de cse .

EDITAR: Como Marc señala en su comentario a continuación, debe hacer clic en "Habilitar búsqueda de imágenes" en su consola CSE.


No estoy 100% seguro de esto, pero no creo que la API sea compatible con lo que estás tratando de hacer. Esto no es en absoluto sorprendente, ya que las API de búsqueda de Google son infames por carecer de funcionalidad básica (como el límite de la búsqueda estándar de 20 resultados, etc.). Creo que el hecho de que sea la primera persona en responder esto en los 3 días que lleva activo es otro indicio de que probablemente no sea compatible (o, si lo está, Google nunca se molestó en decírselo a nadie).

Sé que no te va a gustar esto, pero creo que tu mejor opción es eliminar las imágenes del conjunto de resultados devuelto. Por lo general, eso es a lo que las personas tienen que recurrir cuando tratan con datos de resultados de Google. Afortunadamente, su código de interfaz es notablemente consistente, por lo que unas cuantas combinaciones de expresiones regulares bien ajustadas y / o divisiones deberían hacer el truco por usted.

Y sí, es BS total que Google ha proporcionado un soporte tan pésimo para esta API. =)


Para aquellos que están en el tutorial de WebExtensions, aquí está el código actualizado que usé en popup.js para que funcione con la nueva funcionalidad 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(); }

Principalmente, está cambiando la URL de búsqueda (que debería tener searchType=image como se mencionó) y las referencias estructurales de respuesta en getImageUrl, y configurando el motor CSE. Asegúrese de que su CSE tenga la Image search activada, y en Sites to search asegúrese de seleccionar Search the entire web but emphasize included sites haga Search the entire web but emphasize included sites de la lista de opciones.


Prueba este

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


Según la API de control de elementos de búsqueda personalizada de Google: sitio web de documentación, esto es posible.

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

Este es el fragmento usado para buscar por imagen por defecto:

''defaultToImageSearch''

Así que creo que la sintaxis completa para usar esto sería:

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