Avec
le code précédent, vous avez accès à
toutes les fonctionnalités de recherche Web de Google, mais
pour l'heure, l'API ne donne pas accès à Google Groups,
Google Images ou Google News.
Nous avons principalement utilisé une procédure sur
les trois fournies par l'API: doGoogleSearch(),
dont l'accés nous est donné en instanciant un client
SOAP avec le constructeur fourni par NuSOAP:
new soapclient("http://api.google.com/search/beta2");.
Il ne reste plus qu'à lancer un appel vers le serveur SOAP,
avec la méthode call() de
la classe soapclient. Cette classe,
comme on le voit, prend 4 arguments: le nom de la procédure
invoquée, un tableau contenant les paramètres de cette
procédure ($params, définie
auparavant), un nom d'espace et une valeur SOAPAction (urn:GoogleSearch
dans les deux cas).
Le tableau $params contient l'ensemble
des paramètres suivants (comme décrits dans la
documentation en ligne):
- la clé personnelle Google (obligatoire),
- les mots à rechercher,
- la page de résultats à afficher (le nombre
de résultats étant limité à dix par
page, ce paramètres permet de facilement intégrer
le gestion de liens "page suivante / page précédente"),
- le nombre maximal de résultats à afficher
par page (dix au maximum, donc),
- un booléen indiquant si le filtre de pages similaires
est activé ou non,
- le domaine de restriction (cela peut être une langue,
un pays (.fr, .jp...)),
- un booléen indiquant si l'on souhaite voir des résultats
"adultes" ou non, la langue utilisée (ici,
lang_en|lang_fr nous limite aux
résultats en langue anglaise OU française), et deux
paramètres d'encodage entrée/sortie qui sont désormais
à éviter (toutes les entrées/sorties se font
maintenant à la norme UTF-8) mais qui restent bizarrement
obligatoires (selon nos tests).
Le résultat de l'appel à doGoogleSearch()
est un tableau associatif (grâce à NuSOAP), d'où
il ne nous reste plus qu'à tirer les informations. Celles-ci
sont accessibles depuis le tableau $result
sous la forme:
$result['nomDeLaValeur'].
Les valeurs accessibles sont, entre autres, estimatedTotalResultsCount,
URL, snippet
(aperçu de la page), title
et
bien d'autres, ce qui permet de configurer exactement ce que
l'on veut afficher et où on veut l'afficher.
Il ne nous reste donc plus qu'à utiliser $result
comme bon nous semble. Tout d'abord, nous faisons en premier appel
au paramètre faultstring,
ajouté par NuSOAP pour renvoyer un message d'erreur lisible.
Ensuite, nous vérifions qu'il y a effectivement eu un résultat
à la recherche.
Enfin vient le plus intéressant: à l'aide d'une boucle
foreach(),
nous parcourons le tableau de résultats afin d'en afficher
chaque valeur. Pour chacune, on affiche le titre (avec le lien),
et un court extrait. En passant, les textes étant envoyés
au format UTF-8,
il nous faut les décoder (à l'aider de la fonction
PHP utf8_decode())
afin d'afficher les caractères spéciaux, comme les
accents en français.
On peut donc facilement ajouter des fonctions à l'affichage
des résultats. Par exemple, pour ajouter la taille de la
page cachée, il suffirait d'ajouter l'appel suivant:
<?=$r['cachedSize'];?>
Par contre, si l'on voulait ajouter un lien vers la dite page cachée,
il faut faire appel à une autre des trois procédures
fournies par l'API Google: doGetCachedPage():
(fichier cache.php)
<?php
include("nusoap.php");
$soapclient = new soapclient("http://api.google.com/search/beta2");
$params = array(
'key' => 'VOTRE-CLE-GOOGLE',
'url' => $adresse,
);
$result = $soapclient->call("doGetCachedPage", $params, "urn:GoogleSearch",
"urn:GoogleSearch");
if ($result)
{
if (is_array($result) && $result['faultstring'])
{
echo $result['faultstring'];
}
else
{
echo base64_decode($result);
}
}
?>
Comme vous pouvez le voir, doGetCachedPage()
ne prend que deux arguments: la clé Google et l'adresse d'origine...
Notez que les pages sont renvoyées au format texte encodé
en base 64: il nous faut donc les décoder pour les afficher,
à l'aide de la fonction PHP base64_decode().
Ensuite, il suffit d'ajouterdans votre fichier google.php
l'appel suivant:
<a href="cache.php?adresse=<?=$r['URL'];?>">En
cache</p>
Nous allons profiter de la page suivante pour sortir du didacticiel
habituel, et écrire à l'aide de l'API un petit jeu
très simple: notre propre version de Googlefight...
Page 1
| 2 | 3
|