Ainsi, il est possible d'appeler directement l'url http://ajax.googleapis.com/ajax/services/search/web en lui passant une série de paramètres afin d'effectuer une recherche, et l'on récupère un objet facilement exploitable.

Les paramètres

Ici sont listé les paramètres les plus communs pour effectuer une recherche basique.

Paramètres obligatoires

  • v : Numéro de version de l'API (1.0 actuellement)
  • q : Les critères de recherche (le contenu de votre champ de recherche). Ce paramètre doit être url-encodé

Paramètres optionnels

  • hl : la langue de recherche (fr, en, ...). Si la langue n'est pas renseignée, Google essayera de déterminer la langue du demandeur (navigateur)
  • rsz : la taille des éléments renvoyés (small = 4, large = 8)
  • start : l'indice du premier résultat renvoyé

L'objet résultat

Google retourne donc un objet JSON appelé responseData qui contient deux sections intéressantes: les résultats (results) proprement dit et un curseur (cursor).

results

L'objet qui nous intéresse le plus, il est composé de 4 ou 8 items qui se composent chacun des champs suivants:

  • url : l'url du site (par exemple http://www.g33k-zone.org/test-de-google.php)
  • visibleUrl : l'url affichée (par exemple www.g33k-zone.org)
  • title : le titre de la page, avec les mots-clés mis en gras
  • titleNoFormatting : le titre de la page sans mise en forme
  • content : un extrait de la page

cursor

Le curseur donne des indications sur les pages de résultats, il contient deux éléments intéressants:

  • label: le numéro de la page
  • start: le numéro du premier résultat de la page concerné.

Avec le curseur, vous pouvez donc générer les liens vers les pages suivantes.

Exploitation en PHP5

Le système fonctionnant en JSON, il faut avoir PHP5 ou bien une classe permettant de transformer une chaîne JSON en objet. Le script suivant utilise cURL pour les accès à Google, mais il est aussi possible d'utiliser un file_get_contents ou fsock.

<?php
// Il faut un referer à Google, il s'agit de la page qui lance la recherche
define('REFERER', 'http://www.g33k-zone.org/index.php');
// Le paramètre start est celui qui défini la page Google que l'on veut atteindre
$start = intval($_GET['start']);
// Le paramètre q est le contenu du champs de recherche
if (isset($_GET['q']) && $_GET['q']!='') {
	$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&q=".rawurlencode($_GET['q'])."&start=".$start."&hl=fr";
 
	// Exécution de la recherche
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_REFERER, REFERER);
	$body = curl_exec($ch);
	curl_close($ch);
 
	// Analyse de la réponse
	$json = json_decode($body);
 
	// Affichage des résultats
	$res = $json->responseData->results;
	foreach ($res as $k => $myres) {
		echo '<p><a href="'.$myres->url.'" title="'.$myres->titleNoFormatting.'">'.$myres->title.'</a><br />';
		echo $myres->content.'<br />';
		echo '<a href="'.$myres->url.'" title="'.$myres->titleNoFormatting.'">'.$myres->visibleUrl.'</a></p><hr />';
	}
 
	// Affichage des liens pour les autres pages de recherche
	$lpages = $json->responseData->cursor->pages;
	foreach($lpages as $k => $myp) {
		echo '<a href="'.REFERER.'?q='.urlencode($_GET['q']).'&start='.$myp->start.'">'.$myp->label.'</a>&nbsp;';
	}
}
?>

Conclusion

Ce code est extrèmement simple à mettre en oeuvre et peut être adapté dans beaucoup de langages.

Je prépare actuellement une version bien plus élaborée qui pourra gérer les diverses recherches de Google (images, vidéos, livres, cartes, blogs, actualités).