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

警告

Bing Search API は、Cognitive Services から Bing Search Services に移行されます。 2020 年 10 月 30 日以降、Bing Search の新しいインスタンスは、こちらに記載されているプロセスに従ってプロビジョニングする必要があります。 Cognitive Services を使用してプロビジョニングされた Bing Search API は、次の 3 年間、または Enterprise Agreement の終わり (どちらか先に発生した方) までサポートされます。 移行手順については、Bing Search Services に関するページを参照してください。

このクイックスタートでは、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 からご利用いただけます。
  • 複数の Cognitive Services 全体で同じキーとエンドポイントをアプリケーションに使用します。

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

  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 に表示される、対象のリソースのurl エンドポイントを使用することができます。

    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();
    

次のステップ