Statisticator 2.0 : Le retour de la mission
Par Petaramesh le lundi 18 décembre 2006, 15:21 - Informatique non-duelle - Lien permanent
Depuis que j'étais passé de DotClear 1.2.5 à DotClear 2.0ß3.1 au début du mois, j'étais bien malheureux de ne plus avoir aucune statistique de fréquentation de cet humble ashram. Non pas que je passe mes journées le nez dans mes statistiques pour flatter mon ego, mais il est tout de même intéressant de savoir d'où proviennent les visiteurs qui arrivent, ou d'observer les pics qui se produisent - ou non - en réaction à tel ou tel billet plus intéressant ou plus polémique que la moyenne.
Bref, je n'avais plus de statistiques, et je ne voulais pas non plus recourir à des serveurs de statistiques externes, pour diverses raisons d'ordre philosophique, incluant le respect de la vie privée de mes visiteurs (ne pas faire tracer par un tiers-site commercial leur passage chez moi).
Bref, j'ai aujourd'hui remis en oeuvre divers systèmes de stats, et ce billet a pour but de faire un peu le point sur le sujet, pour ceux qui auraient le même problème avec leur DotClear 2.0ß (Aoraki) tout neuf...
Le premier point dont il faut être conscient dès lors qu'on va parler de systèmes de statistiques, c'est qu'on n'en trouvera jamais deux qui donneront les mêmes résultats, et souvent de très loin, tout simplement parce qu'ils ne fonctionnent pas de la même manière, et n'enregistrent fondamentalement pas les mêmes choses :
- Certains n'enregistreront que le comptage d'accès aux pages, tandis que d'autres auront la notion de "visites" (qu'ils gèreront cependant toujours différemment), voire même de "visiteurs uniques".
- Certains, pour fonctionner, auront besoin que le navigateur du visiteur accepte d'exécuter du Javascript, d'autres non. Les premiers ne pourront généralement pas compter les passages de robots, ou de navigateurs incapables d'exécuter du Javascript, ou configurés pour le refuser.
- Certains, pour reconnaître "visites" et "visiteurs", ont besoin de stocker un cookie dans le navigateur du visiteur ; ceci, là encore ne marchera pas avec tous les navigateurs, ni avec les robots.
- Certains sont capables de reconnaître les robots via leur USER-AGENT, et de les prendre en compte comme tels ; d'autres non.
- Etc, etc.
Il faut donc se dire à l'avance que, si l'on installe ou essaie plusieurs systèmes, et qu'ils ne donnent pas (et même pas du tout) les mêmes résultats, cela ne signifie pas qu'il y en a au moins un qui ne marche pas. Cela peut simplement signifier qu'ils fonctionnent très différemment.
Dès que je suis passé à DotClear 2.0ß, la première chose que j'ai installée, le plus simple, c'est un plugin compteur qui existe déja :
Le plugin Visites
Le plugin Visites est certainement l'outil de comptage le plus simple à installer sous DotClear 2.0ß, c'est aussi le plus rudimentaire.
Il ne sait afficher qu'un maximum de 3 compteurs différents, dont vous voyez un exemple ici dans la colonne de gauche - c'est moi qui ai installé la police de chiffres utilisée ici, et qui ne faisait pas partie du plugin original.
Ces compteurs enregistrent :
- Le nombre de pages vues
- Le nombre de "visites"
- Le nombre de "visiteurs uniques"
- Il utilise un cookie pour reconnaître les "visiteurs uniques", aussi cela ne marchera pas pour les robots et les navigateurs qui refusent les cookies.
Ce plugin s'installe dans DotClear 2.0ß comme un plugin ordinaire, et est mis en oeuvre via un "widget" que l'on dépose dans l'une des colonnes du blog. C'est tout.
Passons maintenant aux choses plus sérieuses : De véritables systèmes de statistiques.
BBClone
Je regrettais très-très fort que DotClear 2.0ß ne dispose pas encore d'un plugin BBClone, comme l'excellent plugin BBClone existant pour DotClear 1.x, mais évidemment non compatible.
BBClone est vraiment un outil sympathique, car il donne des informations suffisamment complètes pour être utiles, mais suffisamment simples et synthétiques pour tenir sur 2 ou 3 pages principales (Global / Détail / Graphique temporel), ce qui me suffit "presque complètement".
De plus, BBClone sait différencier les robots, indiquer les pays de provenance des visiteurs, et il ne recourt ni au Javascript ni aux cookies sur le navigateur du visiteur.
De ce point de vue, c'est pour moi un outil quasiment idéal.
Il conserve et met à jour, par contre, ses statistiques dans un fichier "plat" (flat-file) et non pas dans une véritable base de données, aussi je m'interroge tout de même sur son coût en matière de performances au fur et à mesure que ce fichier vient à grossir...
J'ai cependant réussi à installer et faire fonctionner BBClone 0.4.8b-UTF-8, en l'installant "normalement" en dehors de DotClear à partir de son archive d'origine, puis en le branchant sur DotClear de manière à en enregistrer les statistiques.
L'installation de BBClone 0.4.8b-UTF-8 proprement dite ne pose pas de problème particulier ; il suffit de suivre la documentation fournie. Le "branchement" sur DotClear, par contre, c'est une toute autre affaire, surtout pour la buse en PHP que je suis.
J'ai, à vrai dire, commencé par essayer d'écrire mon premier plugin DotClear, mais je n'y suis pas parvenu comme ça. Enfin, j'ai réussi à écrire un début de bout de plugin qui parvenait visiblement bien à appeler BBClone, mais celui-ci refusait cependant de fonctionner :
- Une tentative de le faire appeler dans
publicAfterDocumentne donnait absolument rien du tout ; rien ne montre que BBClone était effectivement appelé... ou pas. - Une tentative de le faire appeler dans
publicPrependl'appelait visiblement, mais il ne fonctionnait pas pour autant. - Une tentative de le définir comme template (
$core->tpl->addValue('BBClone',array('bbclone','bbc_count'));), puis de le faire appeler en pied de page depuis le_footer.htmldu thème, l'appelait visiblement, mais là aussi, il ne voulait pas marcher.
Pour les 2 derniers cas, si BBClone était appelé sans que le flag "$BBC_DEBUG" soit défini dans son fichier de config, il ne se passait rien de visible (aucun comptage).
Si par contre le flag "$BBC_DEBUG" était défini dans son fichier de config, alors BBClone balançait un fumant message d'erreur :
BBClone isn't able to read its configuration data. This is likely because you embedded BBClone's code snippet into a function. Please use BBClone as suggested in the documentation.
Il n'aimait donc pas être appelé depuis l'intérieur d'une fonction, quoique le message d'erreur par lequel il se plaignait de ne "pas pouvoir lire sa config" était vraiment à la con, puisqu'il prouvait par là-même qu'il avait bien lu le flag "$BBC_DEBUG" défini dans le fichier de config même qu'il se plaignait de ne pas pouvoir lire ! Va comprendre, Charles...
Bon, j'ai eu beau le tourner dans tous les sens, je n'ai pas trouvé de solution, alors j'ai fini par me contenter de bidouiller mon blog.php (qui correspond pour vous à index.php, j'ai simplement renommé le mien).
Voici, pour vos yeux ébahis, ce que j'ai rajouté au début de mon blog.php (et que vous pouvez quant à vous ajouter au début de votre index.php) :
if ( !ereg('^/(feed|wikibar)/', $HTTP_SERVER_VARS['PATH_INFO'])
and !ereg('^pf=', $HTTP_SERVER_VARS['QUERY_STRING']) ) {
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
}
- La regexp conditionnant le paragraphe, aux deux premières lignes, est là pour éviter de compter comme "visites" les appels de feed RSS ou Atom, et le chargement d'éléments de la Wikibar, etc, qui se font par appels récursifs de l'
index.php. - la ligne
define("_BBCLONE_DIR", "bbclone/");est très importante : Elle doit définir le chemin où est installé BBClone relativement au chemin du fichierindex.phplui-même. Ne commencez pas par un "/", sinon vous devrez indiquer le chemin physique complet sur le serveur, que vous ne connaissez pas forcément.
Voilà. Avec ce petit paragraphe dans index.php (enfin, chez moi, blog.php), cela fonctionne parfaitement. Enfin, du moins, cela compte des choses ;-)
J'ai quand même voulu essayer aussi un autre outil :
PHPmyVisites
Là aussi, comme pour BBClone, j'ai installé PHPmyVisites en dehors de DotClear 2.0ß, à partir de son site officiel, puis je me suis débrouillé pour le "brancher sur DotClear''".
PHPmyVisites ets un outil beaucoup plus complet (et complexe) que BBClone.
Il donne beaucoup plus d'informations diverses que BBClone, quoiqu'il ne semble pas capable de donner des informations détaillées par visiteur : "Quelles pages a visité tel de mes derniers visiteurs ?", alors que BBClone en est capable.
Parmis les principales caractéristiques que je retiens de PHPmyVisites en un premier coup d'oeil :
- Fonctionne par un bout de code Javascript à ajouter dans chaque page à tracer.
- Ne fonctionnera donc pas pour tracer les robots et les navigateurs sans Javascript
- Utilise une base de données MySQL : Sans doute plus adapté à des gros sites que BBClone (qui utilise des fichiers simples).
- Est prévu pour un fonctionnement multi-site et multi-utilisateurs, avec notion d'administrateur, etc.
- Donne des infos extrêmement complètes et des tas de graphiques.
- Est capable de générer un beau fichier PDF de vos statistiques !
- Est même capable de vous les envoyer quotidiennement par mail.
Pour effectuer l'appel de cette chose, j'ai simplement placé le bout de Javascript qui l'appelle dans le fichier "_footer.html" de mon thème :
- Recopier le
_footer.htmldu thèmedefaultdans le répertoire de mon propre thème - qui n'en avait pas, si votre thème en a déjà un, utilisez celui-là - Ajouter à la fin le code qui vous a été fourni lors l'installation de PHPmyVisites
- C'est tout.
Cette méthode garantit que seuls les véritables appels de pages seront comptabilisés, le code ne figurant que dans les pieds de pages, les appels récursifs d'éléments, ou les appels de flux RSS ne seront pas pris en compte. Hélas, les robots ne seront pas "vus" non plus, puisqu'ils n'exécutent pas le Javascript...
Conclusion (provisoire)
Update 17:58 :
J'écrivais initialement à la fin de ce billet
Dans l'état actuel des choses, aussi bien BBClone que PHPmyVisites semblent fonctionner chez moi, toutefois, ils donnent des résultats extrêmement, mais alors extrêmement différents, BBClone comptant considérablement plus de choses que PHPmyVisites ...
La différence de comptage était due au fait que BBClone comptait comme des appels de pages des éléments de la cuisine interne récursive de DotClear, notamment tous les éléments appelés avec un QUERY_STRING commençant par "?pf="[1].
J'ai donc après coup rajouté dans mon blog.php une deuxième ligne de test avec une regexp éliminant tous les appels comportant une QUERY_STRING commençant par ?pf=. Cela semble rendre les deux outils statistiques grandement plus en accord l'un avec l'autre, et la différence beaucoup plus faible qui persiste dans leur comptage semble cette fois décemment pouvoir être attribuée aux robots.
Si vous avez envie de voir comment se comportent ces deux outils, contactez-moi, et je pourrai - peut-être - vous prêter un login et un mot de passe vous permettant de jeter un oeil à mes stats.
Euh, juste une chose... : Je n'ai pas envie de les rendre "publiques", aussi je ne confierai un tel mot de passe qu'à mes "copains et copines de blog", aux gens que je connais bien, quoi. Si vous vous posez la question de savoir si vous en faites ou non partie, c'est que ce n'est probablement pas le cas ;-)
Sinon, n'hésitez pas à me demander le code magique pour regarder les stats de l'ashram ;-))
Notes
[1] D'autant plus bizarre que mon DotClear tourne en mode PATH_INFO et non pas QUERY_STRING...











