Analyse du besoin
Lorsque l'on développe des sites Web, on y implante souvent des marqueurs de contenus afin de suivre, par exemple, l'audience de visites de ce dernier. Seulement, la suivi d'audience est nécessaire en production, alors qu'il ne l'est pas en développement, sous peine de fausser les statistiques. Même si certains outils d'analyse permettent d'ignorer le trafic depuis une source donnée (IP), il peut être plus prudent de s'en assurer par le non affichage du marquage. En plus de cela, je voulais m'assurer que le peu de visites qui s'effectuaient sur mon site et qui remontent dans mon outil d'analyse d'audience soient bien des visites d'internautes et pas de moteurs de recherche ou autre application utilisée. J'ai donc développé cette extension afin de me permettre de contextualiser l'affichage du marqueur de contenu en fonction du visiteur en cours (IP + signature du navigateur).
Alors que ce premier besoin était rempli, l'extension peut tout simplement servir à :
- récupérer l'IP et la signature du navigateur dans un template d'email envoyé
- exécuter du code en fonction de si le visiteur en cours est un "bot" ou non
- etc
Configuration PHP requise
Cette extension ne requière aucune configuration PHP particulière.
Structure du développement
Cette extension contient :
- des opérateurs de template : les opérateurs de template disponibles sont get_ip(), get_browser_name() et is_bot().
- des settings :
- bots.ini : liste des adresses IP des visiteurs devant être identifiés comme des "bots" (principalement des IP propres, identifiées clairement et en faible nombre)
- botsipfromlogs.ini : liste des les adresses IP extraites depuis les logs apache et correspondant à des IP de robots de moteurs de recherche
- detectbots.ini : configuration principale de l'extension.
- site.ini : déclare l'extension comme détentrice d'opérateurs de template
Configurations possibles
La configuration se passe principalement dans le fichier detectbots.ini. Voici en détail son contenu :
#Liste des adresses ip (personnelles, pro, etc) pour lesquelles il ne faut pas afficher le marquage xiti
#L'IP peut ne contenir que le début afin de bloquer les sous-IP
[Specifics]
HideForIPs[]
HideForIPs[127.0.0.1]=127.0.0.1
HideForIPs[127.0.0.0]=127.0.0.0
#Liste des fichiers depuis lesquels chargés les adresses IP à bloquer
BotsIPFiles[]
BotsIPFiles[]=botsip.ini
BotsIPFiles[]=botsipfromlogs.ini
#Liste des navigateurs bots/non bot
[Browsers]
#Liste des expression présentes dans le nom du navigateur indiquant que ce n'est pas un bot
NotContains[]
NotContains[]=eZ Publish static cache generator
#Liste des expression présentes dans le nom du navigateur indiquant que c'est un bot
Contains[]
Contains[]=Google Web Preview
Contains[]=www.radian6.com/crawler
Contains[]=Googlebot
Contains[]=Jyxobot
Contains[]=VoilaBot
Contains[]=YandexBot
Contains[]=YandexImages
Contains[]=msnbot-media
Contains[]=Googlebot-Image
Contains[]=bingbot
Contains[]=MJ12bot
Contains[]=NerdByNature.Bot
Contains[]=ABACHOBot
Contains[]=Accoona-AI-Agent
Contains[]=AddSugarSpiderBot
Contains[]=AnyApexBot
Contains[]=Arachmo
Contains[]=B-l-i-t-z-B-O-T
Contains[]=Baiduspider
Contains[]=BecomeBot
Contains[]=BeslistBot
Contains[]=BillyBobBot
Contains[]=Bimbot
Contains[]=Bingbot
Contains[]=BlitzBOT
Contains[]=boitho.com-dc
Contains[]=boitho.com-robot
Contains[]=btbot
Contains[]=CatchBot
Contains[]=Cerberian Drtrs
Contains[]=Charlotte
Contains[]=ConveraCrawler
Contains[]=cosmos
Contains[]=Covario IDS
Contains[]=DataparkSearch
Contains[]=DiamondBot
Contains[]=Discobot
Contains[]=Dotbot
Contains[]=EARTHCOM.info
Contains[]=EmeraldShield.com WebBot
Contains[]=envolk[ITS]spider
Contains[]=EsperanzaBot
Contains[]=Exabot
Contains[]=Ezooms
Contains[]=FAST Enterprise Crawler
Contains[]=FAST-WebCrawler
Contains[]=facebookexternalhit
Contains[]=FDSE robot
Contains[]=FindLinks
Contains[]=FurlBot
Contains[]=FyberSpider
Contains[]=g2crawler
Contains[]=Gaisbot
Contains[]=GalaxyBot
Contains[]=genieBot
Contains[]=Gigabot
Contains[]=Girafabot
Contains[]=Googlebot
Contains[]=Googlebot-Image
Contains[]=GurujiBot
Contains[]=HappyFunBot
Contains[]=hl_ftien_spider
Contains[]=Holmes
Contains[]=htdig
Contains[]=iaskspider
Contains[]=ia_archiver
Contains[]=iCCrawler
Contains[]=ichiro
Contains[]=igdeSpyder
Contains[]=IRLbot
Contains[]=IssueCrawler
Contains[]=Jaxified Bot
Contains[]=Jyxobot
Contains[]=KoepaBot
Contains[]=L.webis
Contains[]=LapozzBot
Contains[]=Larbin
Contains[]=LDSpider
Contains[]=LexxeBot
Contains[]=Linguee Bot
Contains[]=LinkWalker
Contains[]=lmspider
Contains[]=lwp-trivial
Contains[]=mabontland
Contains[]=magpie-crawler
Contains[]=Mediapartners-Google
Contains[]=MJ12bot
Contains[]=MLBot
Contains[]=Mnogosearch
Contains[]=mogimogi
Contains[]=MojeekBot
Contains[]=Moreoverbot
Contains[]=Morning Paper
Contains[]=msnbot
Contains[]=MSRBot
Contains[]=MVAClient
Contains[]=mxbot
Contains[]=NetResearchServer
Contains[]=NetSeer Crawler
Contains[]=NewsGator
Contains[]=NG-Search
Contains[]=nicebot
Contains[]=noxtrumbot
Contains[]=Nusearch Spider
Contains[]=NutchCVS
Contains[]=Nymesis
Contains[]=obot
Contains[]=oegp
Contains[]=omgilibot
Contains[]=OmniExplorer_Bot
Contains[]=OOZBOT
Contains[]=Orbiter
Contains[]=PageBitesHyperBot
Contains[]=Peew
Contains[]=polybot
Contains[]=Pompos
Contains[]=PostPost
Contains[]=Psbot
Contains[]=PycURL
Contains[]=Qseero
Contains[]=R6_CommentReader
Contains[]=Radian6
Contains[]=RAMPyBot
Contains[]=RufusBot
Contains[]=SandCrawler
Contains[]=SBIder
Contains[]=ScoutJet
Contains[]=Scrubby
Contains[]=SearchSight
Contains[]=Seekbot
Contains[]=semanticdiscovery
Contains[]=Sensis Web Crawler
Contains[]=SEOChat::Bot
Contains[]=SeznamBot
Contains[]=Shim-Crawler
Contains[]=ShopWiki
Contains[]=Shoula robot
Contains[]=silk
Contains[]=Sitebot
Contains[]=SiteBot
Contains[]=Snappy
Contains[]=sogou spider
Contains[]=Sogou web spider
Contains[]=Sosospider
Contains[]=Speedy Spider
Contains[]=Spinn3r
Contains[]=Sqworm
Contains[]=StackRambler
Contains[]=suggybot
Contains[]=SurveyBot
Contains[]=SynooBot
Contains[]=Teoma
Contains[]=TerrawizBot
Contains[]=TheSuBot
Contains[]=Thumbnail.CZ robot
Contains[]=TinEye
Contains[]=truwoGPS
Contains[]=TurnitinBot
Contains[]=TweetedTimes Bot
Contains[]=TwengaBot
Contains[]=updated
Contains[]=Urlfilebot
Contains[]=Vagabondo
Contains[]=VoilaBot
Contains[]=Vortex
Contains[]=voyager
Contains[]=VYU2
Contains[]=webcollage
Contains[]=Websquash.com
Contains[]=wf84
Contains[]=WoFindeIch Robot
Contains[]=WomlpeFactory
Contains[]=Xaldon_WebSpider
Contains[]=Xenu Link Sleuth
Contains[]=yacy
Contains[]=Yahoo! Slurp
Contains[]=Yahoo! Slurp China
Contains[]=YahooSeeker
Contains[]=YahooSeeker-Testing
Contains[]=YandexBot
Contains[]=YandexImages
Contains[]=YandexMetrika
Contains[]=Yasaklibot
Contains[]=Yeti
Contains[]=YodaoBot
Contains[]=yoogliFetchAgent
Contains[]=YoudaoBot
Contains[]=Zao
Contains[]=Zealbot
Contains[]=zspider
Contains[]=ZyBorg
Utilisation de l'extension
Afin d'activer cette extension, il vous suffit de :
- rajouter l'extension mddetectbots dans la liste des extensions chargées par votre siteaccess
- régénérer l'autoload des classes : bin/php/ezpgenerateautoloads.php -e
- faire appel à l'un des opérateur de template et d'en afficher le résultat
- vérifier que l'extension fonctionne :
- l'extension défini des balises meta, mais tout dépend de votre méthode pour générer le contenu de la balise head de votre site
- l'appel à get_ip() retourne votre adresse IP
- l'appel à get_broser_name() retourne la signature de votre navigateur web
- l'appel à is_bot() retourne 1 si vous avez ajouté votre adresse IP à la liste des IP identifiées comme un "bot"
Pour information, ce site utilise cette extension, vous pouvez donc vous rendre compte du résultat.
Axes d'améliorations/évolutions
Si vous pensez à d'autres améliorations et évolutions, n'hésitez pas à m'en faire sur la page projet de la plateforme de votre choix dans les ressources listées ci-dessous.