Quelques faits :
-
Google propose une API de service de recherche publique qui renvoie du JSON : http://ajax.googleapis.com/ajax/services/search/web. Documentation ici
-
Java propose java.net.URL
et java.net.URLConnection
pour envoyer et gérer des requêtes HTTP.
-
JSON peut être converti en Java en un objet Javabean complet en utilisant une API JSON Java arbitraire. L'un des meilleurs est Google Gson.
Faisons maintenant le calcul :
public static void main(String[] args) throws Exception {
String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
String search = "stackoverflow";
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);
// Afficher le titre et l'URL du 1er résultat.
System.out.println(results.getResponseData().getResults().get(0).getTitle());
System.out.println(results.getResponseData().getResults().get(0).getUrl());
}
Avec cette classe Javabean représentant les données JSON les plus importantes renvoyées par Google (elle renvoie en fait plus de données, mais il vous appartient en exercice d'étendre ce code Javabean en conséquence) :
public class GoogleResults {
private ResponseData responseData;
public ResponseData getResponseData() { return responseData; }
public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
public String toString() { return "ResponseData[" + responseData + "]"; }
static class ResponseData {
private List results;
public List getResults() { return results; }
public void setResults(List results) { this.results = results; }
public String toString() { return "Results[" + results + "]"; }
}
static class Result {
private String url;
private String title;
public String getUrl() { return url; }
public String getTitle() { return title; }
public void setUrl(String url) { this.url = url; }
public void setTitle(String title) { this.title = title; }
public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
}
}
Voir aussi :
Mise à jour depuis novembre 2010 (2 mois après la réponse ci-dessus), le service de recherche publique est devenu obsolète (et le dernier jour où le service a été offert était le 29 septembre 2014). Votre meilleure option est maintenant de faire une requête directement sur http://www.google.com/search avec un agent utilisateur honnête et d'analyser le résultat à l'aide d'un parseur HTML. Si vous omettez l'agent utilisateur, vous obtenez une erreur 403. Si vous mentez dans l'agent utilisateur et simulez un navigateur web (par exemple Chrome ou Firefox), vous obtenez une réponse HTML beaucoup plus volumineuse, ce qui est une perte de bande passante et de performances.
Voici un exemple de départ utilisant Jsoup comme parseur HTML :
String google = "http://www.google.com/search?q=";
String search = "stackoverflow";
String charset = "UTF-8";
String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; // Change this to your company's name and bot homepage!
Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get().select(".g>.r>a");
for (Element link : links) {
String title = link.text();
String url = link.absUrl("href"); // Google retourne des URL au format "http://www.google.com/url?q=&sa=U&ei=".
url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");
if (!url.startsWith("http")) {
continue; // Publicités/actualités/etc.
}
System.out.println("Titre : " + title);
System.out.println("URL : " + url);
}
0 votes
Avez-vous du support pour nodejs?
0 votes
Exemple de recherche sur Google en utilisant Java - Jsoup HTML Parser : codeforeach.com/java/example-how-to-search-google-using-java
0 votes
Pourquoi est-ce toujours fermé?