Commentaires
Vu sur e-Bay : "Vends code d'accès aux stats de l'Ashram de Petaramesh, mise à prix 500 euros" ... qui a osé ? ?
Hello. Joli test.
J'étais arrivée à la même chose.
Mon seul problème est le suivant : mon BBClone ne compte que les visites de l'index (ou de blog.php pour toi), et ne sait pas reconnaître les pages vues par les visiteurs.
J'ai tenté d'appliquer le code aux différentes pages, via un widget texte, comme ça avait été indiqué sur le forum à un moment, mais ça n'a pas marché.
J'ai tenté l'ajout du code dans le footer puis dans le _head de mon thème... Mais rien n'y fait.
Ca ne compte que l'index et le nombre de pages rechargées sans me montrer le parcours...
Dommage.
Si tu as une solution, je suis preneuse.
@Odessa : Mon BBClone compte tout et sépare bien les différentes pages, sans que j'aie mis quoi que ce soit ailleurs que dans
blog.php.Par contre, mon DotClear tourne en mode "path_info" et non pas "query_string", c'est sans doute ce qui facilite les choses pour BBClone...
Ah ben t'es allé plus vite que moi dans les tests ... je voulais installer BBclone après mon retour de chez mes enfants. Comme je pars jeudi matin, j'ai pas trop le temps en ce moment.
Donc je suis ravie de tes tests qui vont me faire gagner un temps fou ... et dont je vais profiter bien sûr ... gnac gnac gnac.
N'empêche, c'est vrai que BBclone manque ...
PhpMyVisites est intéressant mais chez Free : DC = base PostGreSQL = pas de script en PHP avec base de données PgSQL
@VoirClerc : Je comprendrais sans doute mieux ce que tu veux dire si tu l'exprimais en style plus construit et moins télégraphique. Parce que là, je ne sais pas trop où tu veux en venir avec PostgreSQL. PhpMyVisites travaille avec MySQL, pas PostgreSQL, a priori. DotClear peut travailler avec les deux, et à la rigueur rien n'empêcherait d'avoir un DotClear travaillant avec PostgreSQL et un PhpMyVisites travaillant avec MySQL, pourquoi pas ?
Par ailleurs je ne sais pas ce que fait Free, mais je sais que tu ne l'exprimes pas suffisamment clairement pour que je puisse le comprendre.
...et si seuls les gens qui savent déjà comprennent, ça fait un peu juste ;-)
@Swâmi
VoirClerc veut dire que chez Free Dotclear 2 fonctionne uniquement avec une base de données PostgreSQL.
chui multilingue moi kècetukroi ! héhé
En fait j'ai installé un dotclear 2 chez Free et j'ai suivi le mode d'emploi d'Olivier qui précise ça tout simplement.
Au fait, pourquoi ne pas utiliser un script qui analyse les log de ton serveur ?
@Herve : J'ai déjà un vieux Webalizer qui tourne cronné dans un coin, mais mon Apache n'utilise qu'un fichier log unique (c'est configuré comme ça, je pourrais changer mais je ne l'ai pas fait...) qui mélange allègrement le "serveur principal" et les différents "serveurs virtuels" que j'héberge - et qui sont d'ailleurs bien plus gros en volume que le théoriquement "principal". Du coup mon outil stats-sur-logs me sort des stats archi-globales qui mélangent un peu tout. Pas inutile comme point de vue, à l'occasion, mais finalement de petits outils stats spécifiques comme BBClone ou PHPmyVisites sont un excellent complément, plus ciblé sur un site donné.
En plus, le défaut d'un outil sur logs, c'est que le moindre chargement d'une image est mentionné en statistiques, pour l'éviter et ne garder que les vraies "pages", la config est un peu chiante à faire - mais je l'ai faite, quoi qu'il en soit.
L'avantage, par contre, c'est qu'il enregistre les trucs qu'aucun autre outil n'enregistre - l'appel de tout, quoi. Du moindre CGI, les appels aboutisant à une erreur, etc... Ce que les outils à base de Javascript ou de bout de code PHP ne peuvent bien sûr, par conception, pas enregistrer...
Enfin bref, pour résumer, avoir l'un n'empêche pas d'avoir l'autre ;-)
Sorry !
En fait, je voulais dire que sous Free, pour installer DC2, il faut une base PostGreSQL.
Et Free n'autorise qu'une seule base : soit PgSQL soit MySQL.
Et PhpMyVisites ne fait, comme tous les autres scripts indépendants, que des stats via une base MySQL.
Donc obligation de passer par un éditeur tiers genre Xiti ;)
Ou attendre un futur plugin DC2
J'ai installé Google Analytics sur plusieurs de mes sites. 3 minutes pour ouvrir le compte et mettre les marqueurs (identiques sur toutes les pages). Pour un site non marchand et si on ne cherche pas à customiser les scripts, c'est vraiment très rapide et sans prise de tête inutile.
eStat et Xiti proposent la même chose avec des fonctionnalités plus limitées et des pubs, pour ceux qui n'aiment pas mettre toute leur vie chez Google.
Pour les visites des spiders et autres utilisateurs sans Javascript, il y a les stats des hébergeurs (AWStats chez Sivit par exemple)
VoirClerc > Pas forcemment d'accord avec toi. Perso, j'ai un compte Free (http://statis.free.fr) sur lequel je centralise tous mes stats (blog, forums, ...). Ainsi, j'ai le blog DC2 de test en PostGreSQL (http://mondejeuner.free.fr) dont les stats sont sur http://statis.free.fr/mondejeuner/a... (MySQL).
Marrant et merci, je pensais pas que c'était faisable, j'ai toujours cru que les outils de stats ET le script à suivre devait avoir le même hébergement !
Bon, ben je suis en path_info, et non en query_string.
J'ai remplacé le code que j'avais mis par celui que tu donnes ici, mais ça ne change rien.
Je ne vois pas le parcours de mes visiteurs.
Je ne vois que le nombre de pages chargées.
Pour le coup, je n'ai plus trop d'idées... je cherche donc un outil de stats qui me permettrait de voir quelles notes les visiteurs consultent.
Merci pour ta réponse en tout cas.
Bonjour je suis le developpeur de SpongeClear et je suis en train de refaire la version de plugins SpongeClear qui fonctionne maintenant pour la version 1.2x de DotClear.
Je pense que d ici deux semaines il sera mis en place. Si ca interesse quelqu'un .... mon site est ouvert sur scoubidoou.free.fr