Personnaliser Google


Avertissement : attention, le "détournement" de Google, ou de toute autre site, ne peut évidemment pas être utilisé sans autorisation de son propriétaire. Il n'est présenté ici qu'à titre illustratif des potentialités du php.
Le choix de Google a été dicté par son efficacité, sa puissance et sa pertinence. Il ne s'agit en aucun cas d'une publicité pour Google. Les images et les liens publicitaires de Google n'ont pas été modifiés


Face à un site donnant accès à une base de données, on est souvent frustré par les limitations mise en place - souvent pour des raisons techniques ou de sécurité - par ses concepteurs.
La taille des requêtes est souvent limitée par la longueur du texte de la requête (notamment quand la requete est envoyée dans l'url de la page web).
Le volume d'information peut être limité pour éviter des difficultés si l'internaute de dispose pas de haut débit, ou bien pour limiter la sollicitation du serveur. L'internaute est ainsi souvent amené à faire plusieurs requêtes successives pour obtenir le résultat souhaité.

Dans certains cas, on peut tourner la difficulté en demandant à un serveur de faire la (ou les) requete(s) puis d'en aménager ou consolider les résultats.
L'exemple ci-après montre comment on peut avec cette technique faire une requête complexe sur Google : rechercher un (ou des) mot(s) (ou d'images) dans une liste prédéfinie de sites Web.
Les requetes disponibles sur Google (utilisation de site: et de OR) ne permettent pas cette opération pour un grand nombre de sites.

L'intérêt est par exemple de faire des recherches plus rapides et plus efficaces sur un domaine particulier en limitant la recherche aux sites les plus pertinents.
On peut par exemple chercher des informations ciblées (par exemple sur le prix du pétrole) dans les sites "énergie" les plus réputés en cliquant sur le lien : energie
ou tout savoir sur excel à partir des meilleurs sites : Excel
Ou bien chercher des photos d'un champignon sur : champignons
Attention, haut débit vivement souhaité !

Comment ça marche ?
Quand vous cliquez sur les liens champignons, vous ouvrez une page php qui va effectuer les opérations suivante :
- Envoyer successivement à Google les requêtes suivantes
         http://images.google.com/images?q=site%3Ahttp%3A%2F%2Fchampignon.champyves.free.fr%2F+champignon
         http://images.google.com/images?q=site%3Ahttp%3A%2F%2Fwww.tachenon.com%2F+champignon
         http://images.google.com/images?q=site%3Ahttp%3A%2F%2Ffrancois.nagy.free.fr+champignon
         http://images.google.com/images?q=site%3Ahttp%3A%2F%2Fmycorance.free.fr+champignon
         ...
ce qui revient à interroger Google Images sur "champignon" sur les sites "http://perso.orange.fr/champyves", "http://francois.nagy.free.fr", "http://mycorance.free.fr"...
- lire le contenu des pages renvoyées par Google et en extraire la partie correspondant aux résultats
- consolider les résultats sur une page unique
- renvoyer à l'internaute la page "Google personnalisée" contenant les résultats issus des sites sélectionnés.

Le script php vous permet en outre de sélectionner vos propres sites préférés en cliquant ici : Google

La lecture du code de la page renvoyée par Google avec comme paramètres (transmis par la méthode post) un site $url2 et comme mot clé $q, ne pose pas de problème particulier :
$url2=$_POST['url2'];
$q=$_POST['q'];
$urlggle="http://www.google.com/search?q=site:".$url2."%20".$q;
$f=fopen($urlggle,"r");
$txt="";
while(!feof($f)){$txt=$txt.fread($f,5000);}
fclose($f);

La variable $txt contient le code (html) de la page retournée par Google. Il suffit de l'analyser par les fonctions de texte pour en tirer les informations souhaitées.
On peut par exemple supprimer tout ce qui se trouve au dessus de la table bleu pale (couleur #e5ecf9) qui précède les résultats, ainsi que la table en question :
$pos=strpos(strtolower($txt),strtolower('bgcolor=#e5ecf9'));
if($pos!==false)$txt=substr($txt,$pos,strlen($txt));
$pos=strpos(strtolower($txt),strtolower('</div></div></table>'));
if($pos!==false)$txt=substr($txt,$pos+strlen('</div></div></table>'),strlen($txt));

Reste à supprimer ce qui se trouve en dessous des résultats (partie centrée avec une balise <center>)
$pos=strpos(strtolower($txt),strtolower('<center>'));
if($pos!==false)$txt=substr($txt,0,$pos);

La variable $txt contient maintenant uniquement la liste des résultats.

En bouclant sur tous les sites sélectionnés, et en concaténant le contenu de toutes les variables $txt obtenues, on construit la liste des résultats de toutes les pages Google interrogées.
Il ne reste plus qu'à récupérer le début et la fin d'une page pour obtenir le résultat souhaité.
Sans oublier de rebaser tous les liens (notamment images et javascript) pour qu'ils pointent sur la source Google :
$txt=str_replace("<head>","<head><BASE HREF='http://www.google.com/'>");


Remarques :
- Cette vision est évidemment simplifiée, il faut encore cumuler les nombres de pages pour afficher le total, modifier les différents formulaires pour les faire pointer sur l'interface php, gérer la recherche d'images, le passage d'une page de résultats à une autre...
- Le système reste très vulnérable aux modifications que Google ne manquera pas d'apporter à son site.
- La technique ne prend pas en compte la hiérarchie entre les résultats issus d'un site par rapport à ceux des autres : les nièmes pages de résulats de chacun des sites sont simplement regroupées pour former la nième page de résultats consolidés.

Vous pouvez facilement créer vos propres Google personnalisés en recopiant dans une page html le code suivant (après l'avoir adapté à vos besoins, notamment en terme de choix de sites et de mots clés) :
<A HREF='#' onclick='fen=window["nfen"];if(!fen)fen=window.open("","nfen","width=780,height=580,toolbar=1,status=1,location=0,menubar=1,directories=1,resizable=1,scrollbars=1");frm7.target="nfen";frm7.submit()'>Excel</A>
<FORM NAME='frm7' ACTION='http://jacxl.free.fr/my_google.php' METHOD='post' TARGET='about:blank'>
<INPUT TYPE='hidden' NAME='q' VALUE='Excel'>
<INPUT TYPE='hidden' NAME='theme' VALUE='Excel'>
<INPUT TYPE='hidden' NAME='url1' value='http://jacxl.free.fr'>
<INPUT TYPE='hidden' NAME='url2' value='http://www.polykromy.com/'>
<INPUT TYPE='hidden' NAME='url3' value='http://www.excelabo.net'>
<INPUT TYPE='hidden' NAME='url4' value='http://xcell05.free.fr/'>
<INPUT TYPE='hidden' NAME='url5' value=''http://cherbe.free.fr''>
<INPUT TYPE='hidden' NAME='url6' value='http://frederic.sigonneau.free.fr/'>
</FORM>


liens :
Toute l'énergie
Mon Excel
Mes photos de champignons