2012-04-21 21 views
10

Czy ktoś może udostępnić niektóre kody java, aby rozpocząć korzystanie z api wyszukiwania Google. Szukałem w Internecie, ale nie znalazłem żadnej odpowiedniej dokumentacji lub dobrych kodów przykładowych. Kody, które znalazłem nie wydaje się do pracy. Będę wdzięczny, jeśli ktoś mi pomoże. (Otrzymałem klucz API i identyfikator wyszukiwarki niestandardowej).Kod Java do korzystania z niestandardowego wyszukiwania Google API

Dzięki.

+0

Możliwa powielać http://stackoverflow.com/q/3727662/776084 – RanRag

+1

@RanRag: dnt myślę, że to duplikat, ponieważ tutaj wiem o Google Custom Search API.The Jedyne, o co pytam, to kilka dobrych kodów java, aby zacząć z tym. –

Odpowiedz

11

Zmieniłem kod while loop w kodzie podanym przez @Zakaria powyżej. Może to nie być prawidłowy sposób opracowania, ale daje wyniki wyszukiwania w wyszukiwarce Google. Musisz tylko przeanalizować wynik. Zobacz tutaj,

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

Mam nadzieję, że to działa również dla Ciebie.

+2

Otrzymuję szczegóły linków, ale znasz jakiś sposób, aby uzyskać szczegółowe informacje na stronie, które są otwarte z tych linków. – Aniket

+0

To daje mi kod błędu HTTP 400. Czy istnieje limit liczby zapytań, które możesz wykonać dziennie? Jeśli tak, to jaki jest ten limit? –

+0

@Pargat otrzymuję 'java.io.IOException: Serwer zwrócił kod odpowiedzi HTTP: 403' pomóż mi rozwiązać ten problem, użyłem powyższego kodu tylko – Selva

5

Cóż, myślę, że nie ma nic szczególnego w tym sensie, że można użyć klienta RESTFUL Java.

Próbowałem API niestandardowej przy użyciu that Java code i opierając się na Google documentation:

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

Trzeba zastąpić „Twój klucz” ze znalezionego na Google APIs Console.

+0

Uruchomiłem kod, ale wynik nie jest zgodny z moimi oczekiwaniami. Pomyślałem, że dostanę jakieś najlepsze linki z kodu. Czy możesz mi powiedzieć, jak mogę to osiągnąć z tego kodu? –

+1

@Zakaria otrzymuję szczegóły linków, ale znasz jakiś sposób, aby uzyskać szczegółowe informacje na stronie, które są otwarte z tych linków. – Aniket

2

Dla każdego, kto musiałby przykład roboczy Custom Search API z wykorzystaniem biblioteki Google, można użyć tej metody:

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

Ta metoda zwraca listę obiektów rezultacie, dzięki czemu można wykonać iterację nim

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

Jak zauważyliście, trzeba zdefiniować niestandardową GOOGLE_API_KEY, SEARCH_ENGINE_ID, zapytania i HTTP_REQUEST_TIMEOUT, tj

private static final int HTTP_REQUEST_TIMEOUT = 3 * 600000; 

używam Gradle zależności:

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

Dzięki za odpowiedź! Właśnie teraz zajmuję się tym i stwierdziłem, że twój kod jest użyteczny. Podoba mi się sposób ustawiania klucza API i identyfikatora wyszukiwarki, zamiast używania ciągu adresów URL, jak w innych odpowiedziach. – evaldeslacasa

Powiązane problemy