Rychlý start: Odeslání dotazu do rozhraní API Bingu pro místní obchodní vyhledávání pomocí Javy
Upozornění
30. října 2020 se rozhraní API Vyhledávání Bingu přesunula ze služeb Azure AI na Vyhledávání Bingu Services. Tato dokumentace je k dispozici pouze pro referenci. Aktualizovanou dokumentaci najdete v dokumentaci k rozhraní API Bingu pro vyhledávání. Pokyny k vytváření nových prostředků Azure pro vyhledávání Bingu najdete v tématu Vytvoření prostředku Vyhledávání Bingu prostřednictvím Azure Marketplace.
V tomto rychlém startu se dozvíte, jak odesílat požadavky do rozhraní API Bingu pro místní podnikové vyhledávání, což je služba Azure Cognitive Service. I když je tato jednoduchá aplikace napsaná v Javě, rozhraní API je webová služba RESTful kompatibilní s jakýmkoli programovacím jazykem, který dokáže provádět požadavky HTTP a parsovat JSON.
Tato ukázková aplikace získá data místní odpovědi z rozhraní API pro vyhledávací dotaz.
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma
- Sada Java Development Kit (JDK)
- Jakmile budete mít předplatné Azure, vytvořte prostředek Vyhledávání Bingu v Azure Portal, abyste získali klíč a koncový bod. Po nasazení klikněte na Přejít k prostředku.
Vytvoření požadavku
Následující kód vytvoří WebRequest
, nastaví hlavičku přístupového klíče a přidá řetězec dotazu pro hotel v Bellevue. Potom požadavek odešle a přiřadí odpověď k řetězci obsahujícímu text JSON.
// construct URL of search request (endpoint + query string)
URL url = new URL(host + path + "?q=" + URLEncoder.encode(searchQuery, "UTF-8") + &mkt=en-us");
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKey);
// receive JSON body
InputStream stream = connection.getInputStream();
String response = new Scanner(stream).useDelimiter("\\A").next();
// construct result object for return
SearchResults results = new SearchResults(new HashMap<String, String>(), response);
Spuštění úplné aplikace
Následující kód používá rozhraní API Bingu pro místní obchodní vyhledávání k vrácení výsledků hledání z vyhledávacího webu Bing. Spusťte tento kód podle těchto kroků:
- Stáhněte nebo nainstalujte knihovnu gson.
- Ve svém oblíbeném integrovaném vývojovém prostředí nebo editoru vytvořte nový projekt Javy.
- Přidejte níže uvedený kód.
- Hodnotu
subscriptionKey
nahraďte přístupovým klíčem platným pro vaše předplatné. - Spustíte program.
package localSearch;
import java.net.*;
import java.util.*;
import java.io.*;
import javax.net.ssl.HttpsURLConnection;
/*
* Gson: https://github.com/google/gson
* Maven info:
* groupId: com.google.code.gson
* artifactId: gson
* version: 2.8.1
*
* Once you have compiled or downloaded gson-2.8.1.jar, assuming you have placed it in the
* same folder as this file (localSearch.java), you can compile and run this program at
* the command line as follows.
*
* javac localSearch.java -classpath .;gson-2.8.1.jar -encoding UTF-8
* java -cp .;gson-2.8.1.jar localSearch
*/
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class LocalSearchCls {
// ***********************************************
// *** Update or verify the following values. ***
// **********************************************
// Replace the subscriptionKey string value with your valid subscription key.
static String subscriptionKey = "YOUR-ACCESS-KEY";
static String host = "https://api.cognitive.microsoft.com/bing";
static String path = "/v7.0/localbusinesses/search";
static String searchTerm = "Hotel in Bellevue";
public static SearchResults SearchLocal (String searchQuery) throws Exception {
// construct URL of search request (endpoint + query string)
URL url = new URL(host + path + "?q=" + URLEncoder.encode(searchQuery, "UTF-8") + "&mkt=en-us");
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKey);
// receive JSON body
InputStream stream = connection.getInputStream();
String response = new Scanner(stream).useDelimiter("\\A").next();
// construct result object for return
SearchResults results = new SearchResults(new HashMap<String, String>(), response);
// extract Bing-related HTTP headers
Map<String, List<String>> headers = connection.getHeaderFields();
for (String header : headers.keySet()) {
if (header == null) continue; // may have null key
if (header.startsWith("BingAPIs-") || header.startsWith("X-MSEdge-")) {
results.relevantHeaders.put(header, headers.get(header).get(0));
}
}
stream.close();
return results;
}
// pretty-printer for JSON; uses GSON parser to parse and re-serialize
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);
}
public static void main (String[] args) {
try {
System.out.println("Searching the Web for: " + searchTerm);
SearchResults result = SearchLocal(searchTerm);
System.out.println("\nRelevant HTTP Headers:\n");
for (String header : result.relevantHeaders.keySet())
System.out.println(header + ": " + result.relevantHeaders.get(header));
System.out.println("\nJSON Response:\n");
System.out.println(prettify(result.jsonResponse));
}
catch (Exception e) {
e.printStackTrace(System.out);
System.exit(1);
}
}
}
// Container class for search results encapsulates relevant headers and JSON data
class SearchResults{
HashMap<String, String> relevantHeaders;
String jsonResponse;
SearchResults(HashMap<String, String> headers, String json) {
relevantHeaders = headers;
jsonResponse = json;
}
}