2012-04-21 87 views
10

任何人都可以請分享一些java代碼入門谷歌搜索api's.I在互聯網上搜索,但沒有找到任何適當的文檔或良好的示例代碼。我發現的代碼似乎並不(我已經獲得了API密鑰和自定義搜索引擎ID)。如果有人能幫助我,我會很感激。使用谷歌自定義搜索API的Java代碼

謝謝。

+0

可能重複http://stackoverflow.com/q/3727662/776084 – RanRag 2012-04-21 08:14:16

+1

@RanRag:我硝基甲苯認爲這是因爲在這裏重複我知道谷歌定製搜索API.The我唯一要求的是一些很好的java代碼來開始使用它。 – 2012-04-21 08:22:39

回答

11

我在上面的@Zakaria提供的代碼中更改了while loop。它可能不是一個正確的方法,但它會給你搜索谷歌搜索的結果鏈接。你只需要解析輸出。看到這裏,

public static void main(String[] args) throws Exception { 

    String key="YOUR KEY"; 
    String qry="Android"; 
    URL url = new URL(
      "https://www.googleapis.com/customsearch/v1?key="+key+ "&cx=013036536707430787589:_pqjad5hr1a&q="+ qry + "&alt=json"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setRequestMethod("GET"); 
    conn.setRequestProperty("Accept", "application/json"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 

     if(output.contains("\"link\": \"")){     
      String link=output.substring(output.indexOf("\"link\": \"")+("\"link\": \"").length(), output.indexOf("\",")); 
      System.out.println(link);  //Will print the google search links 
     }  
    } 
    conn.disconnect();        
} 

希望它也適用於你。

+2

我收到鏈接的詳細信息,但是你知道有什麼方法可以獲取從這些鏈接打開的網頁詳細信息。 – Aniket 2013-03-30 13:14:25

+0

這給了我一個HTTP錯誤代碼400.是否有限制每天可以進行多少查詢?如果是這樣,那麼這個限制是多少? – 2014-10-17 07:15:18

+0

@Pargat我得到'java.io.IOException:服務器返回的HTTP響應代碼:403'幫我解決這個問題,我只用上面的代碼 – Selva 2015-08-20 11:50:32

5

嗯,我認爲沒有什麼特別之處,您可以使用Java RESTFUL客戶端。

我嘗試使用that Java code和基礎上的Google documentation自定義API:

public static void main(String[] args) throws IOException { 
     URL url = new URL(
       "https://www.googleapis.com/customsearch/v1?key=YOUR-KEY&cx=013036536707430787589:_pqjad5hr1a&q=flowers&alt=json"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 

     String output; 
     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
     } 

     conn.disconnect(); 
    } 

你有一對Google APIs Console發現,以取代 「YOUR-KEY」。

+0

我運行的代碼,但輸出不符合我的期望。我想我會從代碼中得到一些頂級鏈接。你能告訴我如何從這段代碼實現? – 2012-04-21 10:35:30

+1

@Zakaria我得到的鏈接的詳細信息,但你知道任何方式來獲取從這些鏈接打開的網頁細節。 – Aniket 2013-03-30 13:14:46

2

對於誰可以使用谷歌圖書館需要自定義搜索API的工作例如,你可以使用這個方法:

public static List<Result> search(String keyword){ 
    Customsearch customsearch= null; 


    try { 
     customsearch = new Customsearch(new NetHttpTransport(),new JacksonFactory(), new HttpRequestInitializer() { 
      public void initialize(HttpRequest httpRequest) { 
       try { 
        // set connect and read timeouts 
        httpRequest.setConnectTimeout(HTTP_REQUEST_TIMEOUT); 
        httpRequest.setReadTimeout(HTTP_REQUEST_TIMEOUT); 

       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    List<Result> resultList=null; 
    try { 
     Customsearch.Cse.List list=customsearch.cse().list(keyword); 
     list.setKey(GOOGLE_API_KEY); 
     list.setCx(SEARCH_ENGINE_ID); 
     Search results=list.execute(); 
     resultList=results.getItems(); 
    } 
    catch ( Exception e) { 
     e.printStackTrace(); 
    } 
    return resultList; 
} 

這個方法返回結果對象的列表,所以你可以通過它

List<Result> results = new ArrayList<>(); 

    try { 
     results = search(QUERY); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    for(Result result : results){ 
     System.out.println(result.getDisplayLink()); 
     System.out.println(result.getTitle()); 
     // all attributes: 
     System.out.println(result.toString()); 
    } 
迭代

正如你已經注意到了,你必須定義自定義GOOGLE_API_KEY,SEARCH_ENGINE_ID,查詢和HTTP_REQUEST_TIMEOUT,即

private static final int HTTP_REQUEST_TIMEOUT = 3 * 600000; 

我使用gradle這個依賴關係:

dependencies { 
compile 'com.google.apis:google-api-services-customsearch:v1-rev57-1.23.0' 
} 
+0

感謝您的回答!我現在正在處理這個問題,並發現你的代碼很有用。我喜歡你如何設置API密鑰和搜索引擎ID,而不是像其他答案中那樣使用URL字符串。 – evaldeslacasa 2017-10-30 22:23:14