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

第3回 Tafiti Search Visualization

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

Tafiti内のLive Search APIを利用したコード

Live Search APIを利用しているTafiti内のコードを見てみましょう。コードはSearch.aspx.cs内にあり,その中のSoapSearchメソッドを見るとAPIを呼び出す一連のコードがあることがわかります。これまで触れていませんでしたが本連載ではLive Search APIサービスのオブジェクトはWCF※5に基づいたクラス(MSNSearchPortTypeClient)がVisual Studioにより生成されていました。TafitiのコードはVisual Studio 2008以前で自動生成されたMSNSearchServiceクラスを使用しています。そのため発生する例外やCloseメソッドを呼ぶ必要がないなどの点が異なっています。

さて,画像検索部分について紹介したのでTafitiの画像検索の部分を少し変更してみたいと思います。TafitiのコードではConvertImageResultsメソッドがSourceResponseオブジェクトを引数で受け取り,Tafiti用の結果を作成しています。ここでサムネイルの値を利用しているのがわかります。Live Searchでは検索クエリに「imagesize:DIM_H_1024」のようなキーワードを指定すると画像の幅によって検索対象を絞るということができます。これを用いて検索クエリに「imagesize」が含まれている場合はサムネイル画像を使用せず,元の画像を表示するように変えてみましょう。

検索クエリを知るためにprivate変数_queryを追加してSoapSearchメソッドが呼ばれたときに記憶しておきます。

private string _query;

private void SoapSearch(SourceType sourceType, string query, int first, int count, string domain)
{
    _query = query;
    (略)
}

ConvertImageResultsメソッド内の処理を変更します。forループ内の処理を次のようにしました。_queryに「imagesize」が含まれる場合,フルサイズの画像の幅を使用しています。ただし,500ピクセルを超える横幅のときは幅を制限しています。

Result sourceResult = sourceResponse.Results[i];
LiveXmlResult result = new LiveXmlResult();
if (sourceResult.Image != null)
{
    if (_query.IndexOf("imagesize") >= 0)
    {
        int w = sourceResult.Image.ImageWidthSpecified ? sourceResult.Image.ImageWidth : 100;
        int h = sourceResult.Image.ImageHeightSpecified ? sourceResult.Image.ImageHeight : 100;
        if (w > 500)
        {
            h = (int)(h * (500.0 / w));
            w = 500;
        }
        result.width = w.ToString();
        result.height = h.ToString();
        result.imageUrl = sourceResult.Image.ImageURL;
    }
    else
    {
        result.width = sourceResult.Image.ThumbnailWidthSpecified ? sourceResult.Image.ThumbnailWidth.ToString() : "100";
        result.height = sourceResult.Image.ThumbnailHeightSpecified ? sourceResult.Image.ThumbnailHeight.ToString() : "100";
        result.imageUrl = sourceResult.Image.ThumbnailURL;
    }
}
result.domain = domain;
result.url = sourceResult.Url;
results[i] = result;

図6が実行した結果です。いかがでしたでしょうか。ほかにもいろいろと変更してみてください。

また,今回はドメインをlocalhostとして動かしましたが,すべての機能を試すにはLiveサービスのドメインからの通信も受け取れるようにドメインを設定する必要があります。

図6 実行結果

図6 実行結果

おわりに

今回でLive Search APIに関する内容はひとまず終わりです。Live Search APIはSOAPとWSDLを用いたAPIでしたが,今後はRESTfulなAPIも控えているようですので,今後もまた取り上げることもありかもしれません。最後にLive Search Interactive SDKを紹介しておきます。Live Search APIの動作をWebサイト上で確認できリファレンスも参照できるページです。C#とSOAPのコードも参照でき,開発する際は役立つと思います。

※5

WCF: Windows Communication Foundation。サービス参照の追加により作成されるクラスはSystem.ServiceModel.ClientBase(Of TChannel)を継承しています。

著者プロフィール

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

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

URL:http://katamari.jp