2012-04-21 19 views
10

¿Alguien puede compartir algunos códigos de Java para empezar a buscar en google? Busque en Internet pero no encontré ninguna documentación adecuada o buenos códigos de muestra. Los códigos que encontré no parecen para estar trabajando. Estaré agradecido si alguien me puede ayudar. (He obtenido la clave de API y la identificación de motor de búsqueda personalizada).Código de Java para usar la API de búsqueda personalizada de Google

Gracias.

+0

posible duplicado http://stackoverflow.com/q/3727662/776084 – RanRag

+1

@RanRag: I DNT creo que es un duplicado ya que aquí lo que sé sobre Google búsqueda personalizada API.The Lo único que estoy pidiendo es algunos buenos códigos Java para empezar. –

Respuesta

11

He cambiado while loop en el código provisto por @Zakaria arriba. Puede que no sea una forma adecuada de resolverlo, pero le da los enlaces resultantes de la búsqueda de Google. Solo necesita analizar la salida. Vea aquí,

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

Espero que funcione para usted también.

+2

obtengo detalles de los enlaces, pero ¿conoce alguna forma de obtener detalles de la página web que están abiertos desde estos enlaces? – Aniket

+0

Esto me da un código de error HTTP de 400. ¿Hay un límite en la cantidad de consultas que puede hacer por día? Si es así, ¿cuál es ese límite? –

+0

@Pargat recibo 'java.io.IOException: El servidor devolvió el código de respuesta HTTP: 403' ayúdame a resolver esto, utilicé el código anterior solamente – Selva

5

Bueno, creo que no hay nada especial en el sentido de que puede utilizar un cliente Java RESTFUL.

Probé la API personalizada con el that Java code y basando en el 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(); 
    } 

Usted tiene que reemplazar "TU-CLAVE" con una que se encuentra en la Google APIs Console.

+0

Ejecuto el código pero la salida no está de acuerdo con mis expectativas. Pensé que obtendría algunos enlaces superiores del código. ¿Puede decirme cómo puedo lograr eso a partir de este código? –

+1

@Zakaria recibo detalles de enlaces, pero ¿conoce alguna forma de obtener detalles de la página web que están abiertos desde estos enlaces? – Aniket

2

para cualquier persona que necesite ejemplo de trabajo de encargo API de búsqueda usando la biblioteca de Google, puede utilizar este método:

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

Este método devuelve la lista de objetos de resultado, por lo que puede iterar a través de él

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

Como se habrán dado cuenta, usted tiene que definir su GOOGLE_API_KEY encargo, SEARCH_ENGINE_ID, consulta y HTTP_REQUEST_TIMEOUT, es decir

private static final int HTTP_REQUEST_TIMEOUT = 3 * 600000; 

utilizo dependencias Gradle:

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

¡Gracias por la respuesta! De hecho, ahora estoy lidiando con esto y encontré tu código útil. Me gusta cómo configura la clave API y la ID del motor de búsqueda, en lugar de usar la cadena de URL como en otras respuestas. – evaldeslacasa

Cuestiones relacionadas