Les deux moteurs proposent des API pour rechercher des pages Web. Voyons un peu comment les exploiter à l'aide du Zend Framework.
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++;
}
?>
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.
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++;
}
}
?>
Voila, c'est donc assez simple, mais il y a des limitations importantes :
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 ...').
Ajouter un commentaire