web-dev-qa-db-ja.com

画像のみのGoogleカスタム検索

Google画像検索API は非推奨であるため、これには Googleカスタム検索API を使用する必要があります。

私はそれを使って小さな例を作りました。私の問題は、Google画像検索結果のみを返すことです。これにより、Web結果が表示され、ユーザーは画像結果に切り替えることができます。 デフォルトで画像結果のみを表示するにはどうすればよいですか?

<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のドキュメントはかなり貧弱で、追加の結果を追加する方法を説明しているだけです。

21
sibidiba

Google画像検索がカスタム検索エンジンAPIでサポートされるようになりました。 このページ のAPIパラメータセクションを参照してください。 pythonでAPIを使用していますが、私のアプリケーションでは、API呼び出しでパラメーターを指定するだけです。

searchType = "image"

このcseブログの投稿 を参照してください。

編集:マークが彼のコメントで指摘しているように、CSEコンソールで[画像検索を有効にする]をクリックする必要があります。

30
kelorek

Google Custom Search Element Control API-ドキュメントWebサイトによれば、これは可能です。

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">**
4
Paul Kane

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
user10000000

100%確実ではありませんが、APIがあなたがやろうとしていることをサポートしているとは思いません。 Googleの検索APIは、基本的な機能(標準の検索APIの20件の結果という制限など)さえ欠けていることで悪名高いため、これはまったく驚くことではありません。私が3日間でアクティブになって最初にこれに答えたという事実は、これがおそらくサポートされていない(または、サポートされている場合でも、Googleが誰にも話そうとはしなかった)ことを示しています。

私はあなたがこれを好きになるつもりはないことを知っていますが、あなたの最善の選択肢は、返された結果セットから自分で画像を削ることです。これは通常、Googleの結果データを処理するときに人々が頼らなければならないことです。幸いなことに、それらのフロントエンドコードは非常に一貫しているため、いくつかのよく調整された正規表現の一致または分割、あるいはその両方でyaのトリックを実行できます。

そして、はい、GoogleがこのAPIに対してこのようなお粗末なサポートを提供したのはBS全体です。 =)

3
Kris Craig

私は公式のGoogle AJAX APIsグループでより信頼できる回答を得ようとしましたが、答えはNO(!)のようです。Googleのカスタム検索APIは現在、画像検索のみをサポートしていません。代わりに非推奨のGoogle画像検索APIを使用してください。

チェック これ

2
sibidiba

この行を追加してみてください:

customSearchOptions['disableWebSearch'] = true;
2
migueltonic

これをお試しください

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