Zend Framework : recherche Web avec Yahoo! et Google

Recherche Web avec Yahoo!

Les deux moteurs proposent des API pour rechercher des pages Web. Voyons un peu comment les exploiter à l'aide du Zend Framework.

Yahoo!

Commençons par le plus simple. Pour chercher sur le Web avec Yahoo!, ZF dispose d'un composant dédié : Zend_Service_Yahoo. Pour l'utiliser, il faut au préalable s'enregistrer chez Yahoo! pour obtenir un identifiant pour votre application.

Une fois l'identifiant obtenu, l'utilisation du composant est simple comme bonjour :

<?php
$serviceYahoo 
= new Zend_Service_Yahoo('ID_APPLICATION_YAHOO');
$results $serviceYahoo->webSearch('ma recherche');
foreach (
$results as $result) {
    echo 
$result->Title PHP_EOL;
}
?>

Si on veut obtenir des résultats similaires à ceux de Yahoo! France, on doit passer quelques options à la méthode webSearch :

<?php
$results 
$serviceYahoo->webSearch(
    
'ma recherche'
    
array(
        
'language' => 'fr'// Langue française
        
'region' => 'fr'    // France
    
)
);
?>

Vous pouvez consulter la liste des différentes options dans la documentation fournie par Yahoo.

Voici un script CLI complet pour effectuer une recherche à partir de la ligne de commande :


<?php
require_once 'Zend/Service/Yahoo.php';

$yahoo = new Zend_Service_Yahoo('ID_APPLICATION_YAHOO');
$results $yahoo->webSearch(
    
$argv[1],
    array(
        
'language' => 'fr',
        
'region' => 'fr'
    
)
);

$pos 1;

echo 
PHP_EOL;

foreach (
$results as $result) {    
    
$title iconv('UTF-8''CP850//IGNORE'$result->Title);
    echo 
str_pad("$pos. "5' 'STR_PAD_LEFT) . $title PHP_EOL;
    echo 
"     {$result->Url}PHP_EOL PHP_EOL;
    
$pos++;
}
?>
Une recherche sur Yahoo

Ce script est prévu pour fonctionner sous Windows, mais il devrait pouvoir être facilement adapté pour une autre plateforme.

Avec Zend_Service_Yahoo, vous pouvez également rechercher des images, des vidéos, des entreprises, des services locaux... Consultez la documentation du Zend Framework pour en savoir plus.

Zend_Service_Yahoo utilise l'ancienne API Yahoo, pas la nouvelle nommée BOSS.

Google

Google proposait autrefois une API SOAP, mais elle n'est plus disponible. Sa remplacante se nomme Google AJAX Search API. Contrairement à ce que son nom laisserait penser, cette API est accessible depuis des langages autres que Javascript. Google mets à disposition une interface RESTFull qui est utilisable à partir de PHP. Ils proposent d'ailleurs un exemple utilisant CURL.

Le Zend Framework dispose d'un composant Zend_Rest_Client, mais ce dernier attends une réponse au format XML, alors que Google AJAX Search API renvoie ses données au format JSON. On va donc utiliser à la place Zend_Http_Client pour effectuer notre requête.

<?php
$client 
= new Zend_Http_Client();
$client->setUri(http://ajax.googleapis.com/ajax/services/search/web);
$client->setParameterGet(
    array(
        
'hl' => 'fr',           // Recherche France
        
'lr' => 'lang_fr',      // Langue française
        
'q' => 'ma recherche',
        
'rsz' => 'large',       // 8 résultats
        
'v' => '1.0'
    
)
);
$client->setHeaders(
    array(
        
'Referer' => 'http://www.monsite.fr' // Obligatoire
    
)
);
$response $client->request();
if (
$response->isSuccessful()) {
    
$googleResponse json_decode($response->getBody());
    
$pos 1;
    foreach (
$googleResponse->responseData->results as $result) {
        
$title iconv('UTF-8''CP850//IGNORE'$result->titleNoFormatting);
        echo 
str_pad("$pos. "5' 'STR_PAD_LEFT) . $title PHP_EOL;
        echo 
"     {$result->url}PHP_EOL PHP_EOL;
       
$pos++;
    }
}
?>
Une recherche sur Google

Voila, c'est donc assez simple, mais il y a des limitations importantes :

  • Les résultats ne correspondent pas à ceux obtenus lors d'une recherche sur google.fr. Google utilise apparemment des algorithmes différents ou brouille de façon délibérée ses résultats.
  • On peut obtenir au maximum 8 résultats par requête. On peut enchainer plusieurs requêtes (en passant une valeur entre 0 et 7 dans le paramètre start), mais on est limité à 64 résultats (8 pages de 8 résultats).

Restrictions d'utilisations

Les applications utilisant ces services Web doivent respecter les conditions d'utilisations imposées par Google et Yahoo! (elles doivent notamment être accessibles gratuitement aux utilisateurs, les résultats présentés ne doivent pas être altérés et vous devez afficher la mention 'Powered by ...').

Voir aussi

Etiquettes:

Ajouter un commentaire