クイック スタート:C# を使用して Bing Custom Search エンドポイントを呼び出す

警告

2020 年 10 月 30 日に、Bing Search API は Azure AI サービスから Bing Search サービスに移行されました。 このドキュメントは、参考用としてのみ提供されています。 更新されたドキュメントについては、Bing search API のドキュメントを参照してください。 Bing 検索用の新しい Azure リソースを作成する手順については、「Azure Marketplace から Bing Search リソースを作成する」を参照してください。

このクイックスタートでは、Bing Custom Search インスタンスに検索結果を要求する方法を学習します。 このアプリケーションは C# で記述されていますが、Bing Custom Search API はほとんどのプログラミング言語と互換性のある RESTful Web サービスです。 このサンプルのソース コードは、GitHub で入手できます。

前提条件

  • Bing Custom Search インスタンス。 詳細については、「クイック スタート: 最初の Bing Custom Search インスタンスの作成」を参照してください。

  • Microsoft .NET Core

  • Visual Studio 2019 以降の任意のエディション。

  • Linux/macOS を使用している場合、このアプリケーションは Mono を使用して実行できます。

  • Bing Custom Search の NuGet パッケージ

    Visual Studio にこのパッケージをインストールするには:

    1. ソリューション エクスプローラーで目的のプロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。
    2. Microsoft.Azure.CognitiveServices.Search.CustomSearch を検索して選択し、このパッケージをインストールします。

    Bing Custom Search NuGet パッケージをインストールすると、次のパッケージも Visual Studio によってインストールされます。

    • Microsoft.Rest.ClientRuntime
    • Microsoft.Rest.ClientRuntime.Azure
    • Newtonsoft.Json

Azure リソースを作成する

次のいずれかの Azure リソースを作成して、Bing Custom Search API の使用を開始します。

Bing Custom Search リソース

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
  • Free 価格レベルを使ってサービスを試用し、後から運用環境用の有料レベルにアップグレードします。

マルチサービス リソース

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
  • 複数の Azure AI サービス全体で同じキーとエンドポイントをアプリケーションに使用します。

アプリケーションを作成して初期化する

  1. Visual Studio で、新しい C# コンソール アプリケーションを作成します。 次に、次のパッケージを目的のプロジェクトに追加します。

    using System;
    using System.Net.Http;
    using System.Web;
    using Newtonsoft.Json;
    
  2. Bing Custom Search API から返された検索結果を格納する次のクラスを作成します。

    public class BingCustomSearchResponse {        
        public string _type{ get; set; }            
        public WebPages webPages { get; set; }
    }
    
    public class WebPages {
        public string webSearchUrl { get; set; }
        public int totalEstimatedMatches { get; set; }
        public WebPage[] value { get; set; }        
    }
    
    public class WebPage {
        public string name { get; set; }
        public string url { get; set; }
        public string displayUrl { get; set; }
        public string snippet { get; set; }
        public DateTime dateLastCrawled { get; set; }
        public string cachedPageUrl { get; set; }
    }
    
  3. プロジェクトのメイン メソッドで、Bing Custom Search API のサブスクリプション キー、検索インスタンスのカスタム構成 ID、検索語句に使用する次の各変数を作成します。

    var subscriptionKey = "YOUR-SUBSCRIPTION-KEY";
    var customConfigId = "YOUR-CUSTOM-CONFIG-ID";
    var searchTerm = args.Length > 0 ? args[0]:"microsoft";
    
  4. 検索語句を q= クエリ パラメーターに追加し、検索インスタンスのカスタム構成 ID を customconfig= パラメーターに追加して、要求 URL を作成します。 パラメーターの区切りには、アンパサンド (&) を使用します。 url 変数値には、次のコードのグローバル エンドポイントを使用するか、Azure portal に表示される、対象のリソースのカスタム サブドメイン エンドポイントを使用することができます。

    var url = "https://api.cognitive.microsoft.com/bingcustomsearch/v7.0/search?" +
                "q=" + searchTerm + "&" +
                "customconfig=" + customConfigId;
    

検索要求の送信と受信

  1. 要求のクライアントを作成し、Ocp-Apim-Subscription-Key ヘッダーにサブスクリプション キーを追加します。

    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
    
  2. 検索要求を実行し、応答を JSON オブジェクトとして取得します。

    var httpResponseMessage = client.GetAsync(url).Result;
    var responseContent = httpResponseMessage.Content.ReadAsStringAsync().Result;
    BingCustomSearchResponse response = JsonConvert.DeserializeObject<BingCustomSearchResponse>(responseContent);
    

結果の処理と表示

  • 応答オブジェクトを反復処理して、それぞれの検索結果についての情報 (名前、URL、Web ページが最後にクロールされた日付など) を表示します。

    for(int i = 0; i < response.webPages.value.Length; i++) {                
        var webPage = response.webPages.value[i];
    
        Console.WriteLine("name: " + webPage.name);
        Console.WriteLine("url: " + webPage.url);                
        Console.WriteLine("displayUrl: " + webPage.displayUrl);
        Console.WriteLine("snippet: " + webPage.snippet);
        Console.WriteLine("dateLastCrawled: " + webPage.dateLastCrawled);
        Console.WriteLine();
    }
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
    

次のステップ