快速入門:使用 Java 向 Bing 當地商家搜尋 API 傳送查詢
警告
在 2020 年 10 月 30 日,Bing 搜尋 API 已從 Azure AI 服務移至 Bing 搜尋 服務。 本文件僅供參考之用。 如需更新的文件,請參閱 Bing 搜尋 API 文件。 如需針對 Bing 搜尋建立新 Azure 資源的指示,請參閱透過 Azure Marketplace 建立 Bing 搜尋資源。
使用此快速入門了解如何向 Bing 當地企業搜尋 API 傳送要求,該 API 是 Azure 認知服務。 雖然此簡單應用程式是以 Java 撰寫,但 API 是一種與任何程式語言相容的 RESTful Web 服務,可產生 HTTP 要求,並剖析 JSON。
此範例應用程式會從 API 取得搜尋查詢的當地回應資料。
必要條件
- Azure 訂用帳戶 - 建立免費帳戶
- Java 開發套件 (JDK)。
- 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立 Bing 搜尋資源,以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。
建立要求
下列程式碼會建立 WebRequest
、設定存取金鑰標頭,並新增 "hotel in Bellevue" 的查詢字串。 接著,它會傳送要求,並為字串指派包含 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);
執行完整應用程式
下列程式碼會使用 Bing 當地企業搜尋 API,從 Bing 搜尋引擎傳回本地化的搜尋結果。 依照下列步驟執行此程式碼:
- 下載或安裝 gson 程式庫。
- 在您最愛的 IDE 或編輯器中建立新的 Java 專案。
- 新增下方提供的程式碼。
- 以訂用帳戶有效的存取金鑰來取代
subscriptionKey
值。 - 執行程式。
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;
}
}