2011-11-16 51 views
3

我來自this question谷歌搜索通過Java Api - 多個請求

下面的代碼無法正常工作:

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

搜索查詢工作正常,如果我運行它一個時間,但是在這個循環中,我得到一個空指針異常。

不幸的是,我需要我的程序進行多次查詢:(我該怎麼辦?

它返回在第一results.getResponseData一個NullPointerException

+0

我也面臨這個問題。那麼如何擺脫這一點? –

+0

你不能。這違反了Google的TOS。您可以嘗試添加更長的延遲,或嘗試將IP發送給Google。 – David

+0

我也加了ip。但仍然無法正常工作。 'String address =「https://ajax.googleapis.com/ajax/services/search/web?v=1.0&start=0&userip=14.90.136.150&safe=active&rsz=8 &q=";' 有時它不給任何例外和搜索從谷歌的文本,但大部分時間,它會拋出'NullPointerException'爲什麼? –

回答

2

這是因爲谷歌積極阻止嫌疑犯d服務條款的濫用。參見5.3節在這裏:

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

如果谷歌檢測到您正在發行通過程序的搜索請求未經他們同意,他們不發回的結果。你的JSON響應將包含:

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

但有時它不會給出任何異常,並搜索谷歌的文本,有時它會拋出NullPointerException。爲什麼? –

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

好,我問的是 - 爲什麼結果NULL是第一位?我怎樣才能避免它 – David