[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

Google Web API を使ってみる

Google Web API が公開され てすぐダウンロードしたのですが、なんやかんやでほったらかしで、 この間ようやく試しました。

目次


1. 環境

OS は VineLinux 2.5 です。
JDK は 1.3.1_02 です。

2. 試運転

…といっても、たいしたことは必要ありません。
あらかじめ、
Google Web API のページからアーカイブをダウンロードし、Registration Key を取得して おきます(確か、ユーザ登録のようなことをすると、メールで送られてきます)。

では、とりあえず、ダウンロードしたアーカイブ(googleapi.zip)を適当な ところで展開し、README.txt に書いてあるとおりにデモを動かしてみます。

  % cd /some/where
  % unzip /foo/bar/googleapi.zip
  % cd googleapi
  % java -cp googleapi.jar com.google.soap.search.GoogleAPIDemo \
  れじすとれーしょんきー search 検索したい文字列
  Parameters:
  Client key = れじすとれーしょんきー
  Directive  = search
  Args       = 検索したい文字列
  Google Search Results:
  ...後略

と実行して、なにやら検索されているっぽい結果がどばばばばっと出力さ れたらおそらく成功です。
# "れじすとれーしょんきー" は、取得した Registration Key に置き換え てください。
# もちろん、"検索したい文字列" は、ほんとに検索したい文字列に置き換 えてください。
あと、このデモでスペルチェックも行うことができます。

  % java -cp googleapi.jar com.google.soap.search.GoogleAPIDemo \
  れじすとれーしょんきー spell congraturations
  Parameters:
  Client key = れじすとれーしょんきー
  Directive  = spell
  Args       = congraturations
  Spelling suggestion:
  congratulations

きちんと直してくれました。;-p
引数に指定している googleapi.jar ですが、$JAVA_HOME/jre/lib/ext に あらかじめ置いておけば、-cp オプションでいちいち指定しなくてすみます。

3. なにやら自作

附属のドキュメントを見てもわかるとおり、定義されているクラスは6つし かありません。基本的には、 とするだけで、検索できます。
スペルチェックの場合はもっと簡単で、GoogleSearch のインスタンスに Registration Key を設定しておき、doSpellingSuggestion() メソッドを 呼び出すと、引数で渡した文字列をチェックし、結果を String で返して くれます。

というわけで、GoogleAPIDemo だけで満足していてはいけないので、機能 的にはあまり変わりませんが、作ってみました。

  import com.google.soap.search.*;

  public class googletest {
	// my registration key
	private static final String key = "れじすとれーしょんきー";
	public static final int MAXRESULT = 10;
	public static final int MAXEND = 100;

	public static int showResults(GoogleSearchResult result) {
		GoogleSearchResultElement[] elements =
			result.getResultElements();
		int start = result.getStartIndex();
		System.out.println("start=" + start + ", end=" +
			result.getEndIndex());
		for(int i=0; i<elements.length; i++) {
			System.out.println("  " + (start+i) + " : " +
				elements[i].getTitle() + " / " +
				elements[i].getURL());
		}
		return elements.length;
	}

	public static void doSearch(GoogleSearch search) {
		int index=0;
		try {
			while(true) {
				search.setStartResult(index);
				GoogleSearchResult result = search.doSearch();
				//System.out.println(result.toString());
				if(showResults(result) < MAXRESULT) {
					break;
				}
				index = result.getEndIndex();
				if(index >= MAXEND) {
					break;
				}
			}
		} catch(GoogleSearchFault fault) {
			fault.printStackTrace();
		}
	}

	public static void main(String arg[]) {
		GoogleSearch search = new GoogleSearch();
		search.setKey(key);
		search.setLanguageRestricts("lang_ja");
		search.setMaxResults(MAXRESULT);
		search.setInputEncoding("x-sjis");
		search.setOutputEncoding("x-sjis");
		//search.setSoapServiceURL("http://tamao:8880/");
		for(int i=0; i
  

# 間違っても褒められるような代物ではございませんが…。
main() では、GoogleSearch のインスタンスを生成し、Registration key などを設定しています。次に、各引数に対して、検索したい文字列に 引数を設定し、doSearch() を呼んでいます。
doSearch() では、doSearch() メソッドを呼び出して検索をさせ、 showResults() で結果を出力しています。最大10件までしか結果が 得られないので、続きがありそうなら、続きから検索を行います。
showResults() では、getResultElements() メソッドで各結果を GoogleSearchElement の配列で得て、それぞれの中身の一部(ここではタイトル と URL だけ)を出力しています。
# 他にもいろいろな情報を含んでいます。toString() するとよくわかります。

さて、検索の際には、
Google のサイト に対して SOAP でアクセスしています。実際にどのようなものを渡している のか、覗いてみましょう。
上記のままでは、Google のサイト に直接アクセスしにいきますが、setSoapServiceURL() メソッドで変更す ることができます。ローカルに立ち上げている偽プロキシサーバの URL を これに設定し、偽プロキシサーバに、アクセスしてきたものを出力させます。 すると、

  POST / HTTP/1.0
  Host: tamao
  Content-Type: text/xml; charset=utf-8
  Content-Length: 852
  SOAPAction: "urn:GoogleSearchAction"

  <?xml version='1.0' encoding='UTF-8'?>
  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" \
  xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" \
  xmlns:xsd="http://www.w3.org/1999/XMLSchema">
  <SOAP-ENV:Body>
  <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch" \
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <key xsi:type="xsd:string">れじすとれーしょんきー</key>
  <q xsi:type="xsd:string">検索したい文字列</q>
  <start xsi:type="xsd:int">0</start>
  <maxResults xsi:type="xsd:int">10</maxResults>
  <filter xsi:type="xsd:boolean">true</filter>
  <restrict xsi:type="xsd:string"></restrict>
  <safeSearch xsi:type="xsd:boolean">false</safeSearch>
  <lr xsi:type="xsd:string">lang_ja</lr>
  <ie xsi:type="xsd:string">x-sjis</ie>
  <oe xsi:type="xsd:string">x-sjis</oe>
  </ns1:doGoogleSearch>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

…という結果が得られました。もろ SOAP です。(当たり前か…。)

4. 今後の課題

これを用いれば、ブラウザでなくとも
Google を用いた検索を行うこと が可能です。
今後は、これを使ってどんな面白いことができるのかを考えることが課題 かなあ…と思っております。

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Fri Jun 28 00:55:19 2002