Je m'appelle Stéphane Roux. Un nom et un prénom trés courant. Trop. Il y a beaucoup de Stéphane Roux sur internet. Même si cela ne m'obsède pas, j'aime bien voir si je suis un des Stéphane Roux les plus présents sur internet. Pour cela il suffit de me rechercher sur Google et de regarder si mes sites apparaîssent. Apparement, je suis heureusement le seul Stéphane Roux à utiliser comme alias général Habett. Habett apparaît dans mes URLs donc je dois pouvoir surveiller cela facilement.
La requête http://www.google.com/search?q=stephane%20roux donne le résultat mais le fonctionnement interne de Google fait que des sites apparaîssent, disparaîssent et surtout que leur rang dans l'ordre d'apparition des résultats est variable dans le temps. Les sites présumés les plus pertinents apparaîssent en premier selon leur Google Rank qui est un indice interne à Google dont la formule est secrête.
Mon idée est de mettre en place un programme sur surveillance ou de veille de mon placement sur Google.
Google n'est pas un site comme les autres, vous le savez bien, et une de ses particularités est de refuser la visite de robots en mode standard, type LWP. Allez voir leur fichier robots.txt pour les détails. Pour accéder au contenu de Google, il faut passer par une API en XML. Cela complique un peu la tâche mais ce n'est pas insurmontable si vous disposez du module SOAP::Lite avec toutes ses dépendances qui sont nombreuses.
Si vous passez outre l'API et que vous faîtes des requêtes directes, vous risquez d'être mis sur le liste noire ce qui peut être une situation trés préjudiciable à éviter à tout prix. L'accès à l'API est gratuit et ne nécessite qu'un simple enregistrement. Une fois que vous avez votre clé développeur et votre kit, l'utilisation personnelle est libre et vous disposez d'un quota de 1000 requêtes par jour.
Voici mon petit programe de monitoring. Vous placez votre clé développeur à l'endroit indiqué et vous mettez dans le même répertoire le fichier GoogleSearch.wsdl issu du kit.
#!/usr/local/bin/perl -w
# My GoogleDance monitor
$google_key='COPIEZ VOTRE CLE DEVELOPPEUR ICI';
use SOAP::Lite;
$google_search = SOAP::Lite->service("file:GoogleSearch.wsdl");
# La requête
$results = $google_search->doGoogleSearch($google_key, "stephane roux",
0, 10, "false", "", "false", "", "latin1", "latin1");
@{$results->{resultElements}} or exit;
# Boucle dans les résultats
$rank=0;
foreach my $result (@{$results->{resultElements}}) {
$rank++;
$org = $rank if (($result->{URL} =~ /habett\.org/i) and !($org));
$com = $rank if (($result->{URL} =~ /habett\.com/i) and !($com));
}
# calcul de la date pour le log
my @date = localtime;
$today = sprintf "%04d%03d", $date[5]+1900, $date[7];
# écriture du fichier log
open (LOG,">>dance.log");
print LOG "$today $org $com\n";
close (LOG);
exit(0);
Cela génère un fichier texte de log du genre :
2004278 4 1
Notez bien au passage que la requête est limitée à 10 résultats. Dans notre exemple nous prenons les 10 premiers résultats car c'est ce qui nous intéresse mais si la Google Dance que vous voulez monitorer est plus large alors vous devez répéter la requête autant de fois que nécessaire en incrémentant à chaque fois de 10 le troisième paramètre.
Utilisez le planificateur de tâches ou un cron tab pour éxécuter ce programme tous les jours et laissez le faire pendant quelque temps avant de passer à la suite.
Nous utilisons l'interface GD à partir du module perl du même nom pour générer un graphique simple des résultats, une ligne pour chacun des sites, de couleurs différentes.
#!/usr/local/bin/perl -w
# My GoogleDance grapher
use GD;
# initialisation des objets GD
$graph = new GD::Image(600,220);
$white = $graph->colorAllocate(255,255,255);
$corg = $graph->colorAllocate(0,0,0);
$ccom = $graph->colorAllocate(153,204,153);
$red = $graph->colorAllocate(255,0,0);
$graph->transparent($white);
$graph->interlaced('true');
# lecture du fichier log
open (LOG,"< dance.log");
while ($line = <LOG>) {
chomp ($line);
($_,$dotorg,$dotcom) = split (/\s/,$line);
push (@org,$dotorg);
push (@com,$dotcom);
}
close (LOG);
# génération de l'image de la ligne pour chacun des sites
$width = 600 / (scalar @org - 1);
for ($i = 2; $i <= scalar @org; $i++) {
$graph-<line(($i-2)*$width,220-$org[$i-2]*20,($i-1)*$width,220-$org[$i-1]*20,$corg);
}
for ($i = 2; $i <= scalar @com; $i++) {
$graph-<line(($i-2)*$width,220-$com[$i-2]*20,($i-1)*$width,220-$com[$i-1]*20,$ccom);
}
# ligne de base
$graph-<line(0,201,600,201,$red);
# sauvegarde de l'image
open (IMAGE, "< dance.png");
binmode IMAGE;
print IMAGE $graph-<png;
close (IMAGE);
exit(0);
