クイック スタート:C# を使用して Bing Entity Search REST API に検索要求を送信する
警告
2020 年 10 月 30 日に、Bing Search API は Azure AI サービスから Bing Search サービスに移行されました。 このドキュメントは、参考用としてのみ提供されています。 更新されたドキュメントについては、Bing search API のドキュメントを参照してください。 Bing 検索用の新しい Azure リソースを作成する手順については、「Azure Marketplace から Bing Search リソースを作成する」を参照してください。
このクイック スタートを使用すると、Bing Entity Search API への最初の呼び出しを行い、JSON 応答を表示することができます。 このシンプルな C# アプリケーションは、新しい検索クエリを API に送信してその応答を表示します。 このアプリケーションのソース コードは、GitHub で入手できます。
このアプリケーションは C# で記述されていますが、この API はほとんどのプログラミング言語と互換性のある RESTful Web サービスです。
前提条件
- Visual Studio 2017 またはそれ以降の任意のエディション。
- あるいは、Linux または MacOS を使用している場合は、Visual Studio Code および .NET Core を使用して、このクイックスタートに従うことができます
- 無料の Azure アカウント
Azure リソースを作成する
次のいずれかの Azure リソースを作成して、Bing Entity Search API の使用を開始します。
Bing Entity Search のリソース
- ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
- Free 価格レベルを使ってサービスを試用し、後から運用環境用の有料レベルにアップグレードします。
- Bing Entity Search は、Bing Search v7 リソースの有料レベルでも提供されています。
マルチサービス リソース
- ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
- 複数の Azure AI サービス全体で同じキーとエンドポイントをアプリケーションに使用します。
プロジェクトの作成と初期化
Visual Studio で、新しい C# コンソール ソリューションを作成します。
Newtonsoft.Json NuGet パッケージを追加します。
- ソリューション エクスプローラーでプロジェクトを右クリックします。
- [NuGet パッケージの管理] を選択します。
- Newtonsoft.json を探して選択し、パッケージをインストールします。
次に、メイン コード ファイルに次の名前空間を追加します。
using Newtonsoft.Json; using System; using System.Net.Http; using System.Text;
新しいクラスを作成し、API エンドポイント、サブスクリプション キー、検索するクエリのための変数を追加します。 次のコードのグローバル エンドポイントを使用するか、Azure portal に表示される、対象のリソースのカスタム サブドメイン エンドポイントを使用することができます。
namespace EntitySearchSample { class Program { static string host = "https://api.bing.microsoft.com"; static string path = "/v7.0/search"; static string market = "en-US"; // NOTE: Replace this example key with a valid subscription key. static string key = "ENTER YOUR KEY HERE"; static string query = "italian restaurant near me"; //... } }
要求を送信して API の応答を取得する
クラス内に、
Search()
という関数を作成します。 この関数内で、新しいHttpClient
オブジェクトを作成し、Ocp-Apim-Subscription-Key
ヘッダーにサブスクリプション キーを追加します。ホストとパスを組み合わせることで、要求の URI を作成します。 その後、市場を追加し、クエリを URL でエンコードします。
client.GetAsync()
で HTTP 応答が取得されるまで待った後、ReadAsStringAsync()
を待機することで JSON 応答を格納します。JSON 文字列を
JsonConvert.DeserializeObject()
で書式設定し、コンソールに出力します。async static void Search() { //... HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); string uri = host + path + "?mkt=" + market + "&q=" + System.Net.WebUtility.UrlEncode(query); HttpResponseMessage response = await client.GetAsync(uri); string contentString = await response.Content.ReadAsStringAsync(); dynamic parsedJson = JsonConvert.DeserializeObject(contentString); Console.WriteLine(parsedJson); }
アプリケーションの
Main()
メソッドで、Search()
関数を呼び出します。static void Main(string[] args) { Search(); Console.ReadLine(); }
JSON の応答例
成功した応答は、次の例に示すように JSON で返されます。
{
"_type": "SearchResponse",
"queryContext": {
"originalQuery": "italian restaurant near me",
"askUserForLocation": true
},
"places": {
"value": [
{
"_type": "LocalBusiness",
"webSearchUrl": "https://www.bing.com/search?q=sinful+bakery&filters=local...",
"name": "Liberty's Delightful Sinful Bakery & Cafe",
"url": "https://www.contoso.com/",
"entityPresentationInfo": {
"entityScenario": "ListItem",
"entityTypeHints": [
"Place",
"LocalBusiness"
]
},
"address": {
"addressLocality": "Seattle",
"addressRegion": "WA",
"postalCode": "98112",
"addressCountry": "US",
"neighborhood": "Madison Park"
},
"telephone": "(800) 555-1212"
},
. . .
{
"_type": "Restaurant",
"webSearchUrl": "https://www.bing.com/search?q=Pickles+and+Preserves...",
"name": "Munson's Pickles and Preserves Farm",
"url": "https://www.princi.com/",
"entityPresentationInfo": {
"entityScenario": "ListItem",
"entityTypeHints": [
"Place",
"LocalBusiness",
"Restaurant"
]
},
"address": {
"addressLocality": "Seattle",
"addressRegion": "WA",
"postalCode": "98101",
"addressCountry": "US",
"neighborhood": "Capitol Hill"
},
"telephone": "(800) 555-1212"
},
. . .
]
}
}