使ってみよう! Windows Live SDK/API

第2回 Live Search API+VSTO

この記事を読むのに必要な時間:およそ 3 分

前回に引き続いてLive Search APIについてです。今回はAPIを利用したアプリケーションを考えてみたいと思います。

Live Search APIを利用したアプリケーション

Windows Live Favoritesのアドインをインストールすると,Internet Explore上でテキストを選択した状態で右クリックした場合,コンテキストメニューに図1のようにLive Searchへのメニューアイテムが出ます。このようなメニューを発展させて右クリックした時点で検索結果が表示されるのはどうでしょうか。

残念ながらInternet Exploreでそれを実現するのは難しいので,VSTO(Visual Studio Tools for Office)を使ってMicrosoft Office Wordのコンテキストメニューに検索結果を表示させてみます。開発はVisual Studio 2008 Professional Editionを使い,言語にVisual Basicを選択します。

図1 Live Searchへのリンクが表示されたコンテキストメニュー

図1 Live Searchへのリンクが表示されたコンテキストメニュー

Wordテンプレートの作成

Word 2007テンプレートとして開発することにします。新しいプロジェクトウィンドウからWord 2007テンプレートを選択し,プロジェクトを作成します図2)。ここではプロジェクト名をLiveSearchWordTemplateにしました。

図2 新しいプロジェクト

図2 新しいプロジェクト

[OK]ボタンをクリックすると図3のようなウィンドウが表示されますが,特に変更する項目はありませんのでそのまま[OK]ボタンをクリックします。

図3 Visual Studio Tools for Office プロジェクトウィザード

図3 Visual Studio Tools for Office プロジェクトウィザード

プロジェクトにあるファイルThisDocument.vbにThisDocumentクラスが記述されています。この中にコードを記述していきます。

メソッドの作成と検索オプションの指定

まずはWebサイト検索部分から作成します。本連載1回目を参考にサービス参照の追加まで行ってください。名前空間のインポートも済ませます。

Imports LiveSearchWordTemplate.ServiceReference

検索一連の処理をするメソッドを作ります。引数が検索文字列,戻り値が検索結果として,メソッド名はSearchにしました。

Private Function Search(ByVal query As String) As Result()
End Function

このメソッドの中にSourceRequestオブジェクトを生成するコードを記述します。Webサイトから上位3件のタイトルとURLを取得するように指定しています。

Dim sourceRequest = New SourceRequest With { _
    .Source = SourceType.Web, _
    .Offset = 0, _
    .Count = 3, _
    .ResultFields = ResultFieldMask.Title Or _
                    ResultFieldMask.Url}

続いてSearchRequestオブジェクトを生成します。Queryプロパティにはメソッドの引数を指定します。

Dim searchRequest = New SearchRequest With { _
    .AppID = "取得したApplication ID", _
    .Query = query, _
    .CultureInfo = "ja-JP", _
    .Requests = New SourceRequest() {sourceRequest}, _
    .Flags = SearchFlags.None, _
    .SafeSearch = SafeSearchOptions. Strict}

前回に登場しなかったプロパティについて新たな2項目を説明します。

Flags

雑多な検索オプションを指定します。

DisableHostCollapsing

同じドメインのURLの結果は通常2つまでしか返ってきませんが,その制限を無効にします。

MarkQueryWords

結果のタイトルと説明に検索した単語が含まれている場合,単語の前後に特定のUTF-8文字が付加されます。主に検索単語の強調に使用することが多いと思います。次のコードでは単語の前後に<b>と</b>を挿入しています。

System.Text.RegularExpressions.Regex.Replace(result.Title, "\ue000(.+?)\ue001", "<b>$1</b>")
None

何も指定しません。これが規定値になります。

このほかにもFlagsプロパティには指定できる項目が用意されています。複数のオプションを指定する場合はOr演算子を使います。

SafeSearch

検索結果の制限レベルを指定します。

Strict

成人向けのテキストまたは画像が含まれる結果は除かれます。

Moderate

成人向けの画像が含まれる結果は除かれます。これが規定値になります。

Off

検索結果の制限を行いません。

最後にMSNSearchPortTypeClientオブジェクトのSearchメソッドを呼び出し,Resultオブジェクトを返します。

Dim service = New MSNSearchPortTypeClient
Dim searchResponse = service.Search(searchRequest)
service.Close()
Return searchResponse.Responses.Single.Results

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp

コメント

コメントの記入