Les robots
Lorsque vous soumettez votre site à un site de recherche, ce dernier va, après un temps variable, envoyer un de ses robots vous rendre visite. Si vous n' avez pas accès à des statistiques ou que vous ne possédez aucun logiciel de traitement de logs, il vous sera difficile de savoir si vous avez eu sa visite.
Le principe
Lorsqu' un robot passe sur votre site, il laisse une trace visible dans les logs. Cette trace est également visible depuis la page ASP qui est demandée par le robot. La variable serveur HTTP_USER_AGENT vous renseigne à ce sujet.
Avec un peu d' habitude, il n' est pas toujours facile de trouver la correspondance entre la signature et le site auquel appartient le robot. Après de nombreuses recherche, j' ai réussi à réunir une collection de signatures qui permet de reconnaître les principaux robots.
En rassemblant les informations de la variable HTTP_USER_AGENT et la liste des signature, il devient possible de créer une petite routine qui enregistre le passage de ce visiteur un peu spécial.
En examinant les signatures à ma disposition, j' ai constaté que la version du robot figurait régulièrement dans la signature. Comme les versions évoluent rapidement, il devient compliqué de tenir à jour une bibliothèque de signatures. C' est pourquoi, j' ai choisi de reconnaître les robots passants sur les pages en utilisant qu 'une seule partie de leur signature : celle qui me semblait être le moins sujet au changement.
L' enregistrement
Le fichier enregitre_robot.asp, qui est à inclure dans vos pages, se charge de mémoriser les visites.
<!--#include virtual="robot/enregitre_robot.asp" -->
Le code de ce dernier est :
<%
if Session("Enregistre")<>"oui" then
Session("Enregistre")="oui"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/WEBSERVER/henri-ruch.ch/database/robot.mdb")
ligne = request.ServerVariables("HTTP_USER_AGENT")
Set query = Conn.Execute("SELECT Index_Robots.* FROM Index_Robots where instr('"& ligne & "',Reconnaissance)>0")
If not query.EOF Then
id =cstr(query("N°"))
Conn.Execute("UPDATE Index_Robots SET visites=visites+1,Date_visite=now() WHERE N° ="& id)
Set query = Nothing
end if
Conn.close
set Conn=nothing
end if
%>
La variable session "enregistre" a comme fonction d' empêcher que le robot soit enregistré plusieurs fois dans la même session. Cette méthode n' est pas parfaite, car souvent les robots se connectent pages par page et ouvrent autant de sessions que de pages.
Si le robot n'a pas encore été enregistré, le programme va chercher sa signature dans la base de données. Comme expliqué plus haut, j' ai choisi de ne garder qu 'une partie de la signature du robot dans la base. La recherche doit donc être adaptée à ce choix. Il n' est pas possible de rechercher une égalité de signatures entre le visiteur et la base de données. Il faut rechercher dans la base la reconnaissance qui peut correspondre à la signature, en comparant le contenu des différentes chaînes:
SELECT Index_Robots.* FROM Index_Robots where instr('google',Reconnaissance)>0
Une fois la correspondance trouvée, il faut incrémenter les visites du robot.
L' affichage
Le fichier statistiques_robot.asp sert à afficher les visites.
<html>
<head>
<title>Visite des robots</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<h1>Visites par robots</h1>
<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/WEBSERVER/henri-ruch.ch/database/robot.mdb")
Set message = Server.CreateObject("ADODB.Recordset")
message.Open "SELECT sum(Visites) as NbVisites FROM Index_Robots", conn, 3, 3
response.write("Nombre de visites par des robots : "+cstr(message.fields("NbVisites")))
message.close
set message=nothing
%>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<th align="left" valign="top">Robots</th>
<th valign="top" align="center">Nombre</th>
<th valign="top" align="center">Date/heure</th>
</tr>
<%
Set message = Server.CreateObject("ADODB.Recordset")
message.Open "SELECT * FROM Index_Robots where visites>0 order by Visites desc ", conn, 3, 3
do while not message.eof
%>
<tr>
<td align="left" valign="top"> <%=message.fields("Nom")%> </td>
<td valign="top" align="left"> <%=message.fields("Visites")%> </td>
<td align="left" valign="top"> <%=message.fields("Date_visite")%> </td>
</tr>
<%
message.movenext
loop
message.close
set message=nothing
conn.close
set conn=nothing
%>
</table>
</body>
</html>
Final
La brique proposée peut fortement être améliorée. Deux voies me virement à l' esprit :
- mémoriser la date de visite du robot et ne l' enregistrer que si ce n' est pas le même jour.
- les voleurs d' adresse E-mail laissent les mêmes traces que les robots. Essayez de les reconnaître et de leurs cacher vos adresses E-mail.
Voir l'exemple
Source avec la base de données(ZIP)
|
 |
| Toutes les heures, le serveur contrôle que votre site est en ligne. En cas de problème, un mail vous est envoyé. |
 |
| Vous avez l'habitude d'oublier les dates importantes? Oubli vous prévient gratuitement par email ! |
|
|