Quickstart: Suggest search strings with Bing Autosuggest REST API and Java
Follow this quickstart to learn how to make calls to Bing Autosuggest API and read the JSON response. This simple Java application sends a partial search query to the API and returns suggestions for searches. While this application is written in Java, the API is a RESTful Web service compatible with most programming languages. The source code for this sample is available on GitHub.
Prerequisites
Create and initialize a project
Create a new Java project in your favorite IDE or editor, and import the following libraries.
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;
Create variables for your subscription key, the API host and path, your market code, and a search query.
static String subscriptionKey = "enter key here"; static String host = "https://api.bing.microsoft.com"; static String path = "/v7.0/Suggestions"; static String mkt = "en-US"; static String query = "sail";
Format the response
Create a method named prettify()
to format the response returned from the Bing Video API. Use the Gson library's JsonParser
to take in a JSON string and convert it into an object. Then, use GsonBuilder()
and toJson()
to create the formatted string.
// 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);
}
Construct and send the search request
Create a new method named
get_suggestions()
and perform the following steps:Construct the URL for your request by combining your API host, path, and encoding for your search query. Be sure to url-encode the query before appending it. Create a parameters string for your query by appending the market code to the
mkt=
parameter, and your query to theq=
parameter.public static String get_suggestions () throws Exception { String encoded_query = URLEncoder.encode (query, "UTF-8"); String params = "?mkt=" + mkt + "&q=" + encoded_query; //... }
Create a new URL for the request with the API host, path, and parameters that you created in the previous step.
//... URL url = new URL (host + path + params); //...
Create an
HttpsURLConnection
object, and useopenConnection()
to create a connection. Set the request method toGET
, and add your subscription key to theOcp-Apim-Subscription-Key
header.//... HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKey); connection.setDoOutput(true); //...
Store the API response in
StringBuilder
. After the response has been captured, close theInputStreamReader
stream, and return the response.//... StringBuilder response = new StringBuilder (); BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { response.append(line); } in.close(); return response.toString();
In the main function of your application, call
get_suggestions()
, and print the response by usingprettify()
.public static void main(String[] args) { try { String response = get_suggestions (); System.out.println (prettify (response)); } catch (Exception e) { System.out.println (e); } }
Example JSON response
A successful response is returned in JSON, as shown in the following example:
{
"_type": "Suggestions",
"queryContext": {
"originalQuery": "sail"
},
"suggestionGroups": [
{
"name": "Web",
"searchSuggestions": [
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003dgvtP9TS9NwhajSapY2Se6y1eCbP2fq_GiP2n-cxi6OY\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailrite%26FORM%3dUSBAPI\u0026p\u003dDevEx,5003.1",
"displayText": "sailrite",
"query": "sailrite",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003dBTS0G6AakxntIl9rmbDXtk1n6rQpsZZ99aQ7ClE7dTY\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsail%2bsand%2bpoint%26FORM%3dUSBAPI\u0026p\u003dDevEx,5004.1",
"displayText": "sail sand point",
"query": "sail sand point",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003dc0QOA_j6swCZJy9FxqOwke2KslJE7ZRmMooGClAuCpY\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailboats%2bfor%2bsale%26FORM%3dUSBAPI\u0026p\u003dDevEx,5005.1",
"displayText": "sailboats for sale",
"query": "sailboats for sale",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003dmnMdREUH20SepmHQH1zlh9Hy_w7jpOlZFm3KG2R_BoA\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailing%2banarchy%26FORM%3dUSBAPI\u0026p\u003dDevEx,5006.1",
"displayText": "sailing anarchy",
"query": "sailing anarchy",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003dWLFO-B1GG5qtBGnoU1Bizz02YKkg5fgAQtHwhXn4z8I\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailpoint%26FORM%3dUSBAPI\u0026p\u003dDevEx,5007.1",
"displayText": "sailpoint",
"query": "sailpoint",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003dquBMwmKlGwqC5wAU0K7n416plhWcR8zQCi7r-Fw9Y0w\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailflow%26FORM%3dUSBAPI\u0026p\u003dDevEx,5008.1",
"displayText": "sailflow",
"query": "sailflow",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003d0udadFl0gCTKCp0QmzQTXS3_y08iO8FpwsoKPHPS6kw\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailboatdata%26FORM%3dUSBAPI\u0026p\u003dDevEx,5009.1",
"displayText": "sailboatdata",
"query": "sailboatdata",
"searchKind": "WebSearch"
},
{
"url": "https://www.bing.com/cr?IG\u003d2ACC4FE8B02F4AACB9182A6502B0E556\u0026CID\u003d1D546424A4CB64AF2D386F26A5CD6583\u0026rd\u003d1\u0026h\u003deSSt0MRSbl2V0RFPSuVd-gC7fGOT4717pz55EBUgPec\u0026v\u003d1\u0026r\u003dhttps%3a%2f%2fwww.bing.com%2fsearch%3fq%3dsailor%2b2025%26FORM%3dUSBAPI\u0026p\u003dDevEx,5010.1",
"displayText": "sailor 2025",
"query": "sailor 2025",
"searchKind": "WebSearch"
}
]
}
]
}