简体   繁体   中英

Google search via Java Api - Multiple requests

I'm coming from this question .

The following code does not work well:

public static void main(String[] args) throws Exception {
    for (int i = 0; i < 15; i++)
    {
        String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
        String search = "test";
        String charset = "UTF-8";

        URL url = new URL(google + URLEncoder.encode(search, charset));
        Reader reader = new InputStreamReader(url.openStream(), charset);
        GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);

        // Show title and URL of 1st result.
        System.out.println(results.getResponseData().getResults().get(0).getTitle());
        System.out.println(results.getResponseData().getResults().get(0).getUrl());
    }
}

The search query works fine if I run it one time, however in this loop I get a null pointer exception.

Unfortunately I need my program to make several queries :( What can I do?

It returns a NullPointerException at the first results.getResponseData .

This is happening because Google actively blocks suspected terms of service abuse. See section 5.3 here:

http://www.google.com/accounts/TOS

If Google detects that you are issuing search requests via a program without their consent, they don't send back results. Your JSON response will contain this:

{"responseData": null, "responseDetails": "Suspected Terms of Service Abuse. Please see http://code.google.com/apis/errors", "responseStatus": 403}

Check to make sure results and other contained objects are not null before you use them.

if ((results != null) && (results.getResponseData() != null) &&
    (results.getResponseData().getResults() != null) &&
    (results.getResponseData().getResults().get(0) != null)) {
    // Show title and URL of 1st result.
    System.out.println(results.getResponseData().getResults().get(0).getTitle());
    System.out.println(results.getResponseData().getResults().get(0).getUrl());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM