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 :

  1. Une tentative de le faire appeler dans publicAfterDocument ne donnait absolument rien du tout ; rien ne montre que BBClone était effectivement appelé... ou pas.
  2. Une tentative de le faire appeler dans publicPrepend l'appelait visiblement, mais il ne fonctionnait pas pour autant.
  3. 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.html du 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 fichier index.php lui-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.html du thème default dans 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...