Google Search REST API は,利用中止になっていた SOAP Search API を正式に置き換えるもので,外部のウェブアプリケーションから,Google の検索エンジンを利用するためのRESTインタフェースです.上に貼ったリンクの説明が詳しいですが,
- ライセンスキー不要
- クエリ数に関する制限がない
- 以前よりも簡単に使える
- Web検索,イメージ検索,ニュース検索,ビデオ検索,ローカル(地図)検索,ブログ検索,ブック検索が利用可能
- 有効,かつ正確なHTTP Refererヘッダを送信する必要がある
- 一つのAPI呼び出しで,最大8件までしか検索結果を得られない
- 検索結果は最大でも32件までしか得られない.
- 利用規約が厳しい
という特徴があります.サービスの基本的な使い方は,クエリを引数として埋め込んだ検索サービスのURLにアクセスし,返ってくるJSONオブジェクトを解析するというものです.私の名前(Naoaki Okazaki)で検索サービスを呼び出す例です.
面白そうなので,早速Pythonから呼び出すコードを書いてみました.動かすためには,jsonlibをインストールする必要があります.モジュールとしてはsearch関数のみをエクスポーズしています.コマンドラインから動かす場合は,引数をクエリとして,RESTのレスポンスのすべてを表示し,さらに,その中から検索ヒット件数を抜き出しています.
#!/bin/env python
import urllib
import urllib2
import jsonlib # http://pypi.python.org/pypi/jsonlib/
# CHANGE the referer URL below FOR YOUR OWN.
REFERER = 'http://www.change-this.org/'
BASEURLS = {
'web': 'http://ajax.googleapis.com/ajax/services/search/web',
'local': 'http://ajax.googleapis.com/ajax/services/search/local',
'video': 'http://ajax.googleapis.com/ajax/services/search/video',
'blog': 'http://ajax.googleapis.com/ajax/services/search/blogs',
'news': 'http://ajax.googleapis.com/ajax/services/search/news',
'book': 'http://ajax.googleapis.com/ajax/services/search/books',
'image': 'http://ajax.googleapis.com/ajax/services/search/images',
}
def search(query, referer=REFERER, type='web', **kwargs):
# Find the URL for the specific type of Google AJAX Search API.
baseurl = BASEURLS.get(type)
if baseurl is None:
raise TypeError
# Add the necessary arguments.
kwargs.update({
'v': 1.0,
'q': query,
})
# Build the URL.
url = '?'.join((baseurl, urllib.urlencode(kwargs)))
# Add a referer HTTP header to the request.
req = urllib2.Request(url)
req.add_header('Referer', referer)
f = urllib2.urlopen(req)
# Translate the JSON response to a Python object.
return jsonlib.read(f.read())
if __name__ == '__main__':
import sys
query = sys.argv[1]
res = search(query, hl=’en’)
# Show the full response from the service.
print res
# Show the Google count for the query.
print res['responseData']['cursor']['estimatedResultCount']
上のサンプルプログラムを使うときは,
- REFERERのアドレスを自分のものに置き換えること
- Googleが出している利用規約を守る
ことに注意してください.
search関数のオプショナル引数は,Googleのサービス側にパラメータとして素通りさせています.各サービスに対して,どのような引数が使えるのか(例えば言語を設定するhlなど)は,リファレンスマニュアルを参照してください.
RESTインタフェースは,今回初めて使いましたが,SOAPと比べるとかなりお手軽ですね.JavaScriptで扱うのが簡単なのは当たり前ですが,Pythonから使う場合でも,JSONライブラリがあればすぐに出来ます.Pythonでは,すでにSOAPのライブラリよりもJSONライブラリの方が充実している感じになっています.やっぱりXMLはコンピュータが交換するフォーマットとして,まだシンプルさが欠けていたのかも知れませんね.