はじめに
はじめまして。今回よりWindows Liveサービスにて提供されているAPI・SDKの紹介と、それらを利用したアプリケーションの開発をしていきます。どうぞよろしくお願い致します。
Windows Liveとはマイクロソフトのソフトウェアやサービスを総称するブランド名のひとつです。Windows Liveサービスの中にはAPIやSDKが公開されているものもあり、簡単にWindows Liveサービスそれ自体をカスタマイズしたり、作成するアプリケーションの機能として組み込んだり、マッシュアップに利用したりできます。第1回目はWindows Liveサービスの中でも代表的なLive SearchのAPIについて取り上げます。
Live Search API
Live Search APIは、Live Searchの検索エンジンを利用できるWebサービスです。Live Search APIを利用すれば、Webサイトの検索をはじめ画像やニュースなど多様な情報を取得する機能をアプリケーションに組み込むことができるようになります。今回はVisual Basic 2008 Express Editionを使ってコンソールアプリケーションを作成し、APIの内容を確認します[1]。
Application IDの取得
Live Search APIの利用には、アプリケーションごとにApplication IDを取得する必要があります。下記の手順にて開発者用のサイトへ移動し、Application IDを取得しましょう。取得にはWindows Live IDによる認証が必要です。
- http://search.msn.com/developerにアクセスします[2]。
- 「Create and Manage Application IDs」からIDの管理ページへサインインします。
- 「Get a new AppID」からIDの取得ページへ移動します。
- Application Name欄にIDを使用するアプリケーションの名前を入力します(図1)。名前は後から変更できます。
- 利用規約を確認後、[I Accept]ボタンをクリックし承諾します。
- 管理ページに自動で戻り、IDが登録されたことがわかります。Application IDは16進数の文字列です。
プロジェクトの作成とサービス参照の追加
それでは、アプリケーションの作成に取り掛かります。まず、新規にコンソールアプリケーションのプロジェクトを作成します(図2)。ここではLiveSearchSampleというプロジェクト名にしました。
Live Search APIは、WSDLとSOAPという仕様や規約を使用しています。アプリケーションではこれらを解釈する必要がありますが、Visual Studioを使用するとサービス参照の追加(図3)をするだけで、Webサービスを利用することができます。
- ソリューションエクスプローラからプロジェクト名を右クリックし、「サービスの参照を追加」を選択します。
- アドレス欄にLive Search APIのWSDLの場所(http://soap.search.msn.com/webservices.asmx?wsdl)を入力します[3]。
- 「移動」をクリックします。すると「1個のサービスが見つかりました」と表示されると思います。
- 名前空間欄に参照に使用する名前空間を入力します。ここではServiceReferenceという名前にしました。
- [OK]をクリックします。
以上の操作によりWebサービスを利用するクラスが名前空間ServiceReference以下に作られています。
Webサイトの検索
さっそく、Webサイトを検索するコードを書いてみます。はじめにサービス参照により作られた名前空間をインポートしておきます。
Webサービスに要求する内容を書いていきます。まず、検索対象や取得項目を設定するSourceRequestオブジェクトを生成します。
- Source
- 検索対象を指定します。SourceType.Webの場合Webサイトを検索します。
- Offset、Count
- 取得する結果件数(Count)とその開始位置(Offset)です。Offsetは0、Countは10が規定値になります。Offsetは最大1,000まで、Countは最大50[4]まで指定可能です。
- ResultFields
- 取得する項目を指定します。複数指定する場合はOr演算子を使います。上記ではタイトル・説明・URLを指定しています。
全般的な設定についてSearchRequestオブジェクトを生成します。
- AppID
- 取得したApplication IDを指定します。
- Query
- 検索する文字列を指定します。Live Searchの検索オプションで使用する検索キーワードも指定可能です。
- CultureInfo
- 言語と地域の指定です。日本語・日本の場合は「ja-JP」になります。
- Requests
- SourceRequestオブジェクトの配列を指定します。
以上でWebサービスへのリクエスト内容の作成は完了です。Webサービスを呼び出すクラスのインスタンスを作成し、結果を取得してみます。Searchメソッドを呼び出すことで検索結果が得られます。その戻り値はSearchResponseオブジェクトです。
ResponsesプロパティにSourceResponseオブジェクトが配列として格納されています。今回の場合は結果が1つ格納されていることが予測されるため、Singleメソッドを用いてSourceResponseを取得しています。
結果をコンソールに出力してみましょう。Totalプロパティに検索リクエストに該当する件数の概算値が入っています。For Eachステートメントを使用してResultsプロパティの内容を表示しています。必ずしも、リクエストした件数分取得できる・指定した項目に値が入っているというわけではありませんので注意してください。
実行するとWebサイトの結果が表示されると思います。うまく動いたでしょうか? ここまでのコードをファイルにまとめました。Searchメソッドを呼び出したとき例外がスローされる可能性がありますのでTry Catchステートメントを使って例外処理をしています。
- SampleModule1.vbのダウンロード
- SampleModule1.vbファイル
複数のSourceRequestを指定した検索
Webサイトの検索のときにSearchRequest.Requestsプロパティは配列で指定しました。実はSourceRequest.SourceプロパティのSourceTypeが異なれば1度のリクエストで複数のSourceRequestオブジェクトを指定できます。次は複数のSourceRequestを指定して検索できるように変更を加えてみます。
複数指定できるよう、SourceRequest型の変数はListコレクションに変更します。このListに各SourceRequestオブジェクトを追加していきます。
SourceType.Newsを指定すると、ニュース記事から検索します。最初の1件のタイトルとURLを取得してみます。
Live Search APIでは検索文字列に指定した単語の修正候補を取得することもできます。修正候補があった場合、タイトル項目に格納されて返ってきます。
SearchRequest.Requestsプロパティには、sourceRequestsをToArrayメソッドを使って配列化し指定します。
検索結果は、SearchResponse.Responsesに複数のSourceResponseオブジェクトが格納されて返ってくることが予測されます。各SourceResponseの内容を出力できるように変更します。
以上のコードをファイルにまとめましたので参照してください。
- SampleModule2.vbのダウンロード
- SampleModule2.vbファイル
おわりに
いかがでしたでしょうか。検索リクエストに指定できるオプションは、実際のLive Searchと同様にまだたくさんあります。今回紹介したものは代表的なものでした。より詳細に検索結果を制御したい場合はAPIリファレンスを参照してみてください。
次回もLive Search APIを利用してアプリケーションを開発します。