Google AJAX Search API (検索API) プログラミング解説

導入

ライブラリの読み込み

最初にhttp://www.google.com/jsapiからAPIのスクリプトを読み込みます。Google AJAX API の使用

<script type="text/javascript" src="http://www.google.com/jsapi?key=xx"></script>

AJAX APIキー

スクリプトを読み込むときのクエリ「?key=xx」のxxには、APIキーを記述します。これはGoogle APIs Consoleで取得でき、Simple API Accessの項目にあるKey for browser appsの[API key]がそれです。なおこのキーは、APIを使用する上で問題が生じたときにGoogleから通知を受けたい場合に用いるもので、必須ではありませんAJAX API キーの使用 - Google AJAX Search API - Google Code

検索APIの読み込み

google.load(
    moduleName,       // APIの名前
    moduleVersion,    // APIモジュールのバージョン
    optionalSettings  // オプション設定
    )
optionalSettings
プロパティ 説明
callback  
language  
nocss  
packages  
base_domain  
other_params  
google.load( 'search', '1' );
利用できる AJAX API - Google Code Available APIs - Google Loader Developer's Guide - Google Loader - Google Developers

検索APIの読み込み完了時に呼び出されるハンドラ関数の登録

google.setOnLoadCallback( OnLoad );

検索コントロールの作成

function OnLoad()
{
    new google.search.SearchControl();
}
検索コントロール - Google Code

検索完了時に処理を実行

検索結果に対して何らかの処理を行う場合には、コールバック関数を登録することでこれを実現できます。検索コントロール コールバック - Google Code

コールバック関数の登録 (setSearchCompleteCallback)

imageSearch = new google.search.ImageSearch();

imageSearch.setSearchCompleteCallback(
    this,            //
    SearchComplete,  // 呼び出す関数
    [ imageSearch ]  // 関数に渡す引数 (配列)
    );
google.search.Search プロパティ - Google Code

第3引数がかっこで囲まれているのは配列で渡す必要があるためで、上記では要素が1つの配列として定義しています。

すべての検索結果を取得

一回の検索で結果として返されるのは、setResultSetSize()メソッドで設定した数だけです。しかしこのメソッドでは最大で8件 (LARGE_RESULTSET) までしか設定できないため、すべての検索結果は取得できません。

そこで検索完了時にさらに続きを検索するようにすることで、すべての検索結果を取得できるようにします。

検索結果はページという単位でまとめられていますので、続きを検索するにはそのページの番号を指定して検索します。

// 検索完了時に呼び出されるコールバック関数
function SearchComplete( searcher )
{
    var current = searcher.cursor;               // cursorオブジェクト
    var currentPage = current.currentPageIndex;  // 現在のページ番号

    if( currentPage < cursor.pages.length - 1 )
    {
        var nextPage = currentPage + 1;          // 次のページのページ番号

        // 次のページを検索する
        searcher.gotoPage( nextPage );
    }
}

gotoPageは、google.search.Searchのメソッドです。

Cursorオブジェクト

追加の検索を行うための情報は、検索が正常に完了したときにsearchオブジェクトのSearchプロパティから取得できる、cursorプロパティから取得できます。

検索結果が0件のときには、cursorプロパティは未定義値 (undefined) となります。

Cursorオブジェクトのプロパティ
プロパティ プロパティの意味と取得例
pages[ ] 追加の検索を行うための情報。次に示す2つのプロパティを持つ
  • start … 各ページの最初の項目の検索順位 (moreResultsUrlのstart引数の値)
  • label … ページ番号
[ Object { start="0",  label=1 },
  Object { start="8",  label=2 },
  Object { start="16", label=3 },
  Object { start="24", label=4 },
  Object { start="32", label=5 },
  Object { start="40", label=6 },
  Object { start="48", label=7 },
  Object { start="56", label=8 } ]
currentPageIndex 現在のページ番号 (現在の結果のpages[ ]のインデックス)
0
estimatedResultCount 検索条件に一致する結果数の推定値
"12500000"
moreResultsUrl 現在の検索条件でgoogle.comで検索する場合のURL
http://www.google.com/images?source=uds&start=0&hl=ja&q=test
google.search.Search プロパティ - Google Code

検索APIの種類

JavaScriptを使用しない方法

以下のURLにパラメータを付加してアクセスすることで、結果を直接JSONで受け取れます。

検索対象 URL
Web検索 http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=test
画像検索 http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=test
動画検索 http://ajax.googleapis.com/ajax/services/search/video?v=1.0&q=test
ローカル検索 http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=test
ニュース検索 http://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=test

参考

  • Google AJAX Search API ウィザード - Google Code

ドキュメント

  • デベロッパー ガイド (APIの概要)
  • クラス リファレンス
  • サンプルコード

APIの使用条件

  • Web Search API Terms of Service - Google Code