2017年2月25日土曜日

Google Custom Search API を使って画像検索をしてみた

概要

Google の画像検索 API が 2011/5 に使えなくなってから画像を検索をする場合は Google Custom Search API を使うことになりました
今回は Google Custom Search API を使った画像検索の方法を紹介します
クライアントは curl を使って直接 API をコールしているのでプログラムから使いたい場合は各言語の HTTP クライアントなどを使ってください

環境

  • Mac OS X 10.11.5
  • Google Custom Search API 2016/06/05 時点
  • Google CSE 2016/06/05 時点

Google Custom Search API の有効化

https://console.developers.google.com/iam-admin/projects
にアクセスして Google Custom Search API を有効化します

try_gsa_site_access.png
「プロジェクトを作成」を選択して新規でプロジェクトを作成しましょう

try_gsa_input_project_name.png
まずプロジェクト名を入力します
ここは何でも OK です

try_gsa_select_api.png
プロジェクトを作成すると API の一覧画面になるのでここから「Custom Search API」を選択しましょう

try_gsa_enable_api.png
「有効にする」ボタンがあるので選択し API を使えるようにします

try_gsa_setting_auth.png
すると認証情報を作成する旨の警告が出るのでそのまま「認証情報に進む」を選択して認証情報を作成しましょう

try_gsa_setting_auth_type.png
まず認証情報の種類を設定します
使用する API は「Custom Search API」を選択します
API を呼び出す場所は何でも OK ですが、とりあえず「ウェブサーバー (node.js, Tomcat など)」を選択しましょう
選択したら「必要な認証情報」を選択して次に進みます

try_gsa_setting_auth_name.png
作成する認証情報の名前を設定します
今回は「test-server-key」という名前にします
「リクエストを受け入れるサーバー IP アドレス (省略可)」は何も入力しないで OK です
問題なければ「API キーを作成する」を選択して API キーを作成しましょう

try_gsa_created_key.png
API キーが作成できたことを確認したら完了しましょう
認証情報の一覧画面に移動します

これで Google Custom Search API の有効化は完了です
次に Google Custom Search Engine (CSE) の作成をします

Google Custom Search Engine の作成

Google CSE では API を叩くために必要なパラメータである「検索エンジン ID」の取得を行います

https://cse.google.com/cse/all
にアクセスして Google CSE を作成します

try_gsa_add_cse.png
検索エンジンの一覧画面から「Add」で新規に検索エンジンを作成します

try_gsa_input_engine_info.png
新規で検索エンジンを作成する画面になるので必要な情報を入力します

  • 検索するサイト・・・www.google.co.jp/*
  • 言語・・・日本語
  • 検索エンジンの名前・・・test-engine

という感じで入力しましょう
最後の検索エンジンの名前は何でも OK です
入力に問題がなければ「作成」を選択します

try_gsa_edit_engine.png
作成が完了したら早速編集します
「コントロールパネル」を選択しましょう

try_gsa_get_engine_id.png
まず肝心の「検索エンジン ID」を取得します
画面中段くらいにある詳細の「検索エンジン ID」ボタンをクリックしましょう
ポップアップが出て検索エンジン ID が表示されるので、これを使いましょう

try_gsa_enable_image_search.png
次に画像検索を有効にします
「画像検索」の項目のトグルボタンで設定を有効にします
また、「検索するサイト」という項目が少し下にあるのでここの項目を「追加したサイトを重視して、ウェブ全体を検索する」に変更しましょう
上の画像では「音声入力」もオンになっていますが、今回は音声入力は使わないのでオフにしても OK です

try_gsa_test_cse.png
一応この状態で CSE は動作するはずです
念のため動作確認したい場合は右側にあるテスト用の検索窓を使うと設定した CSE がちゃんと動作しているか確認することができます

動作確認

ここまでで

  • API キー・・・Google Custom Search API から取得
  • 検索エンジン ID・・・ Google CSE から取得

することができました
これらの情報を使って実際に画像検索 API をコールしてみます

今回は curl 使ってコールします
コールする URL は以下の通りです

https://www.googleapis.com/customsearch/v1?key=[API キー]&cx=[検索エンジン ID]&searchType=image&q=hawksnow-log

という感じになります
API キーと検索エンジン ID は取得したものをそれぞれ入力してください
「searchType」は画像検索なので「image」を設定します
「q」には好きな検索クエリを指定してください

これを curl でコールすると以下のような Json で結果が返ってくると思います
( 実際の結果は、kind, url, queries, nextPage, context, searchInformation などの情報も含まれていますが、結果が長いので一部を記載しています )

 "items": [
  {
   "kind": "customsearch#result",
   "title": "hawksnowlog (@hawksnowlog) | Twitter",
   "htmlTitle": "\u003cb\u003ehawksnowlog\u003c/b\u003e (@\u003cb\u003ehawksnowlog\u003c/b\u003e) | Twitter",
   "link": "https://pbs.twimg.com/profile_images/712848447569661952/ayfI9-77.jpg",
   "displayLink": "twitter.com",
   "snippet": "hawksnowlog (@hawksnowlog) |",
   "htmlSnippet": "\u003cb\u003ehawksnowlog\u003c/b\u003e (@\u003cb\u003ehawksnowlog\u003c/b\u003e) |",
   "mime": "image/jpeg",
   "image": {
    "contextLink": "https://twitter.com/hawksnowlog",
    "height": 256,
    "width": 256,
    "byteSize": 24875,
    "thumbnailLink": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQ3-Q1N6LqmggIC_Hejxcm4PHfIFtNJP7kGvQT1APE2AiT53ptBp-FZ0A",
    "thumbnailHeight": 111,
    "thumbnailWidth": 111
   }
  }

という感じです
実際に指定できるパラメータは他にもたくさんあるので API エクスプローラで指定できるパラメータを見ながらパラメータを調整するといいと思います

例えば「num」というパラメータは一回の検索結果で取得できる数を指定できるパラメータですが、これを 1 とすると先頭の一件のみを取得することができるようになります
( ちなみに num はデフォルトで 10 で 10 以上は指定できないようです )

リクエスト数の確認

おまけですが API のリクエスト数は Google Custom Search API のダッシュボードから確認することができます

try_gsa_check_api_count.png

有効な API -> Custom Search API -> 使用量

で確認することができます
リアルタイムにデータは更新されるので、リクエスト数の限界のエラーなどが出る場合はここで確認するといいと思います

最後に

紹介は以上です

実はこの Google Custom Search API は有料のサービスです
執筆時点での公式を見ると

For CSE users, the API provides 100 search queries per day for free

とあり 1 日 100 request しか出来ないようです
なので、大量にページネイトする処理や大量に検索リクエストをするような処理があるとすぐに使えなくなってしまうと思います

無料の範囲で使う場合はキャッシュなどを使ってあまりリクエストさせないような仕組みを検討する必要がありそうです

P.S 20160607

Google Custom Search API と Google 本家で検索した結果は必ずしも一緒になることはないらしいので、その点は注意が必要です
https://support.google.com/customsearch/answer/4513751?hl=ja&ref_topic=4513742

0 件のコメント:

コメントを投稿