Поиск в Google через Java Api - несколько запросов - PullRequest
3 голосов
/ 16 ноября 2011

Я иду от этот вопрос .

Следующий код не работает:

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

Поисковый запрос работает нормально, если я запускаю его один раз, однако в этом цикле я получаю исключение нулевого указателя.

К сожалению, мне нужно, чтобы моя программа сделала несколько запросов :( Что я могу сделать?

Возвращает NullPointerException при первом results.getResponseData.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Это происходит потому, что 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}
0 голосов
/ 16 ноября 2011

Убедитесь, что 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...