3

私はこの質問から来ています。

次のコードはうまく機能しません。

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

検索クエリを 1 回実行すると問題なく動作しますが、このループで null ポインター例外が発生します。

残念ながら、いくつかのクエリを実行するにはプログラムが必要です :( どうすればよいですか?

NullPointerException最初に aを返しますresults.getResponseData

4

2 に答える 2

2

これは、Google が疑わしい利用規約の乱用を積極的にブロックしているためです。ここのセクション 5.3 を参照してください。

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

プログラムを介して同意なしに検索リクエストを発行していることを Google が検出した場合、結果は返されません。JSON 応答には次のものが含まれます。

{"responseData": null, "responseDetails": "Suspected Terms of Service Abuse. Please see http://code.google.com/apis/errors", "responseStatus": 403}
于 2011-11-16T17:43:25.077 に答える
0

results使用する前に、 および他の含まれているオブジェクトがないことを確認してくださいnull

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());
}
于 2011-11-16T16:09:12.217 に答える