TUTORIELS 
Introduction à l'API Google avec PHP

Page 1 | 2 | 3

Insérer facilement un moteur de recherche Google au sein des pages de son site grâce à PHP.
 (2 décembre 2002)
 

Un Googlefight consiste a comparer le nombre de résultats de deux requêtes données, celui recevant le plus de réponses étant déclaré "vainqueur". Voici le code de notre googlefight:

(fichier googlefight.php)
<html>
<body>
<form method="post" action="<?=$PHP_SELF ?>">
  <input type="text" name="combattant1">
  <input type="text" name="combattant2">
  <input type="submit" name="Submit" value="Ready ? FIGHT !">
</form>
<?php
if (isset($combattant1) && $combattant1 != "")
  {
  if (isset($combattant2) && $combattant2 != "")
    {
    include("nusoap.php");

    $soapclient = new soapclient("http://api.google.com/search/beta2");

     $params1 = array(
      'key' => 'VOTRE-CLE-GOOGLE',
      'q' => $combattant1,
      'start' => 0, 'maxResults' => 10,
      'filter' => false,
      'restrict' => '',
      'safeSearch' => false,
      'lr' => '',
      'ie' => '',
      'oe' => ''
      );

    $params2 = array(
      'key' => 'VOTRE-CLE-GOOGLE',
      'q' => $combattant2,
      'start' => 0,
      'maxResults' => 10,
      'filter' => false,
      'restrict' => '',
      'safeSearch' => false,
      'lr' => '',
      'ie' => '',
      'oe' => ''
      );

    $result1 = $soapclient->call("doGoogleSearch", $params1, "urn:GoogleSearch", "urn:GoogleSearch");
    $result2 = $soapclient->call("doGoogleSearch", $params2, "urn:GoogleSearch", "urn:GoogleSearch");
    $nbr1 = $result1['estimatedTotalResultsCount'];
    $nbr2 = $result2['estimatedTotalResultsCount'];
?>
<hr>
<?
    if ($result1['faultstring'] || $result2['faultstring'])
      {
?>
Erreur: <?=$result1['faultstring'];?> <?=$result2['faultstring'];?>.
<?
      }
    elseif (($nbr1 == 0) && ($nbr2 == 0))
      {
?>
Votre combat n'a pas donné de résultat.
<?
      }
    else
      {
      switch (bccomp($nbr1,$nbr2))
        {
        case 1:
?>
Le gagnant est "<?=$combattant1;?>", avec environ <?=$nbr1;?> résultats. <br>
Le perdant, "<?=$combattant2;?>", n'a obtenu qu'environ <?=$nbr2;?> résultats.<br>
Il y a environ <?=$nbr1-$nbr2;?> résultats de différence.
<?
          break;
        case -1;
?>
Le gagnant est "<?=$combattant2;?>", avec environ <?=$nbr2;?> résultats.<br>
Le perdant, "<?=$combattant1;?>", n'a obtenu qu'environ <?=$nbr1;?> résultats.<br>
Il y a <?=$nbr2-$nbr1;?> résultats de différence.
<?
          break;
        case 0;
?>
Incroyable ! Il y a égalité, avec <?=$nbr1;?> résultats des deux cotés !
<?
          break;
        }
?>
<br>
Le combat a duré
<?=$result1['searchTime'] > $result2['searchTime'] ? $result1['searchTime'] : $result2['searchTime'];?>
secondes.
<?
      }
    }
  }
?>
</body>
</html>

Il faut bien entendu savoir que, du fait que nous faisons ici deux requêtes (une pour chaque "combattant"), nous ne pouvons utiliser ce script au maximum que 500 fois par jour...

Si vous avez compris les deux exemples précédents, celui-ci ne devrait vous poser aucun problème: après avoir parametré les deux requêtes et reçu les deux réponses dans deux tableaux $params1 et $params2, nous affichons les résultats du "combat" à l'aide d'une structure de contrôle switch() et de la fonction mathématique bccomp(), qui fait partie de la bibliothèque standard BCMATH et permet de comparer deux nombres.
Pour l'anecdote, nous faisons aussi usage de la valeur contenue dans le searchTime renvoyé par chaque requête, afin d'afficher la durée du "combat".


Nous avons fait là un tour relativement complet de ce que l'on pouvait faire de l'API Google. Libre à vous d'y trouver de nouvelles utilisations, et de combiner ce service avec d'autres, comme, par exemple, Book Watch qui utilise plusieurs services pour:
1) afficher les livres dont on parle sur les blogs
2) ajouter des liens avec le catalogue Amazon avec l'API Amazon
3) trouver les informations en rapport avec chaque livre via l'API Google...

Tous les codes sources sont en ligne.


Page 1 | 2 | 3

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page