Webサービスの参照
アプリケーションIDを取得したら、次はLive Search Webサービスを利用できるようにアプリケーションを構成します。Visual Studioで、http://soap.search.msn.com/webservices.asmx?wsdl
のWSDLへのWeb参照を追加します。図4は[Web参照の追加]ダイアログボックスでLive Search Webサービスを追加している様子です。利用するWebサービスが見つかったら、サービス名を指定し、[参照の追加]ボタンをクリックします。本記事のサンプルコードでは「LiveSearch」というサービス名を使用します。
基本検索の実行
Live Search Webサービスへの参照を追加したら、検索を実行するSearch
メソッドを利用できます。次のコードは基本検索の実行例です。
MSNSearchService serv = new MSNSearchService(); SearchRequest sRequest = new SearchRequest(); SourceRequest[] sr = new SourceRequest[1]; sr[0] = new LiveSearch.SourceRequest(); sr[0].Source = LiveSearch.SourceType.Web; sr[0].ResultFields = ResultFieldMask.All; sRequest.Query = "Live Search Articles"; sRequest.Flags = SearchFlags.None; sRequest.Requests = sr; // Replace with your own Application ID sRequest.AppID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; sRequest.CultureInfo = "en-US"; SearchResponse resp = serv.Search(sRequest);
このコードを利用するときには、アプリケーションIDを実際の値に置き換える必要があります。
この基本検索では、「Live Search Articles」という検索語に適合するページをインターネット全体から検索し、すべての結果フィールドを返します。得られる結果は図5のとおりです。
検索結果はSourceResponseオブジェクトで返り、その中に結果の配列が格納されています。検索の種類や要求したフィールドによっては、結果にさまざまなフィールドが含まれていることがあります。無用な例外を防ぐために、各フィールドがnullでないかどうかをチェックしてから使用するのがよいでしょう。
SearchResponse resp = serv.Search(sRequest); foreach (Result r in resp.Responses[0].Results) { string title, description, url; title = (!String.IsNullOrEmpty(r.Title)) ? r.Title : ""; description = (!String.IsNullOrEmpty(r.Description)) ? r.Description : ""; url = (!String.IsNullOrEmpty(r.Url)) ? r.Url : ""; }
取得するフィールドはResultFieldMaskでカスタマイズできます。たとえば、Title
、Description
、およびDisplayUrl
の各フィールドのみを表示するには、次のようなコードを使用します。
SourceRequest[] sr = new SourceRequest[1]; sr[0].ResultFields = ResultFieldMask.Description | ResultFieldMask.DisplayUrl | ResultFieldMask.Title;
検索結果は図6のように変わります。
検索対象サイトの絞り込み
ここまでのサンプルは、インターネット全体を対象とした検索でしたが、特定のサイトのみを検索対象とするように限定することも可能です。次のコードは、http://www.soulsolutions.com.au
というサイトのみを対象として、「Virtual Earth」についての検索結果を取得します。
SearchRequest sRequest = new SearchRequest(); sRequest.Query = "Virtual Earth site:www.soulsolutions.com.au";
結果は図7のとおりです。