Frage

Ich versuche, die Hits einer Google -Suche von einer Abfrage zu erhalten.

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"));
    }

}

Die folgende Ausnahme wird ausgelöst:

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

Was mache ich falsch? Sollte ich ein ganzes Objekt für die JSON -Rückkehr definieren? Das erscheint übermäßig, da ich nur einen Wert erhalten möchte.

Als Referenz: die Rendierte die JSON -Struktur zurück.

War es hilfreich?

Lösung

Wenn Sie den zurückgegebenen JSON betrachten, bitten Sie nach dem geschätzten Mitglied des falschen Objekts. Sie bitten um Hits.StimatedResultscount, aber Sie brauchen Hits.responedata.cursor.StimatedResultscount. Ich bin mit GSON nicht besonders vertraut, aber ich denke, Sie sollten so etwas tun wie:

return hits.get("responseData").get("cursor").get("estimatedResultsCount");

Andere Tipps

Ich habe es versucht und es hat mit JSON und nicht GSON funktioniert.

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top