Google Web APIs を使ってみる


Google Web APIs (Google SOAP Search API) の使い方などの説明です。

Google Web APIs / Java から使う / Perl から使う / 制限 / 戻る / トップページ


Google Web APIs

Google Web APIs (Google SOAP Search API に名称が変更されました) とは Google の検索エンジンを簡単にプログラミング言語から 利用できるようにした Web サービスです。 Web 検索、スペルミス指摘、キャッシュページの取り出しが可能です。 現在 Google Web APIs - Home (改名後は Google SOAP Search API。機能は変わっていません) (英語) でβ版が提供されています。 検索エンジンですが、Google の持つその膨大な情報をうまく利用すれば 何か面白い物が作れるかもしれません。
 
Google Web APIs (Google SOAP Search API) は SOAP と呼ばれる Web サービスの仕様に添っています。 SOAP とは簡単に言うと、メッセージングなどのネットワーク上で やり取りされる情報を XML で記述したものです。
 
また、この API には WSDL ファイルが用意されているため、 様々なプログラミング言語から使用することができます。 WSDL ファイルとは Web サービスの定義がかかれた XML 文書で、 WSDL を扱う API をプログラミング言語が持っていれば、 簡単に API を呼び出すことができます。 SoapWare.Org Services Google API Implementations (英語) には、各プログラミング言語での実装が集められています。
 
Google Web APIs (Google SOAP Search API) は Google SOAP Search API (英語) から WSDL ファイルやサンプルをダウンロードし、 ユーザーアカウントを取得 (無料) することで使用することができます。 ユーザーアカウントを取得すると、ライセンスキーを得ることができます。 このライセンスキーは Google Web APIs を使用する際に設定する、 ユーザーごとに割り当てられた固有の文字列です。
 
残念ながら、2005年12月5日から新しいライセンスキーの発行が 停止されました。発行済みのライセンスキーは使い続けられます。 今後は Google AJAX Search API を使って欲しいとのことですが、 こちらは JavaScript 上から AJAX (JSON) を使ってのアクセスであるため、 自作のサーバーやアプリケーションからのアクセスができない、 最大 8 件までしか情報が得られないなど、 残念ながら完全に代わりに使えるものではありません。
 

 
    手前味噌ですみませんが、書籍のご紹介 (宣伝)。 Web サービスの解説をしているムック本、 最新 Web サービス API エクスプローラ が 2005/9/23 に発売されました。 この中の Google の記事を執筆させて頂きました。
 
技術評論社
最新 Web サービス API エクスプローラ 〜Amazon、はてな、Google、Yahoo! 4大Webサービス完全攻略
B5 判/176 ページ
 
2005年9月23日発売/1554円 (税込)/ISBN4-7741-2496-6

Java から使う

ダウンロードした googleapi.zip を展開するとそのフォルダに googleapi.jar が含まれています。 この googleapi.jar さえあれば、 Google Web APIs (Google SOAP Search API) が実行できます。 他にインストールしなければならない API は特にありません (必要な API 類が googleapi.jar 内部に含まれています)。
 
これにはサンプルプログラムが入っています。サンプルは
	java -classpath googleapi.jar com.google.soap.search.GoogleAPIDemo ライセンスキー search 検索語
で実行できます。
 
API の使い方は至ってシンプルです。 全ての API は com.google.soap.search パッケージに属します。 その中の GoogleSearch クラスのオブジェクトに検索語を渡し、 doSearch() メソッドを呼び出すと、検索が実行されて、 その結果を収めた GoogleSearchResult オブジェクトが得られます。 日本語での検索もそのまま使えます。
	GoogleSearch google=new GoogleSearch();
	google.setKey(自分のライセンスキー);
	google.setQueryString(検索文字列);
	google.setLanguageRestricts("lang_ja");		// 日本語サイトに制限 (オプション)
	
	GoogleSearchResult result=google.doSearch();
検索失敗時に GoogleSearchFault 例外が投げられますので、 try〜catch 節で囲むのをお忘れなく。
 
後は、GoogleSearchResult オブジェクトから検索結果が取り出せます。
	GoogleSearchResultElement[] element=result.getResultElements();
	for (int i=0;i<=element.length-1;i++)
	{
		// element[i] の情報を使う
	}
スペルミス指摘、キャッシュページの取り出しは、 GoogleSearch オブジェクトの doGetCachedPage メソッドや doSpellingSuggestion メソッドを呼び出すだけです。

Perl から使う

ダウンロードした googleapi.zip にも含まれていますが、ファイル GoogleSearch.wsdl を SOAP::Lite モジュールに渡すことで、 Google Web APIs (Google SOAP Search API) が実行できます。 当然、SOAP::Lite モジュール が インストールされている必要があります。
 
