Classe de recherche Google
CrazyCat » 21/ 10/2009 12:21
PHP
|
Envoyer à un ami |
Fil des commentaires de ce billet
URL de rétrolien : http://www.g33k-zone.org/trackback/41
Ainsi que je le disais dans ce billet, j'ai réalisé une classe pour exploiter l'API de recherche de Google sans utiliser AJAX. Elle permet de faire les recherches dans 7 catégories: web, images, vidéos, blogs, actualités, livres et cartes.
Vous trouverez sa mise en application sur cette page
Pré-requis
La classe est en PHP5 et nécessite cURL. De plus, vous devez avoir une clé google API pour l'exploiter en respectant la charte de Google.
Utilisation
Configuration initiale
Il y a deux constantes à modifier dans la classe:
- GoogleReferer est l'url de votre page exploitant la classe,
- GoogleKey est votre clé Google API, que vous obtenez gratuitement sur cette page
Pas à pas
Formulaire de recherche
Tout d'abord, le formulaire de recherche doit suivre une logique de nommage pour les domaines de recherche et la taille du résultat:
<form method="post" action="index.php"> <fieldset> <!-- Champ "Mots clé à rechercher --> <label for="keyword">Rechercher : </label><input type="text" name="keyword" id="keyword" /> <br /> <!-- Choix des types de recherche --> <input type="checkbox" name="search[]" id="web" checked="checked" value="web" /><label for="web">Web </label> <input type="checkbox" name="search[]" id="images" value="images" /><label for="images">Images </label> <input type="checkbox" name="search[]" id="video" value="video" /><label for="video">Vidéos </label> <input type="checkbox" name="search[]" id="blogs" value="blogs" /><label for="blogs">Blogs </label> <input type="checkbox" name="search[]" id="books" value="books" /><label for="books">Livres </label> <input type="checkbox" name="search[]" id="news" value="news" /><label for="news">Actualités </label> <input type="checkbox" name="search[]" id="local" value="local" /><label for="local">Cartes </label> <br /> <input type="submit" value="Rechercher" /> <br /> <!-- Nombre de résultats --> Taille des résultats : <input type="radio" name="size" id="small" value="small" checked="checked" ><label for="small">Normal </label> <input type="radio" name="size" id="large" value="large" ><label for="large">Grand </label> </fieldset> </form>
Ainsi, on constate que toutes les checkboxes remplissent un tableau. Il ne faut pas modifier les values car ce sont celles utilisées par la classe et par google.
Initialisation de la classe
La classe peut être instanciée des manières suivantes:
<?php // Instanciation simple, les paramètres par défaut sont chargés $recherche =& new GoogleSearch(); // Instanciation en lançant une recherche de type web $recherche =& new GoogleSearch('web', 'expression à chercher'); ?>
Un troisième paramètre, qui est le numéro de la page, peut être employé.
Adaptation des rendus
La methode setPattern() permet de modifier les rendus de résultats. Elle prend deux arguments, le type de résultat et le nouveau rendu à utiliser:
<?php $recherche->setPattern('web', '<li class="web"><a href="{url}" title="{titleNoFormating}">{title}</a><br />{content}<br /><a href="{url}" title="{titleNoFormating}">{visibleUrl}</a></li>'); $recherche->setPattern('local', '<li class="local"><a href="{url}" title="{titleNoFormating}"><img src="{staticMapUrl}" alt="Lat.: {lat} - Lng.: {lng}" width="150" height="100" /><br />{title}</a><br />{content}<br /><a href="{url}" title="{titleNoFormating}">{visibleUrl}</a></li>'); ?>
Les expressions entre accolades sont les mot-clés présents dans l'objet que retourne Google, vous pouvez en trouver la liste exhaustive sur la référence de l'API.
Interrogation de Google
La recherche s'effectue en deux phase, l'interrogation proprement dite et le rendu des résultats. Voici le principe commenté:
<?php // Boucle sur les types de recherche choisis foreach($_POST['search'] as $k => $v) { // On affecte le bon type $recherche->setGtype($v); // On effectue la recherche $recherche->searchGoogle($_POST['keyword']); } // On récupère le résultat des recherches $res = $recherche->getResults(); // Affichage echo implode(chr(13).chr(10), $res); ?>
Vous trouverez d'autres options dans la source de la classe, pour pouvoir adapter son utilisation un peu plus.