Schnellstart: Senden einer Suchanforderung an die REST-API der Bing-Entitätssuche mit C#

Warnung

Am 30. Oktober 2020 wurden die Bing Search-APIs von Azure AI-Diensten zu Bing Search Services verschoben. Diese Dokumentation wird nur zur Referenz bereitgestellt. Eine aktualisierte Dokumentation finden Sie in der Dokumentation zu den Bing-Suche-APIs. Anweisungen zum Erstellen neuer Azure-Ressourcen für die Bing-Suche finden Sie unter Erstellen einer Ressource für die Bing-Suche über Azure Marketplace.

Verwenden Sie diese Schnellstartanleitung, um Ihren ersten Aufruf an die Bing Entity Search-API durchzuführen und die JSON-Antwort anzuzeigen. Diese einfache C#-Anwendung sendet eine Nachrichtensuchabfrage an die API und zeigt die Antwort an. Der Quellcode für diese Anwendung ist auf GitHub-verfügbar.

Obwohl diese Anwendung in C# geschrieben ist, ist die API ein RESTful-Webdienst, der mit den meisten Programmiersprachen kompatibel ist.

Voraussetzungen

Erstellen einer Azure-Ressource

Beginnen Sie mit der Verwendung der Bing Entity Search-API, indem Sie eine der folgenden Azure-Ressourcen erstellen.

Bing-Entity-Search-Ressource

  • Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.
  • Verwenden Sie das kostenlose Preisniveau, um den Dienst auszuprobieren und später auf eine kostenpflichtige Stufe für die Produktion zu aktualisieren.
  • Die Bing-Entitätssuche wird auch in kostenpflichtigen Ebenen der Bing Search v7-Ressourceangeboten.

Mehrdienstressource

  • Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.
  • Verwenden Sie denselben Schlüssel und Endpunkt für Ihre Anwendungen in mehreren Azure AI-Diensten.

Erstellen und Initialisieren eines Projekts

  1. Erstellen Sie eine neue C#-Konsolenlösung in Visual Studio.

  2. Fügen Sie das Newtonsoft.Json NuGet-Paket hinzu.

    1. Klicken Sie im Projektmappen-Explorermit der rechten Maustaste auf Ihr Projekt.
    2. Wählen Sie NuGet-Pakete verwalten aus.
    3. Suchen Sie nach Newtonsoft.Json, und wählen Sie es aus, und installieren Sie dann das Paket.
  3. Fügen Sie dann die folgenden Namespaces in die Hauptcodedatei ein:

    using Newtonsoft.Json;
    using System;
    using System.Net.Http;
    using System.Text;
    
  4. Erstellen Sie eine neue Klasse, und fügen Sie Variablen für den API-Endpunkt, Ihren Abonnementschlüssel und die Abfrage hinzu, die Sie durchsuchen möchten. Sie können den globalen Endpunkt im folgenden Code verwenden oder den benutzerdefinierten Unterdomänen- Endpunkt verwenden, der im Azure-Portal für Ihre Ressource angezeigt wird.

    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";
        //...
        }
    }
    

Senden einer Anforderung und Abrufen der API-Antwort

  1. Erstellen Sie innerhalb der Klasse eine Funktion namens Search(). Erstellen Sie in dieser Funktion ein neues HttpClient Objekt, und fügen Sie dem Header Ihren Ocp-Apim-Subscription-Key Abonnementschlüssel hinzu.

  2. Erstellen Sie den URI für Ihre Anforderung, indem Sie den Host und den Pfad kombinieren. Fügen Sie dann Ihren Markt hinzu und kodieren Sie Ihre Abfrage im URL-Format.

  3. Warten Sie client.GetAsync() , um eine HTTP-Antwort zu erhalten, und speichern Sie dann die JSON-Antwort, indem Sie darauf warten ReadAsStringAsync().

  4. Formatieren Sie die JSON-Zeichenfolge mit JsonConvert.DeserializeObject() , und drucken Sie sie in der Konsole.

    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. Rufen Sie in der Main() Methode Der Anwendung die Search() Funktion auf.

    static void Main(string[] args)
    {
        Search();
        Console.ReadLine();
    }
    

Beispiel für JSON-Antwort

Eine erfolgreiche Antwort wird in JSON zurückgegeben, wie im folgenden Beispiel gezeigt:

{
  "_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"
      },
      
      . . .
    ]
  }
}

Nächste Schritte