.NET Tools Googleをプログラムから呼び出す 1.まずは動作確認をしてみる(株)ピーデー川俣 晶 2002/06/18 |
まず、軽く動作確認するために最低限のコードを書いてみよう。フォームをダブル・クリックしてフォームのLoadイベントのハンドラを追加し、その内部に以下のようにコードを書き込んでみよう。
|
|
Google Webサービスの動作確認のためのコード | |
フォームをダブル・クリックすると自動作成されるForm1_Loadメソッドを、このコードのように書き換える。 |
これを実行するとVS.NETの出力ウィンドウに以下のような文字列が表示されるだろう。もちろん、検索を実行する時期によって、結果が変化するのは正常な動作である。
|
|
上記のコードを実行するとVS.NETの出力ウィンドウに表示される実行結果 |
では、ソース・コードを説明しよう。
上記ソース・リストで、3行目に出現するGoogleSearchServiceというクラス名は、GoogleSearchService.csで定義されているもので、Webサービスのインターフェイスを用いてGoogleにアクセスする機能を持つ。このクラスには、いくつものメソッドが含まれているが、単に使うだけなら中身を気にしなくてもよい。重要なことは、このクラスの特定のメソッドを呼び出すと、はるか遠くにあるGoogleサーバと通信してくれる、という機能を把握することである。
具体的にGoogleにより提供される機能は主に3つある。
-
1つ目は、検索そのものを行う機能である。これはdoGoogleSearchメソッドを呼び出すことで実現される。
-
2つ目は、Googleがキャッシュしているページ情報にアクセスする機能である。これはdoGetCachedPageメソッドを呼び出すことで実現される。
-
3つ目は、単語のスペル・チェックを行い、より適切な単語を推理する機能である。これはdoSpellingSuggestionメソッドを呼び出すことで実現される。
このうち、最も使う頻度がありそうなものは、最初のdoGoogleSearchメソッドだろう。キャッシュの取得機能は、万一アクセスできないページがあったときに、Googleのキャッシュ情報で表示するようなWebブラウザを作成するのに有益かもしれないが、簡単なプログラムで試すには向かない用途だ。そして、スペル・チェックの方は、日本語向きの機能とはいいにくい。そのため、ここではdoGoogleSearchメソッドを中心に説明を進めたいと思う。
では、doGoogleSearchメソッドのそれぞれの引数は、どんな意味を持っているのだろうか。第1引数には、Googleのライセンス・キーの文字列を指定する。第2引数には、問い合わせる検索文字列を指定する。第3引数には、何番目の項目から結果を返すかを指定する。第4引数には、何個の結果を返すかを指定する。
GoogleSearchResult r = google.doGoogleSearch(
"ここはあなたのライセンス・キーに書き換える",
"Web Service",
0, 5,
true,
"",
false,
"",
"UTF-8",
"UTF-8");
いうまでもなく、Googleは膨大な情報を持っていて、指定条件によっては、数万件規模でヒットする場合も珍しくない。しかし、1回のメソッド呼び出しで数万件分の情報を取得することに、ほとんど実用性はあり得ない。すべての情報が必要とされることはめったにないからだ。このような場合、通常は、最初の呼び出しで1番目から10番目の結果を取得し、2回目の呼び出しでは11番目から20番目というふうに、少しずつ結果を取得する。ここでは、第3引数と第4引数の組み合わせでそれを実現する。最初の結果から10個の結果を取得するなら、第3引数が0で、第4引数が10になる。ただし、筆者が試したときには、第4引数を10にするとエラーになるケースがあったので、サンプル・ソースは第4引数を5としている。
第5引数には、似たような結果を取り除くフィルタを使うかどうかをbool型の値で指定する。第6引数には、制限情報を記述する。国名や、そのほかのキーワードを指定する。詳しくはGoogle Web APIs(beta)に含まれている「Google Web APIs Reference」を見ていただきたい。
第7引数には、安全な検索(アダルト・サイトを排除)を行うかどうかをbool値で指定する。第8引数には、言語情報を指定する。Googleを普通に使うと、「ウェブ全体から検索」「日本語のページを検索」という選択肢があるが、これに相当するものである。詳しくはGoogle Web APIs(beta)に含まれている「Google Web APIs Reference」を見ていただきたい。第9引数と第10引数には、それぞれ、入力と出力に用いられる文字エンコーディング名を指定する。.NET Framework環境なら、どちらもUTF-8にしておけば、まず問題はないだろう。無指定だと日本語が通らないことになる。
さて、引数が分かっただけでは不十分である。結果の意味が分からなければ、呼び出す意味がない。doGoogleSearchメソッドの戻り値はGoogleSearchResultクラス型である。このクラスはresultElementsというプロパティを持っており、これがResultElementクラス型の配列を値として持つ。この配列は検索された結果の数と同じだけの要素を持つ。つまり、ResultElementクラス型のインスタンス1個が、発見されたサイトの情報を1個持つ。この数は第4引数で指定した数と一致するとは限らない。第4引数が10であっても、該当するサイトが5件しか見つからなければ、配列の要素数は5となる。
ResultElementクラス型に含まれる主要なメンバーは以下のとおりである。“summary”は要約を含む(現バージョンでは中身が何もないようである)。“URL”は発見したページのURLを含む。“snippet”は、発見したページの中で、指定した単語が使用されている前後を抜き出したHTML文書の断片である。“title”はページのタイトルである。
さて、これだけの情報があれば、Googleを利用する簡単なプログラムを作ることができるだろう。
日本語を通すために
実はこのままでは、英語の検索はできるのだが、日本語が通らない(日本語のキーワードで検索できない)ことが知られている。HTTPプロトコルでSOAPメッセージを送信する場合、.NET Frameworkのデフォルトでは、コンテンツ・タイプとして“text/xml; charset=utf8”が使用されるが、GoogleのWebサービスで日本語の検索文字列を使用する場合には、なぜかこれを“text/xml”に変更してやる必要があるようだ(まだサービスがベータ版であるが故の問題と考えられる)。
この問題への対応策は、@ITにあるInsider.NET会議室などから得ることができるので参考にしていただきたい(次で紹介しているサンプル・プログラムでも、この会議室にあるコードを利用させていただいている)。具体的には、「GoogleSearchService.cs」ファイルに少々手を加える必要がある。
INDEX | ||
[.NET Tools] | ||
Googleをプログラムから呼び出す | ||
1.まずは動作確認をしてみる | ||
2.Google監視ツールを作ってみた | ||
「.NET Tools」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|