views:

253

answers:

2

I'm trying to get the hits of a google search from a string of the query.

public class Utils {

public static int googleHits(String query) throws IOException {
 String googleAjax = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
 String json = stringOfUrl(googleAjax + query);
 JsonObject hits = new Gson().fromJson(json, JsonObject.class);

 return hits.get("estimatedResultCount").getAsInt();
}

public static String stringOfUrl(String addr) throws IOException {
 ByteArrayOutputStream output = new ByteArrayOutputStream();
 URL url = new URL(addr);
 IOUtils.copy(url.openStream(), output);
 return output.toString();
}

public static void main(String[] args) throws URISyntaxException, IOException {
 System.out.println(googleHits("odp"));
}

}

The following exception is thrown:

Exception in thread "main" java.lang.NullPointerException
    at odp.compling.Utils.googleHits(Utils.java:48)
    at odp.compling.Utils.main(Utils.java:59)

What am I doing incorrectly? Should I be defining an entire object for the Json return? That seems excessive, given that all I want to do is get one value.

For reference: the returned JSON structure.

+1  A: 

Looking the returned JSON, it seems that you're asking for the estimatedResultsCount member of the wrong object. You're asking for hits.estimatedResultsCount, but you need hits.responseData.cursor.estimatedResultsCount. I'm not super familiar with Gson, but I think you should do something like:

return hits.get("responseData").get("cursor").get("estimatedResultsCount");
Moishe
A: 

Hi, I tried this and it worked, using JSON and not GSON.

public static int googleHits(String query) throws IOException, JSONException {
    String googleAjax = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
    URL searchURL = new URL(googleAjax + query);
    URLConnection yc = searchURL.openConnection();
    BufferedReader in = new BufferedReader(
                            new InputStreamReader(
                            yc.getInputStream()));
    String jin = in.readLine();
    System.out.println(jin);
    JSONObject jso = new JSONObject(jin);
    JSONObject responseData = (JSONObject) jso.get("responseData");
    JSONObject cursor = (JSONObject) responseData.get("cursor");
    int count = cursor.getInt("estimatedResultCount");
    return count;}
watsonchua