2016-05-22 1 views
0

J'ai un peu perdu contact avec les moteurs de recherche personnalisés depuis que Google est passé de son api de moteur de recherche plus hérité en faveur de l'API de recherche personnalisée google. J'espère que quelqu'un sera capable de me dire si un objectif (assez simple) peut être atteint avec le nouveau cadre, et potentiellement toute aide au démarrage serait formidable. Plus précisément, je cherche à écrire un programme qui lira du texte à partir d'un fichier texte, puis j'utiliserai cinq mots dudit document dans une recherche google - le but étant de déterminer le nombre de résultats obtenus à partir de cette recherche.Google API de recherche personnalisée - Résultats de la recherche

Une entrée exemple/sortie serait:

Entrée: « Ceci est mon terme de recherche » - citations incluses dans la recherche!

sortie: il y avait 7 résultats totaux

de Merci beaucoup, tout, pour votre temps/help

Répondre

1

D'abord, vous devez créer un projet Google Custom Search dans votre compte Google. À partir de ce projet, vous devez obtenir un ID de moteur de recherche personnalisé, appelé paramètre cx. Vous devez également obtenir un paramètre de clé API. Les deux sont disponibles dans votre projet Google Custom Search API dans votre compte google.

Ensuite, si vous préférez Java, voici un exemple de travail:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 


public class GoogleCustonSearchAPI { 

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

String key="your_key"; 
String qry="your_query"; 
String cx = "your_cx"; 

//Fetch urls 
URL url = new URL(
"https://www.googleapis.com/customsearch/v1?key="+key+"&cx="+cx+"&q="+ qry +"&alt=json&queriefields=queries(request(totalResults))"); 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("GET"); 
conn.setRequestProperty("Accept", "application/json"); 
BufferedReader br = new BufferedReader(new InputStreamReader(
     (conn.getInputStream()))); 
//Remove comments if you need to output in JSON format 
/*String output; 
System.out.println("Output from Server .... \n"); 
while ((output = br.readLine()) != null) { 
    System.out.println(output); 
}*/ 
//Print the urls and domains from Google Custom Search                    String searchResult;   
    while ((searchResult = output.readLine()) != null) { 
     int startPos=searchResult.indexOf("\"link\": \"")+("\"link\": \"").length(); 
     int endPos=searchResult.indexOf("\","); 
     if(searchResult.contains("\"link\": \"") && (endPos>startPos)){ 
      String link=searchResult.substring(startPos,endPos); 
      if(link.contains(",")){ 
       String tempLink = "\""; 
       tempLink+=link; 
       tempLink+="\""; 
       System.out.println(tempLink); 
      } 
      else{ 
       System.out.println(link);     
      } 
      System.out.println(getDomainName(link)); 
     }  
    } 
conn.disconnect();     
} 

public static String getDomainName(String url) throws URISyntaxException { 
    URI uri = new URI(url); 
    String domain = uri.getHost(); 
    return domain.startsWith("www.") ? domain.substring(4) : domain; 
} 

Le "& queriefields = requêtes (demande (totalResults))" est ce qui fait la différence et donne sou que vous avez besoin. Mais gardez à l'esprit que vous ne pouvez effectuer que 100 requêtes par jour gratuitement et que les résultats de l'API de recherche personnalisée sont parfois très différents de ceux renvoyés par Google.com search

+0

-vous à l'esprit comment "spécifiquement" obtenir le 'cx'? – lonesome

+0

Ici vous pouvez trouver l'ID cx: http://www.google.com/cse/manage/all. Ensuite, cherchez "Mes moteurs de recherche" puis choisissez dans la liste. Lorsque vous sélectionnez votre moteur, il y a un bouton "ID du moteur de recherche" à droite de Détails. C'est cx. J'espère avoir aidé !! –

+0

C'était utile. Mais j'ai un problème. Je voudrais connaître les résultats que Google renvoie pour toute requête aléatoire. Depuis que Googled a tué l'ajax api, j'essaie d'utiliser le CSE. Mais je ne sais pas comment l'utiliser. J'ai choisi Google.com pour créer un moteur de recherche personnalisé, mais il renvoie les résultats des services de Google. Comment suis-je censé faire un moteur de recherche personnalisé qui montre les résultats de google? – lonesome

0

Si quelqu'un avait encore besoin d'un exemple de CSE (Google Custom Search Engine) API, cette méthode de travail est

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

cette méthode renvoie Liste des objets de résultat, de sorte que vous pouvez itérer il

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

J'utilise les dépendances Gradle

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

Ne pas oublier de définir votre propre GOOGLE_API_KEY, SEARCH_ENGINE_ID (cx), et QUERY HTTP_REQUEST_TIMEOUT (ie finale privée statique int HTTP_REQUEST_TIMEOUT = 3 * 600000;)