共用方式為


快速入門:使用 C# 將搜尋要求傳送至 Bing 實體搜尋 REST API

警告

在 2020 年 10 月 30 日,Bing 搜尋 API 已從 Azure AI 服務移至 Bing 搜尋 服務。 本文件僅供參考之用。 如需更新的文件,請參閱 Bing 搜尋 API 文件。 如需針對 Bing 搜尋建立新 Azure 資源的指示,請參閱透過 Azure Marketplace 建立 Bing 搜尋資源

使用本快速入門以第一次呼叫 Bing 實體搜尋 API,並檢視 JSON 回應。 這個簡單的 C# 應用程式會將新聞搜尋查詢傳送給 API,並顯示回應。 您可以在 GitHub 上找到此應用程式的原始程式碼。

雖然此應用程式是以 C# 撰寫的,但 API 是一種與大多數程式設計語言都相容的 RESTful Web 服務。

Prerequisites

建立 Azure 資源

藉由建立下列其中一項 Azure 資源,開始使用 Bing 實體搜尋 API。

Bing 實體搜尋資源

  • 您可以透過 Azure 入口網站取得該資源,直到將其刪除為止。
  • 使用免費定價層來試用服務,之後可升級至付費層以用於實際執行環境。
  • Bing 實體搜尋也會在 Bing 搜尋 v7 資源的付費層中提供。

多服務資源

  • 您可以透過 Azure 入口網站取得該資源,直到將其刪除為止。
  • 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。

建立專案並將其初始化

  1. 在 Visual Studio 中建立新的 C# 主控台解決方案。

  2. 新增 Newtonsoft.Json NuGet 套件。

    1. 以滑鼠右鍵按一下 [方案總管] 中的專案。
    2. 選取 [管理 NuGet 套件]。
    3. 搜尋並選取 Newtonsoft.Json,然後安裝此套件。
  3. 然後將下列命名空間新增至主要程式碼檔案:

    using Newtonsoft.Json;
    using System;
    using System.Net.Http;
    using System.Text;
    
  4. 建立新的類別,然後新增 API 端點變數、您的訂用帳戶金鑰和您想要搜尋的查詢。 您可以使用下列程式碼中的全域端點,或使用 Azure 入口網站中針對您的資源所顯示的自訂子網域端點。

    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 回應

  1. 在該類別內建立稱為 Search() 的函式。 在此函式中,建立新的 HttpClient 物件,並將您的訂用帳戶金鑰新增至 Ocp-Apim-Subscription-Key 標頭。

  2. 藉由結合主機和路徑,來建構要求的 URI。 然後新增您的市場,並為查詢進行 URL 編碼。

  3. 等待 client.GetAsync() 取得 HTTP 回應,然後藉由等待 ReadAsStringAsync() 來儲存 JSON 回應。

  4. JsonConvert.DeserializeObject() 格式化 JSON 字串,並將其列印到主控台。

    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);
    }
    
  5. 在應用程式的 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"
      },
      
      . . .
    ]
  }
}

後續步驟