README.txt にも書かれていますが、例えば次のように使います。
	use SOAP::Lite;
	
	my $googleSearch = SOAP::Lite -> service("file:GoogleSearch.wsdl");
	my $key='ライセンスキー';
	my $query="検索語";
	
	my $result = $googleSearch -> doGoogleSearch($key, $query, 0, 10, "false", "", "false", "", "latin1", "latin1");
	print "About ".$result->{"estimatedTotalResultsCount"}."results.\n";
で実行できます。
 
API の使い方はこちらも至ってシンプルです。 $googleSearch に検索語などの情報を渡して、 doGoogleSearch() メソッドを呼び出すと、検索が実行されて、 その結果を収めた GoogleSearchResult オブジェクトが得られます。 後は、GoogleSearchResult オブジェクトから検索結果が取り出せます。
 
日本語で検索するには単語を UTF-8 に変換する必要があります。 Jcode.pm を 使うと良いでしょう。
	use SOAP::Lite;
	use Jcode;
	
	my $googleSearch = SOAP::Lite -> service("file:GoogleSearch.wsdl");
	my $key='ライセンスキー';
	my $query="検索語";
	
	my $result = $googleSearch -> doGoogleSearch($key, jcode($query)->utf8, 0, 10, "false", "", "false", "lang_ja", "UTF-8", "UTF-8");
	print "About ".$result->{"estimatedTotalResultsCount"}."results.\n";
Perl 5.8 以降で UTF-8 に変換する場合は、Encode モジュールを使います。 Perl 5.8 以降で Jcode.pm 2.0 を使えば自動的に Encode モジュールに ラッピングしてくれますが、その場合変換後の文字 jcode($query)->utf8 に UTF-8 フラグが立っていないために、 doGoogleSearch() メソッドが正しく文字を扱えず、化けた文字で 検索してしまうようです。
	use SOAP::Lite;
	use Encode qw/encode decode/;
	use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
	
	my $googleSearch = SOAP::Lite -> service("file:GoogleSearch.wsdl");
	my $key='ライセンスキー';
	my $query="検索語";
	
	my $result = $googleSearch -> doGoogleSearch($key, decode("Guess",$query), 0, 10, "false", "", "false", "lang_ja", "UTF-8", "UTF-8");
	print "About ".$result->{"estimatedTotalResultsCount"}."results.\n";
スペルミス指摘、キャッシュページの取り出しは、 doGetCachedPage メソッドや doSpellingSuggestion メソッドを呼び出すだけです。

制限事項

Google のデータベースには 2 種類あるらしく、 ひとつは www.google.com などの公式な検索サイトで提供されている完全版、 もうひとつは他社の検索サイトへの貸し出しに使っている縮小版があります。 Google Web APIs (Google SOAP Search API) は この縮小版の方のデータベースを参照しているようです。
 
そのため、検索ヒット数が検索サイト側よりも少なくなる傾向にあります。
 
縮小版のデータベースを使っている検索サイトは Excite などが ありますので、比較してみるとわかります。
 
単語 "test" で検索をかけた時のヒット数
検索手段 検索ヒット数 (値は時々揺らぎます)
www.google.com 726,000,000件
Google Web APIs (Google SOAP Search API) 50,200,000件
Excite (Google エンジン) 50,300,000件

日本語対応

Google Web APIs (Google SOAP Search API) の日本語対応はできていたり、 できていなかったりと時期によって変わっているため、 情報が錯乱しているところがあります。 そこで、ここで簡単にまとめてみます。
 
まず、リリース直後から2002年8月30日のβ1版の間は非サポートでした。 ただ、この期間は Content-Type を "text/xml; charset=utf-8" ではなく、 "text/xml" に書き換えて UTF-8 でデータを送受信することで、 裏技的に日本語を使うこともできました。
 
次に、2002年8月30日以降のβ2版では、日本語が正式サポートされ、 特殊なことをしなくても UTF-8 で日本語検索が可能になりました。 ただし、Shift-JIS などでの送受信はまだサポートされていません。 また、CJK 言語 (中国語、日本語、韓国語の文字コード) では 一部不完全な動作をすることがあると公表されています。
 
そして、2005年8月中旬頃から急に日本語の検索ができなくなりました。 これは Google サーバーの挙動が変更されたことが原因ですが、 そのことが Google から公表されているわけではないため、 不具合なのか仕様変更をしたのか判断がつかない状況でした。 この時のとりあえずの対処法として、検索語を HTML でエスケープする形 (&xxx;) で記述することで検索できるように対処できました。 例えば、「検索語」という言葉を検索にかけたい場合はそれぞれの語の Unicode の文字コードを & と ; で挟んで並べた &#26908;&#32034;&#35486; とすれば良いです。
 
そして、さらに2005年9月19日頃に、サーバーは以前の挙動にこっそりと 戻されました。8月中旬頃からの一ヶ月間のサーバーの挙動は、 Google の他のサービスの改定の影響で出てしまった不具合だったのかも しれません。
 
そのような流れを経て、結局現在のβ2版では、 日本語は UTF-8 で正式サポートされており、日本語検索が可能です。

戻る