Schnellstart: Senden einer Suchanforderung an die Bing-Entitätssuche-REST-API mithilfe von Java

Warnung

Am 30. Oktober 2020 wurden die Bing-Suche-APIs aus den Azure KI Services in die Bing-Suchdienste verschoben. Diese Dokumentation wird nur zu Referenzzwecken 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 die Bing-Entitätssuche-API zum ersten Mal aufzurufen und die JSON-Antwort anzuzeigen. Diese einfache Java-Anwendung sendet eine Nachrichtensuchabfrage an die API und zeigt die Antwort an.

Die Anwendung ist zwar in Java geschrieben, an sich ist die API aber ein RESTful-Webdienst und mit den meisten Programmiersprachen kompatibel.

Voraussetzungen

Erstellen einer Azure-Ressource

Beginnen Sie mit der Verwendung der Bing-Entitätssuche-API, indem Sie eine der folgenden Azure-Ressourcen erstellen.

Ressource für die Bing-Entitätssuche

  • Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.
  • Verwenden Sie den Tarif „Free“, um den Dienst zu testen, und führen Sie später für die Produktion ein Upgrade auf einen kostenpflichtigen Tarif durch.
  • Die Bing-Entitätssuche wird auch in kostenpflichtigen Tarifen der Bing-Suche v7-Ressource angeboten.

Ressource für mehrere Dienste

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

Erstellen und Initialisieren eines Projekts

  1. Erstellen Sie in Ihrer bevorzugten IDE oder in Ihrem bevorzugten Editor ein neues Java-Projekt, und importieren Sie die folgenden Bibliotheken:

    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.net.ssl.HttpsURLConnection;
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    
  2. Erstellen Sie in einer neuen Klasse Variablen für den API-Endpunkt, Ihren Abonnementschlüssel und eine Suchabfrage. Sie können den globalen Endpunkt im folgenden Code oder den Endpunkt der benutzerdefinierten Unterdomäne verwenden, der im Azure-Portal für Ihre Ressource angezeigt wird.

    public class EntitySearch {
    
       static String subscriptionKey = "ENTER KEY HERE";
    
       static String host = "https://api.bing.microsoft.com";
       static String path = "/v7.0/search";
    
       static String mkt = "en-US";
       static String query = "italian restaurant near me";
    //...
    
    

Erstellen einer Zeichenfolge für die Suchanforderung

  1. Erstellen Sie eine Funktion namens search(), die eine JSON-String zurückgibt. Führen Sie eine URL-Codierung für Ihre Suchabfrage aus, und fügen Sie sie mit &q= einer Parameterzeichenfolge hinzu. Fügen Sie der Parameterzeichenfolge mit ?mkt= Ihren Markt hinzu.

  2. Erstellen Sie ein URL-Objekt mit Ihrem Host, Pfad und Parameterzeichenfolgen.

    //...
    public static String search () throws Exception {
        String encoded_query = URLEncoder.encode (query, "UTF-8");
        String params = "?mkt=" + mkt + "&q=" + encoded_query;
        URL url = new URL (host + path + params);
    //...
    

Senden einer Suchanforderung und Erhalten einer Antwort

  1. In der oben erstellten Funktion search() erstellen Sie mit url.openCOnnection() ein neues HttpsURLConnection-Objekt. Legen Sie die Anforderungsmethode auf GET, und fügen Sie Ihren Abonnementschlüssel dem Header Ocp-Apim-Subscription-Key hinzu.

    //...
    HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKey);
    connection.setDoOutput(true);
    //...
    
  2. Erstellen Sie ein neues StringBuilder-Element. Verwenden Sie bei der Instanziierung von BufferedReader ein neues InputStreamReader-Element als Parameter, um die API-Antwort zu lesen.

    //...
    StringBuilder response = new StringBuilder ();
    BufferedReader in = new BufferedReader(
        new InputStreamReader(connection.getInputStream()));
    //...
    
  3. Erstellen Sie ein String-Objekt zum Speichern der Antwort von BufferedReader. Durchlaufen Sie es, und fügen Sie die einzelnen Zeilen an die Zeichenfolge an. Schließen Sie dann den Leser, und geben Sie die Antwort zurück.

    String line;
    
    while ((line = in.readLine()) != null) {
      response.append(line);
    }
    in.close();
    
    return response.toString();
    

Formatieren der JSON-Antwort

  1. Erstellen Sie eine neue Funktion namens prettify, um die JSON-Antwort zu formatieren. Erstellen Sie ein neues JsonParser-Element, rufen Sie parse() für den JSON-Text auf, und speichern Sie es als JSON-Objekt.

  2. Erstellen Sie mithilfe der Gson-Bibliothek ein neues GsonBuilder()-Element, verwenden Sie setPrettyPrinting().create() zum Formatieren des JSON-Objekts, und geben Sie es dann zurück.

    //...
    public static String prettify (String json_text) {
     JsonParser parser = new JsonParser();
     JsonObject json = parser.parse(json_text).getAsJsonObject();
     Gson gson = new GsonBuilder().setPrettyPrinting().create();
     return gson.toJson(json);
    }
    //...
    

Aufrufen der Suchfunktion

  • Rufen Sie in der Main-Methode Ihres Projekts search() auf, und verwenden Sie prettify() zum Formatieren des Texts.

      public static void main(String[] args) {
        try {
          String response = search ();
          System.out.println (prettify (response));
        }
        catch (Exception e) {
          System.out.println (e);
        }
      }
    

JSON-Beispielantwort

Es wird eine erfolgreiche Antwort im JSON-Format 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