Bing Search APIを用いて動画検索を行うには

Bing Search APIのプライマリーアカウントキーの取得

Bing Search APIを使用するには$0.00のサブスクリプションを購入し(無料です)、プライマリーアカウントキーを取得する必要があります。

プライマリーアカウントキーの取得方法は
Bing Search APIでWeb検索の記事
を参照してください。

動画検索を行う

動画検索を行うにはWeb検索と同様にQueryに検索ワードを、marketやフォーマットを指定します。
今回はjsonで行います。

動画検索にはVideoFiltersクエリにフィルタ文字列をつけます。
VideoFiltersのフィルタ文字一覧はこちらになります。

string searchWord = "コーヒー";//検索ワード
string market = "ja-JP";//検索をかける言語コード
string adult = "Off";   //エロコンテンツフィルタをかけるかどうかOff,Moderate,Strictの3種類
int top = 50; //トップ何個の検索結果を返すか(デフォルト50)
string format = "json"; //atom(xml)かjsonか

//イメージフィルター
string videoFilter = "Duration:Medium";

次に、検索ワードの文字列エンコードを行います。

//文字列エンコード
searchWord = Uri.EscapeDataString(searchWord);

そして、取得したプライマリーアカウントキーをNetworkCredentialのusernameとpasswordのどちらにも同じ値を入れて、HttpClientを作り、Getリクエストを送ります。

HttpClientHandler handler = new HttpClientHandler();
//認証情報を追加
handler.Credentials = new NetworkCredential("kEO5MTTzRJwAjTfMUtfBUd0gO5E1oh0GpF8Re2IRjuk=", "kEO5MTTzRJwAjTfMUtfBUd0gO5E1oh0GpF8Re2IRjuk=");

HttpClient client = new HttpClient(handler);
//Getリクエスト
var resultStr=await client.GetStringAsync("https://api.datamarket.azure.com/Bing/Search/Video"
    + "?Query=" + "'" + searchWord + "'" + "&Market=" + "'" + market + "'" + "&Adult=" + "'" + adult + "'" + "&$top=" + top + "&$format=" + format + "&VideoFilters='"+videoFilter+"'");

ダウンロードした文字列をデコードします。

//文字列デコード
resultStr = Uri.UnescapeDataString(resultStr);

ここまでで動画検索結果をJsonで取得することができました。

Json.Netで変換する

ダウンロードしたJson文字列をデシリアライズ(Json→C#のクラスに変換)するために、Json.Netというライブラリを使います。
Nugetで「Json.Net」と検索してインストールしてください。

次に、ダウンロードしたJsonと対応するC#クラスを作成します。

public class Metadata
{
    public string uri { get; set; }
    public string type { get; set; }
}

public class TumbnailMetadata
{
    public string type { get; set; }
}

public class Thumbnail
{
    public TumbnailMetadata __metadata { get; set; }
    public string MediaUrl { get; set; }
    public string ContentType { get; set; }
    public string Width { get; set; }
    public string Height { get; set; }
    public string FileSize { get; set; }
}

public class Result
{
    public Metadata __metadata { get; set; }
    public string ID { get; set; }
    public string Title { get; set; }
    public string MediaUrl { get; set; }
    public string DisplayUrl { get; set; }
    public string RunTime { get; set; }
    public Thumbnail Thumbnail { get; set; }
}

public class D
{
    public List<Result> results { get; set; }
    public string __next { get; set; }
}

public class VideoSearchObject
{
    public D d { get; set; }
}

クラスを作成できたら、Jsonデシリアライズを行います。

 //Jsonシリアライズ
 var contens= JsonConvert.DeserializeObject<VideoSearchObject>(resultStr);

これでC#のクラスから動画検索結果を扱えるようになりました。

次はListViewに表示してみます。
このようなListViewを作りましょう。

<ListView x:Name="listView" HorizontalAlignment="Left" Height="487" Margin="661,143,0,0" VerticalAlignment="Top" Width="458">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <HyperlinkButton Content="{Binding Title}" NavigateUri="{Binding MediaUrl}" FontSize="28" />
                
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

そして、ListViewのItemsSourceにデシリアライズしたJsonを入れます。

//ListViewのItemsSourceとする
listView.ItemsSource = contens.d.results;

15

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.