Voici comment détecter et afficher (là où on veut) la liste des Robots qui visitent un Site Web. C'est assez trivial.
Tout le code n'est pas écrit mais l'essentiel y est... Il est possible de modifier le code selon ses désirs...
Il est écrit pour MySQL mais peut être adapté à tout autre gestionnaire de Base de Données.
Il faut avoir quelques notions de PHP et de SQL pour finaliser ce petit script.
1) Une Table de "Robots" comme celle en PPS à la fin de ce Post.
2) Un module de Détection (environ 10 lignes) :
- $T_stamp = (int) time() ; $UA_string = '';
- $res_bot = mysql_query("SELECT bot_string FROM robots ;") ;
- while ($bot = mysql_fetch_assoc($res_bot)) if (stristr(getenv('HTTP_USER_AGENT'),$bot['bot_string'])) {$UA_string = $bot['bot_string'] ; break} ;
- $res_bot = mysql_query("UPDATE robots SET time_stamp = $T_stamp WHERE bot_string = $UA_string") ;
- $res_bot = mysql_query("UPDATE robots SET time_stamp = 0 WHERE time_stamp <> 0 AND time_stamp <".($T_stamp - 300)." ;").
3) Un module d'Affichage compact (de 4 à 5 lignes) :
- $robots_string = ' '; (mettre 3 espaces - c'est impérativement requis) ;
- $res_bot = mysql_query("SELECT bot_alias FROM robots WHERE time_stamp > 0 ;") ;
- while ($bot = mysql_fetch_assoc($res_bot)) pour les concaténer dans $Robots_string.= $bot['bot_alias'].', ' ;
- Affichage (echo) de 'Robots : '.trim(substr($Robots_string,0,strlen($Robots_string) - 2)).
C'est à peu près tout !
Un peu bref pour en faire tout un plat...![]()
Alain AKA Arma
PS : Que ceux que cela intérresse s'amusent un peu, il suffit de le coder et d'y ajouter quelque fioriture...
Le Module de détection doit être appelé dans toutes les pages juste après connexion à la BDD.
Le Module d'affichage se met où on veut (après connexion BDD, bien évidemment).
Pour la MAJ de la table (pas souvent) --> Administration de la BDD !
PPS : La Table robots (liste des UA partiels à compléter et à trier à nouveau)
--
-- Structure de la table `robots`
--
CREATE TABLE IF NOT EXISTS `robots` (
`bot_string` varchar(50) NOT NULL default '',
`bot_alias` varchar(50) NOT NULL default '',
`time_stamp` int(10) NOT NULL default '0',
PRIMARY KEY (`bot_string`),
KEY `bot_alias` (`bot_alias`),
KEY `time_stamp` (`time_stamp`)
);
--
-- Contenu de la table `robots`
--
INSERT INTO `robots` (`bot_alias`, `bot_string`, `time_stamp`) VALUES
('Abacho', 'abacho', 0),
('Adifco', 'adibot', 0),
('AESOP', 'spiderman', 0),
('AlbertBot', 'albertbot', 0),
('All The Web', 'fast', 0),
('All The Web', 'overture', 0),
('Alpavista', 'alpavista', 0),
('Alta Vista', 'mercator', 0),
('Alta Vista', 'scooter', 0),
('AltaVista', 'altavista', 0),
('Amazon.com', 'aranhabot', 0),
('Amfibi', 'amfibi', 0),
('Amidalla', 'amibot', 0),
('Anthill', 'anthill', 0),
('AntiSearch', 'antibot', 0),
('Aquiseeker', 'aquiseeker', 0),
('Arks', 'arks', 0),
('Ask', 'ask', 0),
('AtomZ', 'atom', 0),
('Attentio', 'attentio', 0),
('AWeb-Amiga', 'amiga-aweb', 0),
('Baidu', 'baiduspider', 0),
('Bing', 'msnbot', 0),
('BitMagic', 'bitmagic', 0),
('Biz360', 'biz360', 0),
('Blekko', 'blekko', 0),
('BnF', 'bnf.fr_bot', 0),
('BSpider', 'bspider', 0),
('BuscaPique', 'busca', 0),
('Cassandra', 'cassandra', 0),
('CCBot', 'ccbot', 0),
('CityReview', 'cityreview', 0),
('Clush', 'clushbot', 0),
('Comodo', 'comodo', 0),
('CPAN', 'lwp-trivial', 0),
('Cuill', 'twiceler', 0),
('Cydral', 'cydralspider', 0),
('Daum', 'daum', 0),
('DeepIndex', 'deepindex', 0),
('Dillo', 'Dillo', 0),
('Dir.com', 'pompos', 0),
('Ditto', 'dittospider', 0),
('DMOZ', 'tagword', 0),
('DNA', 'dnabot', 0),
('DomNutch', 'domnutch', 0),
('Dot', 'dotbot', 0),
('Ecxi', 'ecxi', 0),
('Enigma', 'enigmabot', 0),
('EntireWeb', 'speedy', 0),
('Envolk', 'envolk', 0),
('Eurip', 'euripbot', 0),
('Euroseek', 'arachnoidea', 0),
('Exact Seek', 'exactseek', 0),
('ExaLead', 'exabot', 0),
('Excite', 'architextspider', 0),
('Fast Search', 'fastbot', 0),
('Fast Web Crawler', 'fast-webcrawler', 0),
('FineSearch', 'finebot', 0),
('FreeCrawl', 'freecrawl', 0),
('Gais', 'gaisbot', 0),
('Gecko', 'geckobot', 0),
('GeoHasher', 'geohasher', 0),
('Geona', 'geonabot', 0),
('GigaBlast', 'gigabot', 0),
('GlobalSpec', 'ocelli', 0),
('Google', 'googlebot', 0),
('Google AD-Sense', 'mediapartners', 0),
('Google AD-Words', 'adsbot', 0),
('Google Feedfetcher', 'feedfetcher', 0),
('Graal', 'gralon', 0),
('Heritrix', 'heritrix', 0),
('HomerWeb', 'homerbot', 0),
('Hoppa', 'toutatis', 0),
('HotBot', 'hotbot', 0),
('HTML Index Search', 'aitcsrobot', 0),
('IBM', 'almaden', 0),
('Ichiro', 'ichiro', 1296357313),
('InfoSeek', 'sidewinder', 0),
('InfoSeek', 'ultraseek', 0),
('Inktomi', 'inktomi', 0),
('Internet Archive', 'ia_archiver', 0),
('InternetSeer', 'internetseer', 0),
('IRL-Crawler', 'irlbot', 0),
('Isidorus', 'isidorus', 0),
('IxQuick', 'ixquick', 0),
('Jyxo', 'jyxobot', 0),
('KmcCrew', 'kmccrew', 0),
('KumKie', 'kumkie', 0),
('Larbin', 'larbin', 0),
('Legs', 'legs', 0),
('LexiBot', 'lexibot', 0),
('Lexis-Nexis', 'spiderguy', 0),
('Lexxe', 'lexxebot', 0),
('LibertyW', 'libertyw', 0),
('LinkChecker', 'linkchecker', 0),
('LookSmart', 'grub', 0),
('LookSmart', 'mantraagent', 0),
('LookSmart', 'martini', 0),
('Lycos', 'lycos', 0),
('Lycos', 't-rex', 0),
('Lycos', 'vachercher', 0),
('Magellan', 'wobot', 0),
('Magpie', 'magpie', 0),
('Majestic-12', 'mj12bot', 0),
('MaMa', 'casper', 0),
('MegaGlobe', 'megabot', 0),
('MetaDataLabs', 'mlbot', 0),
('Microsoft', 'sandcrawler', 0),
('Microsoft Research', 'msrbot', 0),
('Mirago', 'henrilerobotmirago', 0),
('Mirago', 'henrythemiragorobot', 0),
('Miva', 'findwhat', 0),
('Miva / FindWhat', 'miva', 0),
('MSN Media', 'msnbot-media', 0),
('Naver', 'dumrobo', 0),
('Naver', 'naverbot', 0),
('Naver', 'dloader', 0),
('NetCraft', 'netcraft', 0),
('NetVibes', 'netvibes', 0),
('Nomad', 'nomad', 0),
('NorthernLight', 'gulliver', 0),
('Nutch', 'nutch', 0),
('OpenFind', 'openbot', 0),
('OpenWeb', 'openwebspider', 0),
('Orange', 'orangebot', 0),
('PanelBot', 'panelbot', 0),
('PatSearch', 'patwebbot', 0),
('PeerBot', 'peerbot', 0),
('Pico Search', 'picosearch', 0),
('PicSearch', 'psbot', 0),
('Pipeline Search', 'pipeliner', 0),
('Powermarks', 'powermarks', 0),
('PureBot', 'purebot', 0),
('Sapo', 'sapo', 0),
('SBIder', 'sbider', 0),
('ScanSoft', 'imspider', 0),
('ScoutJet', 'scoutjet', 0),
('Scrub the Web', 'scrubby', 0),
('Scylla', 'scilla.pl', 0),
('Search Hippo', 'fluffy', 0),
('SearchSpider', 'searchspider', 0),
('SEO Engine', 'seoengbot', 0),
('SightQuest', 'sightquest', 0),
('SimplePie', 'simplepie', 0),
('SingingFish', 'asterias', 0),
('Site Spider', 'sitespider', 0),
('Sledink', 'sledink', 0),
('Sleipnir', 'sleipnir', 0),
('Slider', 'slik', 0),
('SlySearch', 'slysearch', 0),
('Snap.com', 'snapbot', 0),
('Snoopy', 'snoopy', 0),
('Sogou Spider', 'sogou', 0),
('Solomono', 'solomono', 0),
('Soso', 'sosospider', 0),
('SpiderKU', 'spiderku', 0),
('Suchtop-Bot', 'suchtop-bot', 0),
('Summify', 'summify', 0),
('Swooglebot', 'swoogle', 0),
('Sygol', 'sygol', 0),
('Synomia', 'synobot', 0),
('Szukacz', 'szukacz', 0),
('Taco Bell', 'taco', 0),
('Teoma', 'teoma', 0),
('Teoma', 'directhit', 0),
('Tide', 'tide', 0),
('TinEye', 'tineye', 0),
('Titan', 'titan', 0),
('Tovero', 'tovero', 0),
('Twenga', 'twengabot', 0),
('Ubi', 'ubicrawler', 0),
('UnderScore', 'underscorebot', 0),
('Utse', 'utse', 0),
('VertiCrawl', 'verticrawl', 0),
('Voila', 'voila', 0),
('Voila', 'echo', 0),
('Voyager', 'amiga', 0),
('Voyager', 'voyager', 0),
('W3Mir', 'w3mir', 0),
('Walhello', 'appie', 0),
('Wasa', 'wasabot', 0),
('Web Archive', 'archive.org_bot', 0),
('Web Core', 'root', 0),
('Webwasher', 'sitewinder', 0),
('WGet', 'wget', 0),
('WhatUseek', 'winona', 0),
('WhoIs', 'surveybot', 0),
('Wikia', 'wikia', 0),
('Wikiwix', 'wikiwix', 0),
('Willow', 'willow', 0),
('WiseGuys', 'vagabondo', 0),
('WiseNut', 'wisenut', 0),
('WiseNut', 'zyborg', 0),
('Yacy', 'yacy', 0),
('Yahoo!', 'yahooseeker', 0),
('Yahoo!', 'slurp', 0),
('Yandex', 'yandex', 0),
('Yauba', 'yaub', 0),
('Yell', 'yellspider', 0),
('Yeti', 'yeti', 0),
('Zao', 'zao', 0),
('Zeal', 'zealbot', 0),
('Zibber', 'zibber', 0),
('Zibie', 'zibie', 0),
('Zoom', 'zoomspider', 0);Dernière modification par Crazy (25/02/2011 09:20:01)
Hors ligne
Et voici le petit code PHP pour effectuer rapidement le travail !
1) La détection :
Code :
<?php // --- DETECTION (sur chaque page d'un site) --- $userAgent = strtolower(getenv('HTTP_USER_AGENT')); $res = mysql_query('SELECT * FROM robots'); while ($bot = mysql_fetch_assoc($res)) if(strstr($userAgent,$bot['bot_string'])) mysql_query('UPDATE robots SET time_stamp = '.time().' WHERE bot_string = \''.$bot['bot_string'].'\''); ?>2) L'affichage :
Code :
<?php // --- AFFICHAGE (sur une seule page du site) --- $res = mysql_query('SELECT DISTINCT bot_alias FROM robots WHERE time_stamp >= '.(time() - 180).' ORDER BY bot_alias'); // latence de 3 minutes while ($result = mysql_fetch_assoc($res)) $bots[] = $result['bot_alias']; if ($bots) echo '<br /><small><b>'.count($bots).'</b> Moteur'.((count($bots) > 1) ? 's' : '').' de Recherche détecté'.((count($bots) > 1) ? 's ' : ' ').implode(', ',$bots).'</small>'."\n"; ?>
La méthode est legèrement différente de celle développée dans le post précédent.
Cependant elle est plutôt rapide et très efficace !
C'est court mais bon...
...![]()
Alain AKA Arma
PS : A voir sur --> http://annuaire.cigiema.fr (tout en bas de la page d'accueil) ![]()
Le Script utilisé est un peu plus compliqué car en deux langues : Français et Anglais.
Hors ligne
Voici, pour info, une partie du Script du Footer de l'Annuaire Cigiema (valable pour les VXRxx et V10Rxx) :
<?php
// recuperation du repertoire origine de l'annuaire
$repertoire = explode("/", $_SERVER["PHP_SELF"]);
$racine_annuaire = '/'.$repertoire[1];
if ($racine_annuaire == $_SERVER["PHP_SELF"]) $racine_annuaire = '';
// recuperation du nom du fichier appelant actif
$repertoire = explode("/", $_SERVER["PHP_SELF"]);
$page_courante = $repertoire[count($repertoire) - 1];
// Il y a d'autres choses ICI (Stats Google Analytics)
echo '<center>'."\n";
echo '<hr />'."\n";
if ($lang == 'fr') echo '<small>Cet annuaire décline toute responsabilité quant au contenu des sites répertoriés dans sa Base de Données.<br />Si vous estimez que l\'un des sites présents dans cet annuaire contrevient à la loi, merci de nous en aviser par mail.</small>'."\n";
else echo '<small>This directory declines any responsibility as for the contents of the websites recorded in its Database.<br />In the case you consider that one of the referenced websites is not in accordance with the law, please notify us by mail.</small>'."\n";
echo '<hr />';
// ------------------------------------------------------------------------------------------------------------------
$userAgent = strtolower(getenv('HTTP_USER_AGENT'));
$decomp = preg_split( '/[.]+/',$_SERVER['REMOTE_ADDR']);
$ipnum = (double) (16777216*$decomp[0] + 65536*$decomp[1] + 256*$decomp[2] + $decomp[3]);
$res = mysql_fetch_array(mysql_query('SELECT * FROM countries WHERE '.$ipnum.' >= begin_num AND '.$ipnum.' <= end_num LIMIT 1'),MYSQL_ASSOC);
$country = $res['country'];
$res = mysql_query('SELECT * FROM bots');
while ($bot = mysql_fetch_assoc($res)) if(strstr($userAgent,$bot['bot_string'])) mysql_query('UPDATE bots SET time_stamp = '.time().' WHERE bot_string = \''.$bot['bot_string'].'\'');
// ------------------------------------------------------------------------------------------------------------------
$res = mysql_fetch_array(mysql_query('SELECT COUNT(*) AS nbre_connect FROM connect WHERE ip=\''.$_SERVER['REMOTE_ADDR'].'\''));
if ($res['nbre_connect'] == 0) mysql_query('INSERT INTO connect VALUES(\''.$_SERVER['REMOTE_ADDR'].'\', '.time().', \''.$lang.'\', \''.$country.'\')');
else mysql_query('UPDATE connect SET timestamp = '.time().', lang=\''.$lang.'\' WHERE ip=\''.$_SERVER['REMOTE_ADDR'].'\'');
mysql_query('DELETE FROM connect WHERE timestamp <= '.(time() - 180)); // Latence 3 minutes
if ($_SERVER['PHP_SELF'] == $racine_annuaire.'/index.php')
{
$res = mysql_fetch_array(mysql_query('SELECT COUNT(*) AS nbre_connect FROM connect'));
if ($lang == 'fr') echo 'A cet instant : <b>'.$res['nbre_connect'].' visiteur'.(($res['nbre_connect'] > 1) ? 's' : '').'</b> sur ';
else echo 'At this time: <b>'.$res['nbre_connect'].' visitor'.(($res['nbre_connect'] > 1) ? 's' : '').'</b> connected on ';
echo $_SERVER['SERVER_NAME']."\n";
$res1 = mysql_fetch_array(mysql_query('SELECT COUNT(*) AS nbre_FR FROM connect WHERE lang=\'fr\''));
$res2 = mysql_fetch_array(mysql_query('SELECT COUNT(*) AS nbre_EN FROM connect WHERE lang=\'en\''));
echo ' <small>(<b>'.$res1['nbre_FR'].' FR</b> / <b>'.$res2['nbre_EN'].' EN</b>)</small>'."\n";
$res = mysql_query('SELECT COUNT(*) AS nb_by_lang, country, lang FROM connect GROUP BY country, lang ORDER BY country, lang');
while ($result = mysql_fetch_array($res,MYSQL_ASSOC))
{
if ($result['country'] == 'United States') $result['country'] .= ' / AOL';
elseif (!$result['country']) $result['country'] = 'Unknown';
$countries[] = $result['country'].' ('.$result['nb_by_lang'].' '.strtoupper($result['lang']).')';
}
sort($countries);
if ($lang == 'fr') echo '<br /><small>Provenant de : ';
else echo '<br /><small>From: ';
echo implode(', ',$countries).'</small>'."\n";
// --- Robots ---
$res = mysql_query('SELECT DISTINCT bot_alias FROM bots WHERE time_stamp >= '.(time() - 180).' ORDER BY bot_alias');
while ($result = mysql_fetch_assoc($res)) $bots[] = $result['bot_alias'];
if ($bots) echo '<br />'."\n".'<small><b>'.count($bots).'</b> '.(($lang == 'fr') ? 'Moteur'.((count($bots) > 1) ? 's' : '').' de Recherche détecté' : 'active Search Engine').((count($bots) > 1) ? 's' : '').(($lang == 'fr') ? ' :' : ':').' '.implode(', ',$bots).'</small>'."\n";
// --------------
echo '<hr />'."\n";
}
echo '</center>'."\n";
// Il y a d'autres choses Ici (Copyright, IDDN, Xiti, Contact)
?>Il utilise aussi la fonction de détection des pays des visiteurs (nécessite les tables connect et countries)...
Celle-ci est décrite dans un autre Topic --> Détecter le Pays d'un visiteur avec son IP.
ATTENTION : Dans ce code, la table robots est appelée bots ![]()
Bien entendu, tout cela n'a d'intérêt que pour le Webmaster qui veut avoir une idée de ses visites en temps réel.
En ce qui concerne le Visiteur "lambda", il est vraisemblable que cela ne l'interesse pas au plus haut point ![]()
Toutefois, l'affichage des Robots qui visitent l'Annuaire peut être un "plus" pour le Référenceur qui a soumis un Site !![]()
Alain AKA Arma
PS : Pour utiliser en FR ajouter $lang = 'fr' en début du code sinon, ce sera en EN ![]()
Hors ligne
|
© 2006-2012 / A. G.☺ CiGi€M@®, 1997-2012 |
|
Reproduction totale ou partielle strictement interdite Contact : / |