Matomo/Version imprimable

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Nuvola-inspired File Icons for MediaWiki-fileicon-ps.png

Ceci est la version imprimable de Matomo.

  • Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
  • Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
  • Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.


Matomo

Une version à jour et éditable de ce livre est disponible sur Wikilivres,
une bibliothèque de livres pédagogiques, à l'URL :
https://fr.wikibooks.org/wiki/Matomo

Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la Licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans Texte de dernière page de couverture. Une copie de cette licence est incluse dans l'annexe nommée « Licence de documentation libre GNU ».

Sections

Présentation

Piwik est une application libre de statistiques et de mesure d’audience de sites Internet[1]. Il se télécharge sur https://piwik.org/download/.

Piwik propose de très nombreuses options d’analyses (visites, pages vues, temps de visite, analyse des pages d’entrées/sorties, suivi du visiteur, pays d’origine, configurations matérielles, analyses des mots clés et moteurs, etc.), une interface agréable et pratique, une installation entièrement automatisée, la gestion de plusieurs sites et une configuration/personnalisation poussée. Piwik est international et de nombreuses langues sont utilisables.

Après l’avoir installé sur votre serveur internet (la phase d’installation est entièrement automatisée et ne requiert aucune connaissance technique), vous devrez insérer un court code JavaScript (qu’il vous suffira de copier-coller) sur les pages dont vous souhaitez obtenir les statistiques : la mise en œuvre est simple et immédiate.

Piwik dispose (depuis la version 1.0) d’un module d’archivage dynamique qui permet la consultation des statistiques sur plusieurs périodes (jours, semaines, mois) sans contraintes de temps d’exécution et en réduisant de 30 % la place occupée par les données sur le serveur. Toutes les requêtes à la base de données sont optimisées, les tables de la base de données et l’ensemble de l’application ont été conçus pour une rapidité maximale et une surcharge serveur minimale. Piwik s’adresse ainsi à tous les sites Internet et webmasters, quel que soit le trafic du site audité : des tests ont été réalisés avec succès sur plusieurs sites Internet ayant des statistiques de 10 000 visiteurs uniques par jour.

Tout webmaster, quel que soit son niveau, pourra aisément utiliser & configurer Piwik sur son site, la prise en main globale est aisée et très rapide. Les webmasters professionnels trouveront dans Piwik l'outil idéal pour l'analyse de leur audience, Piwik permet d'améliorer significativement les statistiques des sites Internet, si les résultats sont correctement analysés. Cette présente documentation a pour but de fournir une vision globale de l'application, et vous en apprendrez beaucoup sur l'analyse même de statistiques dans la partie dédiée : Fonctionnalités de Piwik et analyse des résultats.

D'une manière générale, Piwik est un outil complet et simple à mettre en œuvre et à utiliser. Il vous permettra à la fois de consulter en un coup d’œil les statistiques essentielles, et vous pourrez à loisir analyser plus profondément chaque résultat afin de tirer des conclusions sur votre site, et de l'améliorer en conséquence.

Références[modifier | modifier le wikicode]


Installation

Configuration requise[modifier | modifier le wikicode]

Pour faire fonctionner correctement Piwik, votre serveur doit supporter PHP4 (compilé avec la librairie GD2 et la librairie FreeType), et vous devez disposer d’une base MySQL. Cette configuration est proposée par la quasi-totalité des hébergeurs gratuits et professionnels. Votre site ne doit pas nécessairement être écrit en PHP, un site entièrement en HTML sera parfaitement indexé par les statistiques (tout comme un site en ASP, JSP, Perl, etc.).

Si vous souhaitez installer un serveur Apache sur votre ordinateur personnel, consultez le site officiel d'Apache, vous y trouverez toutes les informations nécessaires à l'installation et la configuration. Faites de même pour l'installation de php et du serveur MySQL).

Si votre installation de php est mal configurée (notamment sans la librairie FreeType installée, ou avec la librairie GD2 non activée), vous ne pourrez visionner les graphiques de Piwik. Nous vous conseillons alors de faire la demande auprès de votre hébergeur pour qu'il ajoute cette fonctionnalité.

Votre serveur MySQL peut être accessible localement ou à distance, cela n'a pas d'importance. Il suffit que vous ayez la permission de créer des tables dans votre base.

Liens externes[modifier | modifier le wikicode]

Configuration conseillée[modifier | modifier le wikicode]

Apache est la solution serveur la plus sûre, la plus stable et la plus répandue sur le marché. Libre, il est gratuitement téléchargeable sur http://www.apache.org/.

Piwik requiert une version de php >= 4.1 ; nous vous conseillons néanmoins d’utiliser une version de php >= 4.3.4 (plus stable, plus sécurisée, plus puissante). Toutes les informations et les dernières versions stables sont disponible sur http://www.php.net/. Pour ce qui est de la configuration même de php, nous vous conseillons de laisser l'option register_globals sur Off pour des raisons de sécurité (cf fichier php.ini sur votre serveur) : Piwik a été développé pour fonctionner avec register_globals sur Off.

Pour le serveur MySQL, préférez une version >=3.23 ; si le trafic de votre site est très élevé, il peut être intéressant de consacrer une base entière à Piwik, pour des raisons de rapidité (les gains seront négligeables mais pourraient parfois être intéressants).

Initialiser l’installation[modifier | modifier le wikicode]

Téléchargez la dernière version de Piwik sur le site officiel. Décompressez son contenu sur votre disque dur et uploadez le répertoire ´Piwik´ (crée lors de la décompression) sur votre serveur. Pour lancer la phase d’installation, rendez vous avec votre navigateur Web dans ce répertoire (par exemple : http://www.votresite.com/web/Piwik/).

Mettre à jour une ancienne version[modifier | modifier le wikicode]

Si vous procédez à une mise à jour et que vous ne souhaitez pas perdre toutes vos statistiques, suivez précisément les indications suivantes (qui dépendent de la version que vous utilisez actuellement).

A partir de la version bêta 0.1 (b0.1)[modifier | modifier le wikicode]

Il est malheureusement impossible de conserver vos anciennes données de la b0.1 (il faudra supprimer toutes vos tables et le répertoire Piwik de votre serveur et d'installer « normalement »). Piwik version b0.1 était la première version publiée, et son architecture ne permettait pas de fournir toutes les informations importantes sur les statistiques de sites Internet. N'hésitez pas à passer à la dernière version de Piwik, car même si vous perdrez vos données vous serez largement bénéficiaire du fait des nombreuses améliorations et nouvelles fonctionnalités introduites.

A partir de la version 1.0 ou 1.1[modifier | modifier le wikicode]

Piwik a beaucoup évolué depuis ces versions. Certaines de vos anciennes statistiques pourront ne pas être compatibles (dans les Affluents notamment). Toutes les statistiques globales sont cependant parfaitement conservées.

Suivez précisément les étapes suivantes pour mettre à jour :

  • téléchargez à partir du répertoire Piwik de votre serveur, les différents fichiers de configurations (config.php, les différents configX.php, nomsites.php). Conservez les précieusement !
  • effacez la totalité du répertoire Piwik sur votre serveur (fichiers de configurations inclus). Surtout, n’ayez pas peur !
  • uploadez la nouvelle version sur le serveur (le contenu du répertoire ’Piwik’ crée lors de la décompression de l’archive).
  • éditez le fichier config.php et remplacez la ligne 4 par « $pass=crypt('test','es'); » (sans les « »). Cette modification est nécessaire du fait de la grande amélioration de la sécurité dans les versions plus récentes, et donc du cryptage du mot de passe dans les fichiers de configuration.
  • uploadez les fichiers de configurations de votre ancienne version précédemment sauvegardés dans ce répertoire sur le serveur.
  • connectez vous avec le mot de passe 'test' et changez ce mot de passe. De même, pour tous les sous sites enregistrées, vous devez activer ou non l'affichage du logo de Piwik (le fait de pouvoir choisir d'afficher ou non le logo de Piwik est spécifique à chaque site depuis la version 1.2)
  • changez ensuite le code javascript pour chacun de vos sites par le code fourni dans la rubrique correspondante de l'administration. Le code Javascript de ne doit pas être transformé et doit être copié tel quel, sans aucun changement !

A partir de la b1.2 (version 1.2 bêta)[modifier | modifier le wikicode]

Suivez le même protocole que précédemment, sans effectuer les étapes 4 et 6. Vous n'avez donc pas à éditer le fichier de configuration et à changer le mot de passe.

A partir de la 1.2.2[modifier | modifier le wikicode]

Suivez précisément les étapes suivantes pour mettre à jour :

  • téléchargez à partir du répertoire Piwik de votre serveur, les différents fichiers de configurations (config.php, les différents configX.php, nomsites.php). Conservez les précieusement !
  • effacez la totalité du répertoire Piwik sur votre serveur (fichiers de configurations inclus). Surtout, n’ayez pas peur !
  • uploadez la nouvelle version sur le serveur (le contenu du répertoire ’Piwik’ crée lors de la décompression de l’archive que vous venez de télécharger
  • uploadez les fichiers de configurations de votre ancienne version précédemment sauvegardés dans ce répertoire sur le
  • changez ensuite le code javascript pour chacun de vos sites par le code fourni dans la rubrique correspondante de l'administration. Le code Javascript de ne doit pas être transformé et doit être copié tel quel, sans aucun changement ! Le fait de devoir changer le code JS sur les sites peut être contraignant et nous nous en excusons. Ceci est dû à l'évolution rapide de Piwik, nous veillerons à ne plus faire évoluer ce code dans les prochaines versions.

Informations à renseigner[modifier | modifier le wikicode]

La phase d'installation se fait très rapidement et ne requiert aucune connaissance technique particulière. Il vous suffit de rentrer vos identifiants de connexions au serveur MySQL. Toutes les options activables sont définies précisément ci-dessous.

Phase 1/3[modifier | modifier le wikicode]

Vous pouvez renseigner les paramètres de connexion au serveur MySQL (login, mot de passe, serveur et nom de la base de données) ainsi que le nom et adresse Internet du premier site à configurer. L’adresse renseignée est très importante, car elle est utilisée par le fichier Piwik.php et dans l’affichage des affluents (votre site ne s’affichera pas dans les referrants ”Sites Internet”).

Vous pouvez choisir d’afficher ou non le logo sur les pages où est situé le code javascript. Un choix entre plusieurs dizaines de logos est disponible. Autoriser l’affichage du logo sur votre site permettra à Piwik de mieux se faire connaître de tous et ainsi d’évoluer plus rapidement : c’est une manière de remercier l’auteur qui a passé de très nombreuses heures à développer cette application libre et gratuite.

Utilisateurs avancés : vous pouvez choisir de ne pas enregistrer, lors de la prise des statistiques, les variables de type GET de vos pages (la page 'page.php?var1=foo&var2=toto' deviendra 'page.php' dans vos stats). Pour encore plus de précision, il est possible de définir les variables des URLs que vous souhaitez considérer, et donc d’éliminer toutes les autres. Par défaut, le PHPSESSID est automatiquement ignoré. Entrez le nom des variables séparées d’un point virgule. Par exemple, si vous souhaitez ne pas prendre en compte les variables 'var1' et 'var3', cochez ´Oui´sur la première case et entrez dans le champ suivant : ´var1;var3´ (sans espace). Vos statistiques seront ainsi beaucoup plus claires et précises, car seront éliminées les variables de votre choix qui ne sont pas pertinentes dans le nom des pages.

Phase 2/3[modifier | modifier le wikicode]

Vous pouvez paramétrer les restrictions d’accès à Piwik en choisissant de protéger par login/mot de passe l’ensemble de l’application (statistiques et administration), ou seulement la partie administration, auquel cas les visiteurs (s'ils ont connaissance de l’adresse du répertoire de Piwik) auront accès aux statistiques.

Vous devrez spécifier le chemin complet du répertoire Piwik sur votre serveur (ex : http://www.votresite.com/web/Piwik/). Cette information est indispensable pour l’affichage des images. N’oubliez pas le slash ’/’ à la fin du chemin !

Vous pouvez aussi choisir d’afficher ou non les graphiques lors de la consultation des statistiques (graphiques à barres verticales, de type camembert 3D ou camembert 2D). Si vous ne rencontrez pas de problème avec l’affichage des graphiques, ne les désactivez pas : ils fournissent des informations très importantes !

Phase 3/3[modifier | modifier le wikicode]

Le code javascript à insérer sur toutes les pages dont vous souhaitez obtenir les statistiques s’affiche à l’écran : il vous suffit de copier ce code et de le coller entre les balises <body> et </body> des pages de votre site (de préférence juste avant le </body>). Il est indispensable de ne changer aucune ligne de ce code : le lien vers le site officiel n'aura pas d'influence sur votre site, vous ne le verrez pas apparaître (excepté si vous avez activé l'affichage du logo, le logo sera alors cliquable et dirigera vers le site officiel) : ne le supprimez pas.

Lors de l’affichage de cette page de l’installation, une requête est effectuée vers http://www.Piwik.net/ qui a seulement pour but d’incrémenter le compteur des utilisateurs de Piwik. Aucune information confidentielle n’est transmise. Ceci est fait afin de connaître le nombre précis d’utilisateurs de Piwik. Merci de votre compréhension.


Configuration

Ajout d'un site à auditer[modifier | modifier le wikicode]

Vous pouvez ajouter un nombre illimité de sites à auditer. Pour cela, allez dans la partie configuration et cliquez sur ’Ajouter un site Internet aux statistiques’. Saisissez les informations relatives au nouveau site (vous pouvez personnaliser la gestion des paramètres GET, séparément pour chaque site). Comme les informations de connexion peuvent varier d’un site à l’autre, vous avez la possibilité de les ressaisir pour chaque site (cela permet d’utiliser une base de données autre que celle utilisée pour le site principal). Vous pouvez aussi (depuis la version 1.2) paramétrer l'affichage du logo de Piwik pour chaque site séparément (votre site pro n'affiche pas le logo, mais sur votre site perso vous ne voyez pas de problème à parler un peu de Piwik). Par défaut les valeurs de connexion du premier site sont affichées. Cliquez ensuite sur ’Continuer’. Il reste à afficher le code javascript correspondant à ce site. Pour ce faire, cliquez sur ’Afficher le code javascript à insérer sur les pages’ puis sur le site que vous venez de configurer. Copier le code et collez le entre les balises <body> de votre site. Vos statistiques sont aussitôt accessibles !

Modification des informations d’un site[modifier | modifier le wikicode]

Vous pouvez modifier les informations des sites configurés. Pour cela, allez dans la partie configuration et cliquez sur ’Modifier les informations d’un site configuré’. Les informations modifiables sont les mêmes que celles configurables à l’installation. Remplissez les champs puis validez.

Code Javascript à inclure sur les pages[modifier | modifier le wikicode]

Pour la prise en compte des statistiques, la mise en place d’un code Javascript (sur toutes les pages à auditer) est indispensable. Pour afficher le code, allez dans la partie configuration et cliquez sur ’Afficher le code javascript à insérer sur les pages’. Cliquez ensuite sur le site concerné, puis copiez le code.

Il est conseillé de coller le code dans le bas des pages auditées, avant le </body>, afin de ne comptabiliser que les statistiques des pages qui ont été entièrement affichées.

Ne pas tenir compte du webmaster dans les statistiques[modifier | modifier le wikicode]

Si vous ne souhaitez pas que vos visites soient comptabilisées dans les statistiques d’accès, il est possible, pour chaque site séparément, d’installer un cookie sur votre ordinateur ; celui-ci sera automatiquement détecté lors de votre visite sur le site, et ne vous comptabilisera pas. Pour annuler et effacer le cookie, refaire la démarche en sens inverse.

Si vous utilisez plusieurs navigateurs, il vous faudra installer le cookie sur chaque navigateur séparément. De même, n'oubliez pas d'installer un cookie via votre logiciel WYSIWYG de création de sites qui constitue encore un autre navigateur.

Gestion des langues[modifier | modifier le wikicode]

L'application Piwik a été conçue pour être utilisée dans différentes langues. Il est donc possible d'ajouter ou de supprimer facilement une langue disponible pour l'utilisateur. Vous pouvez dans cette rubrique définir une langue par défaut, qui sera chargé lors de chaque première visite d'un nouvel utilisateur de Piwik. Mais chaque utilisateur peut choisir sa propre langue à l'aide du menu déroulant présent sur toutes les pages, et son choix est alors stocké dans un cookie et la langue qu'il a choisit sera rechargée automatiquement lors des prochaines visites.

Si vous avez traduit Piwik dans une nouvelle langue et que vous souhaitez inclure votre fichier, il vous suffit de le copier dans le répertoire /langs/ de votre installation. Il sera alors automatiquement pris en compte lorsque vous vous rendrez dans le menu de gestion des langues. Consultez la rubrique Traductions pour plus d'informations sur les traductions.

Purge et optimisation de la base de données[modifier | modifier le wikicode]

Ce nouveau module a été introduit en version 1.2 stable, et il répond directement à la demande des webmasters qui sont limités dans la taille de leur base de données. Plusieurs actions sont possibles :

  • optimiser une ou la totalité des tables de la base de données. L'optimisation est une opération interne à MySQL qui permet de diminuer, dans de nombreux cas, la taille de la base de données. Il n'y a bien sûr aucune perte de données, la fonction OPTIMIZE se contente de compresser et de défragmenter les données. Il est conseillé d'optimiser les tables régulièrement sur les sites à fort trafic (une fois par mois par exemple).
  • la purge des logs permet d'archiver tous les jours qui n'ont pas été archivés manuellement. Cela est principalement utile si vous ne consultez pas vos statistiques tous les jours, ou que vous avez été absent pendant une période données. Une simple sélection lance tous les calculs automatiquement.
  • purger une ou plusieurs tables pour un site enregistré. En quoi consiste la purge ? Elle permet de diminuer de manière très importante la taille des données, en effaçant certaines informations (les informations qui occupent une place importante). Après la purge, seules les informations essentielles restent enregistrées et la consultation des statistiques d'une période dite « purgée » amène à une page simplifiée de consultation.

Si vous purgez un groupe de jours, les archivages des mois et des semaines où sont contenus ces jours seront effectués. En effet, si cela n'était pas le cas, et que vous purgiez un groupe de jours tout en n'ayant pas au préalable archivé les mois et semaines contenant ces jours, alors vous n'auriez plus accès aux statistiques sur ces mois et semaines (puisque les jours ne seraient plus disponibles...).

Détail important : seules les périodes qui ont déjà été archivées sont purgées. Si vous n'avez pas archivé la semaine 29 par exemple, et si vous purgez un groupe de semaines qui inclue cette semaine 29, elle ne sera pas archivée puis purgée ; elle sera simplement ignorée.


Fonctionnalités

Utilité des statistiques pour un site Internet ?[modifier | modifier le wikicode]

Les statistiques fournies par Piwik, si elles sont correctement analysées, permettent très rapidement d’améliorer la gestion du visiteur sur le site, et donc d'améliorer les statistiques d'accès globales. La connaissance de vos visiteurs est un atout très important, car vous pourrez faire évoluer votre site en fonction de leur besoin et intérêts. Vous saurez par exemple quelles pages intéressent le plus, celles qui intéressent le moins (peut être devrez vous améliorer vos liens, mettre à jour le contenu ?). Par exemple si vos visiteurs passent du temps sur le site (plus de quelques minutes en moyenne), cela signifie qu’il propose un contenu non négligeable qui intéresse ; un temps court de visite peut être synonyme d’une page d’accueil peu accrocheuse, d’un contenu pauvre ou au contraire d’un site régulièrement (re)visité, les visiteurs s’intéressant alors majoritairement aux nouveautés (pourquoi ne pas augmenter la fréquence de mises à jour ?).

Il est aussi important de tirer des conclusions sur les évolutions des statistiques (nombre de visites, nombre de pages vues) : pourquoi les chiffres sont ils en hausse soudaine ? Avez vous récemment ajouté un nouveau type de contenu ou complété celui existant ? Au contraire, suite à une brusque diminution du trafic, avez vous des éléments de réponse : est ce simplement un site au contenu événementiel, donc passager, ou est ce dû à un manque dans la publication de nouveautés ? Ou encore à un changement dans l'architecture du site qui n'a peut être pas convaincue ? Il existe ainsi de nombreuses questions que l'on peut se poser, simplement en observant les évolutions dans les chiffres ; les conclusions les plus faciles sont celles faites suites à l'observation des statistiques sur des périodes longues, comme le mois par exemple.

Il vous sera possible d’aller encore plus loin grâce à l’analyse du suivi du visiteur : connaissant les principales pages d’arrivées, si celles ci sont peu convaincantes (si elles ont un taux de sortie élevé), vous devrez améliorer leur apparence, mettre plus de liens disponibles, favoriser la navigation dans votre site sur ces pages précisément. Si certains chemins sont peu empruntés, essayez de comprendre pourquoi et d’améliorer votre architecture dans ce sens.

De même la provenance (votre site intéresse t-il seulement des francophones ?) ainsi que les aspects matériels sont fondamentaux dans la conception et l’évolution de votre site. Pourquoi par exemple s’efforcer de maintenir à jour une version anglaise d’un site si celle ci ne reçoit pas de visite ? Pourquoi optimiser le site pour Netscape 4.5 si moins de 0,1% des visiteurs du mois précédent utilisaient ce navigateur ? Votre site optimisé en 1024*768 reçoit beaucoup de visiteurs avec une résolution de 800*600 ? Assurez vous que votre site soit compatible aussi pour cette résolution ! Ce sont des points indispensables à la réussite et à l’évolution de votre site web.

Vous ne devrez pas non plus négliger le référencement de votre site : consultez pour cela les mots clés qui ont permis à vos visiteurs d’arriver sur le site, les moteurs utilisés, etc. Si peu de visiteurs arrivent par des moteurs de recherche, essayez de correctement vous référencer (avez vous bien mis les balises-meta de description et de mots clés sur toutes vos pages ?). Vous pourrez améliorer votre référencement de manière significative de cette manière !

Pour plus de renseignements sur chaque rubrique et statistique proposée par Piwik, consultez la partie suivante qui décrit en détail les différentes fonctionnalités de la mesure d'audience de sites Internet, et qui donne des pistes d'analyse des différents résultats.

Statistiques & informations fournies par Piwik[modifier | modifier le wikicode]

Les statistiques fournies par Piwik sont assez nombreuses et structurées en 5 grandes rubriques principales. Elles évoluent continuellement au fur et à mesure des différentes versions publiées. Dans des prochaines versions la structure pourrait encore être transformer pour intégrer de nouvelles informations et fonctionnalités.

Vous trouverez ci-dessous une description exhaustive des différentes rubriques et fonctionnalités de Piwik. Chaque fonctionnalité sera analysée et nous tenterons de répondre à la question : Comment analyser les statistiques de sites internet ? Pourquoi un simple compteur de visite n'est pas suffisant ? Comment tirer des conclusions et quelle réaction adopter en fonction des résultats de votre mesure d'audience ?

Si vous-même vous tirez des conclusions différentes de celles présentées par la suite, n'hésitez pas à nous en informer. Nous serions intéressés de voir les utilisations faites de ces résultats par les utilisateurs de Piwik. L'interprétation personnelle peut être très diverse, et il serait très intéressant de constituer une sorte d'encyclopédie de l'analyse d'audience et de l'étude de l'évolution de la fréquentation de sites Internet.

Visites[modifier | modifier le wikicode]

Cette rubrique est la rubrique par défaut, car elle fournie les chiffres nécessaires à une rapide étude de l'évolution du site dans le temps : le trafic du site est il plus important aujourd'hui, ce mois ou cette semaine ?

Statistiques[modifier | modifier le wikicode]

Vous trouverez dans cette rubrique de nombreuses informations sur les visiteurs de votre site Internet. Il est important de bien faire la distinction entre les visites et les visiteurs uniques : une même personne, appelée visiteur unique, peut visiter plusieurs fois le site Internet dans la même journée. Un visiteur unique peut donc faire plusieurs visites. Le nombre de visiteurs uniques sera donc toujours inférieur ou égal au nombre de visites. Une grande différence entre ces 2 chiffres est signe d'un intérêt important des visiteurs, qui reviennent plusieurs fois dans la journée sur le site Internet. Votre public se fidélise à court terme, ce résultat intéressant prouve que vous avez certainement un contenu dynamique intéressant et régulièrement mis à jour. Si le nombre de visiteurs uniques et de visites est presque le même, ce n'est pas pour autant un point négatif ; mais peut être pourriez vous essayer de favoriser les mises à jour, et si votre site est important, pourquoi ne pas créer un forum qui permettrait aux visiteurs de se rencontrer et de traiter des sujets en relation avec le site ?

Le nombre de pages vues précise, comme son nom l'indique, le nombre de pages différentes que vos visiteurs ont consulté sur le site. Bien sûr, seules les pages sur lesquelles vous avez placé le code javascript seront comptées. L'analyse plus profonde des pages vues a lieu dans la rubrique correspondante (lire Analyser les statistiques sur les pages vues).

Vous connaîtrez aussi la moyenne de page vue par visiteur ; si ce nombre est important, cela montre que votre site dispose d'un contenu important, que la structure actuelle incite les visiteurs à cliquer plusieurs fois sur les liens proposés et à réellement naviguer sur le site, c'est donc très positif. Une moyenne de pages vues par visiteur supérieure à 8 pages est un excellent résultat, la moyenne se situant généralement vers 4-5 pages.

Le temps moyen de visite ou par page vue sur le site vous permettra d'avoir un ordre d'idée de la durée moyenne de parcours sur le site, ou sur une page. Une courte durée (inférieure à 2 minutes) sera certainement signe d'un faible nombre de pages vues par visiteur, et à l'inverse un temps de visite important (est considéré comme importante une durée moyenne supérieure à 6 minutes) est un signe très positif : les visiteurs prennent leur temps à la lecture du site, s'intéressent au contenu (certainement riche).

Le taux de visites à une page vue indique le pourcentage de visiteurs qui n'ont consulté qu'une seule page sur le site et ont fermé la fenêtre. Cela peut être dû à plusieurs facteurs : page d'accueil non attrayante (lisez à ce sujet Les analyses des pages vues en entrées ou Les pages de sorties, les pages qui repoussent les visiteurs), un mauvais référencement (les mots clés qui vous apportent des visiteurs sont ils cohérents avec le contenu du site ? Lisez à ce sujet Analyser les mots clés des moteurs de recherche), la cohérence visuelle du site est elle évidente ? Votre site est il accessible à tous : avez vous beaucoup d'images lourdes (problèmes avec les petites connexions de type 56K) ou le site nécessite t-il un plugin particulier ? Faites le savoir clairement et expliquer comment le télécharger et l'installer. À propos de la compatibilité avec les différents navigateurs, lisez Analyse des résultats des navigateurs des visiteurs.

Récapitulatifs sur la période[modifier | modifier le wikicode]

Cette rubrique vous permettra de consulter un récapitulatif de vos statistiques sur une période qui dépend de la période sélectionnée. Par exemple si vous auditez la journée d'hier, le tableau vous présentera un récapitulatif des nombres de visites et de pages vues des 7 jours précédant le jour audité. De même si vous étudiez une semaine en particulier, les 7 semaines précédentes seront présentées et comparées (idem pour le mois).

Les chiffres présentés entre parenthèses et en petit caractère sont ceux du jour correspondant à la colonne en cours. Les pourcentages indiquent l'évolution du chiffre du jour audité par rapport au jour de la colonne courante. Par exemple, si vous avez +59% cela veut dire que vos chiffres du jour que vous auditez sont en hausse par rapport au jour de la colonne courante, c'est donc positif pour votre site (ce qui explique la couleur verte utilisée pour les résultats). De même s'il est indiqué -15%, le résultat est en baisse par rapport au jour en question (une baisse de la fréquentation est négatif pour le site internet, ce qui explique la couleur rouge utilisée). Le texte [ Non archivé ] apparaît si la période... n'est pas archivée. Pour régler le problème, il vous suffit de consulter les statistiques de cette période (cela enclenchera le calcul des données). Il vous suffit ensuite de reconsulter la période qui vous intéresse, et toutes les données apparaîtront.

Depuis la version 1.2 et suite aux demandes de nombreux utilisateurs, l'ordre est maintenant de gauche à droite pour la chronologie du tableau (idem pour le graphique récapitulatif). De plus la comparaison se fait bien sur les 7 jours précédents la journée auditée, et il inclue la journée en cours pour plus de clarté.

Graphique récapitulatifs de l'audience sur une période[modifier | modifier le wikicode]

Reprenant les résultats du tableau récapitulatif, le graphique permet une visualisation plus rapide des résultats. La droite rouge représente le nombre de pages vues mesurées et les barres oranges les visites comptabilisées durant les différentes périodes. Notez que l'échelle des pages vues n'a pas 0 comme origine, la droite peut donc varier brusquement ; cela permet de mettre en valeur les variations, mêmes faibles, des statistiques des pages vues.

Graphique durée des visites[modifier | modifier le wikicode]

Ce graphique expose les temps de visites moyens. Plus précisément il permet de répondre à la question « Combien de temps passent les visiteurs sur mon site Internet ? ». Indication plus pertinente que la simple moyenne de la durée des visites, le graphique vous présente le nombre de personnes ayant accédé au site pendant une durée pré-déterminée. Vous pourrez alors analyser les résultats pour déterminer si les personnes passent très peu de temps (désintérêt du visiteur, ou simple visite pour vérifier si une mise à jour a été effectuée), ou si globalement les temps de visites sont élevés (site à contenu conséquent qui intéresse le visiteur). Un temps de visite moyen de 4min peut par exemple révéler que la moitié des personnes ne restent que 30s sur le site et la majorité de l'autre moitié y passe plus de 8min. Il est important de mettre en corrélation ces deux résultats. Si les échelles pré-déterminées ne vous semble pas optimales, n'hésitez pas à nous le faire savoir (postez un message sur le forum « Suggestions et questions diverses » sur le site officiel).

Graphique visites heures serveur[modifier | modifier le wikicode]

Ce graphique présente le nombre de visites mesurées par rapport à l'heure du serveur. Cette information peut être utile si vous souhaitez faire des mises à jour sur le serveur directement et qu'il risque d'y avoir des dysfonctionnements sur le site Internet (coupures, interruptions, serveur de base de données temporairement indisponible). Il est bon de choisir un créneau horaire ou le site est peu visité, d'où l'intérêt des informations des visites par heures du serveur. Bien sûr si votre serveur n'est pas dans votre fuseau horaire, faites une rapide conversion pour vous assurer d'effectuer les transformations à l'heure serveur réelle !

Graphique visites heures locales[modifier | modifier le wikicode]

Ce graphique présente les horaires utilisées par vos visiteurs lorsqu'ils visitent votre site Internet. Cela ne présente qu'un faible intérêt, mais peut être utile pour mettre en valeur le type de population de votre site (surfent-ils plutôt pendant les horaires de travail ou plutôt le soir et pendant les pauses ?).

Lieux de connexion[modifier | modifier le wikicode]

Ce graphique vous présente les lieux de connexion privilégiés par vos visiteurs. Se connectent ils plutôt le soir, le matin et pendant les pauses sur votre site, ou au contraire essentiellement au travail ? Les connexions entre 8h et 12h, et entre 14h et 18h les jours ouvrés (sans le Samedi et le Dimanche) sont considérés comme heure de travail. Le reste est considéré comme des connexions effectuées depuis le domicile.

Pages vues[modifier | modifier le wikicode]

Les résultats de cette rubrique vous permettront de connaître les parties précises du site qui intéresse vos visiteurs. Toutes les données pour la période sélectionnée seront comparées aux données de 2 périodes antérieures (J-7 et J-14 pour les visites, semaines et mois précédents pour les semaines et mois).

Statistiques globales[modifier | modifier le wikicode]

Dans le tableau vous est rappelé plusieurs statistiques importantes : le nombre de pages vues, le nombre de pages vues différentes : combien de pages ayant un nom différent ont été vues ? Est ce justement le nombre de pages total de votre site, auquel cas toutes les pages du site ont été vues au moins une fois ? Il indique aussi le record de pages vues pour un visiteur.

Tableau des détails des pages vues[modifier | modifier le wikicode]

Ce tableau présente les différentes page accédées sur votre serveur. Le nom correspond au chemin complet du fichier correspondant à la page mesurée (notez que les pages vues sont enregistrées en minuscule, nous conseillons en effet de ne pas donner de pages ou de variables sensibles à la casse). Le tableau met en avant les pages les plus visitées, et il est conseillé de regarder avec intérêt les évolutions dans ces pages, mais aussi les pages de votre site qui ne semblent pas appréciées (ou dont la cote de popularité est en baisse). Sont-elles faciles d'accès ? Les liens qui pointent vers ces pages sont ils correctement mis en avant sur le site ? Les mots clés sont ils bien choisis dans le texte des pages ? (le choix de mauvais mots clés dans un texte peut être synonyme de désintérêt par les moteurs de recherche).

Certaines pages peuvent être de la forme « C:\toto\php\superbe.htm » (ou l'équivalent sur Linux : /usr/test/ ou même /toto/ alors que ce répertoire n'existe pas sur le site) : cela est dû à des visiteurs qui ont sauvegardé les pages de votre site sur leur ordinateur et qui y accèdent par celui-ci. Le code javascript est bien sûr toujours présent dans la page, l'appel à Piwik se fait donc toujours et l'enregistrement des logs a lieu dans votre base de données. Ces pages peuvent être considérées comme parasites mais elles font réellement partie de votre audience. Une option sera certainement développée dans une prochaine version pour permettre aux webmasters qui le souhaitent de désactiver l'enregistrement de pages de ce style.

Graphique des visites par nombre de pages vues[modifier | modifier le wikicode]

Ce graphique présente le nombre de visites qui ont eu lieu par nombre de pages vues comptabilisées. Un grand nombre de visiteurs qui n'ont consulté que 1 ou 2 pages est en général assez mauvais signe, mais cela reste très fréquent et ne doit pas vous alarmer. Néanmoins il convient de se poser les bonnes questions : le site est il mis à jour fréquemment ? Ajoutez vous des articles, du contenu divers de manière régulière ? Votre site, à première vue, est il cohérent avec le sujet traité ? Que ce soit au niveau des couleurs, de la présentation (est ce très strict ou plutôt artistique ? Cela correspond il à votre audience ?) ou même tout simplement des termes employés tout au long des premières pages ? N'hésitez pas à vous questionner ainsi, les conclusions que vous tirerez pourront être très favorables à l'évolution de votre trafic.

Graphique pages vues par heures serveur[modifier | modifier le wikicode]

cf description de Graphique visites heures serveur

Graphique pages vues par heures locales[modifier | modifier le wikicode]

cf description de Graphique visites heures locales

Suivi du visiteur[modifier | modifier le wikicode]

Cette rubrique est une réelle innovation dans le domaine du logiciel libre de mesure d'audience de sites Internet : Piwik est la première application à proposer une gestion performante et complète du suivi du visiteur sur le site Internet. Cette rubrique vous permettra de connaître les chemins empruntés par vos visiteurs dans les différentes rubriques, ainsi que les principales pages d'arrivées et de départ du site.

Pages d'entrées[modifier | modifier le wikicode]

Ces pages vues correspondent aux pages par lesquelles les visiteurs accèdent à votre site Internet. Dans la plupart des cas le premier résultat sera votre page index, car la majorité des visiteurs accèdent au site par l'adresse dit « brute » de votre site. Cette page (et les suivantes du classement) doivent être particulièrement soignée car ce sont celles qui permettent la navigation au sein du site Internet et qui sont consultées dès l'arrivée sur le site. Les liens qu'elles proposent doivent permettre d'accéder à une grande partie du reste des pages, le contenu de ces pages et leur présentation dépendent énormément du sujet traité. L'utilisation d'images afin d'attirer l'œil du visiteur peut être efficace et parfois conseillée, il ne faut cependant pas en abuser. Faites de préférence des liens sur les images, afin de favoriser les gens à cliquer et parcourir.

L'analyse des pages d'entrées peut aussi mettre en avant un phénomène peu fréquent mais extrêmement important : les cibles des liens de vos partenaires, ou mêmes les pages sur lesquelles mènent les moteurs de recherche. En effet si vous développez des partenariats avec d'autres sites Internet, ceux-ci pourront pointer leur lien vers des pages spécifiques de votre site Internet. La prédominance d'un sujet plus précis dans certaines rubriques peut aussi favoriser l'importance des moteurs de recherche qui apporteront vos visiteurs directement dans les rubriques concernées. Essayez de comprendre pourquoi telle ou telle page est importante en tant que page d'entrée, cela peut avoir beaucoup de raisons et de conséquences intéressantes.

Pages de sorties[modifier | modifier le wikicode]

Ce tableau permet de répondre à la question fondamentale : est ce que cette rubrique ou cette page est intéressante pour les visiteurs ? Quel meilleur critère utiliser pour répondre à cette question que le taux de sortie des visiteurs sur chaque page ? Ainsi si sur une page donnée, vous constatez un taux de sortie de 95%, cela signifie qu'une écrasante majorité des visiteurs qui ont parcouru cette page sont sortis du site Internet et n'ont pas continué leur visite ! Plus grave, vous pourrez constater que certaines pages sont continuellement accompagnées d'un taux de sortie très important : ces pages sont impérativement à reconsidérer, n'hésitez pas à les revoir entièrement, les rendre plus attractives, complètes, et favoriser la continuité de la navigation (augmentation des liens pointant vers des pages ou rubriques annexes, etc.).

Par défaut les pages de sorties sont classées par nombre de fois où ces pages ont été comptabilisées en tant que pages de sorties. Dans une prochaine version, nous envisageons de proposer la possibilité de classer les pages par taux de sortie. Cela permettra de mettre directement en tête les pages qui font en moyenne le plus « fuir » vos visiteurs. Néanmoins le classement actuel reste très pertinent, vous constaterez que les premières pages ont généralement un taux de sortie élevé et méritent une reconsidération.

Suivi[modifier | modifier le wikicode]

Cette partie vous permet d'étudier les différentes combinaisons de navigation choisies par les visiteurs. Le principe est simple : vous analysez les pages sur lesquelles se rendent les visiteurs, à partir d'une page d'étude (par défaut, la page d'entrée la plus visitée est sélectionnée). Vous pouvez sélectionner la page à étudier en cliquant sur celle-ci dans le tableau du suivi (vous ne pouvez donc analyser que les pages qui sont affichées dans le suivi). L'étude du suivi des visiteurs sur le site permet de mettre en avant une éventuelle qualité et la facilité dans la navigation (c'est le cas si en moyenne toutes les pages mènent à plusieurs pages différentes).

L'étude du chemin du visiteur peut aussi montrer une certaine tendance : imaginons un article en deux parties distinctes. Vous pourrez, en sélectionnant la première page de l'article à étudier, déterminer si majoritairement les visiteurs qui consultent cette page souhaitent finir leur lecture, ou si au contraire une majorité d'entre eux cliquent sur d'autres liens (de même thématique ou non).

Vous pouvez aussi mettre ces résultats en parallèle avec les taux de sortie : si une page propose un taux de sortie élevé mais que le faible nombre de visiteurs qui continuent leur visite le font majoritairement sur une même page, pourquoi ne pas mettre encore plus en valeur le lien vers cette page ?

Vous pourrez aussi mettre en évidence d'intéressantes phénomènes : dans le cas d'un site marchand, pourquoi la page de listage du caddie n'emmène que 10% des visiteurs vers la phase de commande ? La réponse ne viendra pas de Piwik, il faudra se questionner soi-même : le processus est il assez clair, la présentation assez soignée ? Parlez vous suffisamment du processus de vente, de livraisons, etc. ?

Vous pourrez ainsi, grâce à l'analyse du parcours du visiteur sur le site Internet, tirer de nombreuses conclusions très importantes pour les futures évolutions à mettre en œuvre. Vous pourrez de cette manière améliorer fortement le trafic et la popularité générale de votre site.

Provenance[modifier | modifier le wikicode]

D'où viennent vos visiteurs ? Votre site intéresse t-il des internautes de tous les continents ? Quel fournisseurs d'accès utilisent ils ?

Mappemonde[modifier | modifier le wikicode]

La mappemonde est un outil visuel très apprécié permettant en un regard, de constater la présence et l'intérêt de votre site sur le globe. Elle permet de visualiser (première étape) le regroupement des visiteurs par continent, puis lors d'un clic sur un continent particulier (deuxième étape), le détail des pays pour ce continent. Les cartes se veulent simples, claires et donc efficaces. Pour plus de précisions et de détails sur des chiffres, il suffit de consulter le tableau récapitulatif chiffré en dessous de la mappemonde.

Si l'échelle de couleur ne vous convient pas, consulter cette rubrique : 5.9 Échelle de couleur pour la mappemonde

Le développement de ces cartes est un travail très long et minutieux, et a demandé de nombreuses heures. Les cartes disponibles dans l'archive de Piwik ne sont pas du domaine public, elles sont comme l'application publiées sous license GNU/GPL, et ne peuvent donc être librement utilisées que dans un logiciel ou un site publié sous cette même license. Depuis la version 1.3, les cartes sont traduites dans toutes les langues de Piwik, les noms de pays et de continents sont écrits dynamiquement sur les cartes.

Récapitulatif des pays[modifier | modifier le wikicode]

Cette rubrique dresse un panel complet des différentes nationalités des visiteurs de votre site. Ce paramètre est important pour un site Internet : votre public est-il essentiellement français ou plus généralement francophone (Belgique, Luxembourg, Québec, Suisse, etc.) ? Certains pays qui ne sont a priori pas directement ciblés par votre site sont ils majoritairement présents, auquel cas la création d'une section internationale pourrait être envisagée ? Le site déjà traduit dans plusieurs langues rencontre t-il le succès espéré pour les différents pays ?

Fournisseurs d'accès[modifier | modifier le wikicode]

L'information du fournisseur d'accès (provider) des visiteurs n'a pas énormément d'importance. Elle permet seulement, sur une importante affluence, de réaliser des statistiques sur l'utilisation de tel ou tel fournisseur d'accès, et donc de dégager les tendances du marché. En cliquant sur les noms des providers, vous arriverez sur son site internet officiel.

Configurations matérielles[modifier | modifier le wikicode]

La connaissance de l'environnement matériel de vos visiteurs est fondamentale car elle permet de savoir si le site est globalement bien conçu pour le public rencontré.

Systèmes d'exploitation (OS)[modifier | modifier le wikicode]

Ce récapitulatif des systèmes d'exploitation utilisés par les visiteurs de votre site Internet vous permettra de connaître la tendance globale d'utilisation de tel ou tel système. Nous pourrions même aller plus loin : cela vous permettra de constater l'évolution fulgurante du puissant système d'exploitation libre Linux. Piwik est capable de reconnaître la totalité des systèmes d'exploitations couramment utilisés : Windows (toutes versions), Linux, Macintosh, FreeBSD, SunOS, etc. (au total une quinzaine de systèmes différents).

Pour l'analyse en fonction des résultats obtenus, vous ne pourrez pas tirer d'indications intéressantes de ce résultat car il est évident que votre site est compatible tous systèmes d'exploitation : vous avez banni tous les scripts qui ne marchent « que sous Internet Explorer » et vous n'utilisez pas les répugnants active X qui ne marchent que sous Windows. Votre site compatible n'a pas de soucis à se faire de ce côté, voyons plutôt la suite.

Navigateurs[modifier | modifier le wikicode]

Ce récapitulatif des navigateurs (browsers en anglais) utilisés par les utilisateurs de votre site Internet vous permettra, comme pour les systèmes d'exploitation, de constater l'état global du marché. Plus important, l'analyse des résultats vous permettra de déterminer s'il est vraiment obligatoire d'optimiser votre site pour les vieux navigateurs qui ne semblent plus utilisés ; les résultats sur des navigateurs comme Netscape 4.x vous convaincront certainement (vous ou votre patron) de l'inutilité (relative) de passer des heures à optimiser pour ce navigateur (dépassé, vieillot, et complètement incompatible avec les standards).

Bien sûr, une prédominance fréquemment constatée du navigateur Web Explorer de Microsoft ne doit pas empêcher de fournir du code HTML propre et qui soit compatible avec les navigateur de type Gecko (Mozilla Firefox, Mozilla) ou Opera. Ces navigateurs restent très utilisés et il ne faut les négliger. Ne voyez pas dans la phrase « fournir du code HTML propre » un objectif long et rempli d'embûches, il suffit de respecter les quelques règles établies par la norme (X)HTML.

Résolutions[modifier | modifier le wikicode]

Ce récapitulatif des résolutions vous permettra de tirer d'intéressantes conclusions sur la présentation de votre site Internet. La résolution d'écran caractérise la quantité d'informations disponible, plus elle est élevée plus les visiteurs verront de choses, mais plus la taille globale des textes et images diminuera (sauf si le site s'étire automatiquement, voir ci-dessous).

Les résolutions moyennes varient énormément selon le type de sites Internet et le public visé. Nous avons constaté, suite à des bilans effectués par les utilisateurs de Piwik (bilans effectués sur des très grandes quantités de visiteurs : 30000 à 200000), que la « domination » d'une résolution en particulier ne pouvait pas être établie comme règle générale. Il est certain que sur des sites moyens, de contenu assez habituel (articles divers, contenu riche sur différents sujets, sites marchands), il est fréquent de voir la résolution 1024*768 prédominer avec plus de 30%. Cela représente la majorité des cas, mais il est impossible de négliger les autres résolutions d'écran : 800*600 notamment, ainsi que toutes les résolutions supérieures (qui sont très variées). À l'inverse sur un site traitant de sujets plus précis tel que le design, la conception (internet, multimédia, etc.), les résolutions prédominantes sont supérieures ou égales à 1280*1024. Le public ciblé est alors mieux équipé, cela se comprend facilement, et il semble important de faire un design en conséquence.

D'une manière générale il est déconseillé d'optimiser son site pour une résolution en particulier : il est tout à fait possible de faire un design qui soit adaptable à tout type de résolutions, et qu'il le soit automatiquement. Cela est largement favorisé par l'utilisation des normes XHTML/CSS, même si le HTML 4 peut très bien faire l'affaire pour concevoir un design qui s'étire automatiquement.

Écran large/normal[modifier | modifier le wikicode]

Ce récapitulatif est un « trip » du développeur de Piwik, qui voulait voir la proportion d'écran large utilisée actuellement par les internautes, et éventuellement constater l'évolution du phénomène au cours des mois et années à venir.

Un écran est dit large lorsque le rapport entre sa largeur et sa hauteur est supérieur à 1,4 (Ex : 1280*800 est un écran large, 1280*1024 est un écran classique).

Couleurs (profondeur d'écran)[modifier | modifier le wikicode]

L'information sur les profondeurs d'écran (nombre de couleurs en bits), n'a en soi que peu d'importance, sachant que la quasi majorité des utilisateurs sont maintenant en 16 bits minimum, et que cela suffit largement pour afficher correctement des images de sites Internet.

Plugins[modifier | modifier le wikicode]

Ce récapitulatif des principaux plugins vous permettra de tirer d'intéressantes conclusions sur les technologies disponibles dans les navigateurs de votre audience. Cela vous permettra de faire les meilleurs choix entre Java, Flash et Director si vous envisagez de proposer du contenu interactif, ou entre WindowsMedia, Quicktime ou RealVideo si vous voulez fournir des vidéos en flux (streaming). Pour les vidéos streaming, il est de toutes façons déconseillé de fournir du WindowsMedia quand on sait que la compatibilité avec tous les systèmes est très aléatoire...

De la même manière, si vous proposez déjà ces différents types de contenus, ces statistiques vous permettront de savoir s'il est utile de continuer vos efforts pour proposer les différents formats ou si une technologie sort clairement du lot, auquel cas il pourrait être intéressant de la privilégier...

Affluents[modifier | modifier le wikicode]

Cette rubrique est fondamentale dans l'étude de l'audience : elle permet de déterminer d'où viennent vos visiteurs lorsqu'ils visitent le site Internet. Elle répond aussi à de nombreux autres points : a quoi est due cette soudaine augmentation de la popularité du site ? Création d'un partenariat, meilleure indexation dans les moteurs de recherche, ou bien un bouche à oreille fonctionnant plutôt bien ? Si vous êtes bien référencé dans les moteurs, les visiteurs arrivent ils avec les mots clés que vous aviez prévu ?

Récapitulatif[modifier | modifier le wikicode]

Le camembert 2D résume et dresse un bilan global de l'affluence de votre site. Il donne les proportions (détaillées par la suite) des arrivées par moteur de recherche, par site internet référant (origine de la visite), ou par entrée directe. Certains considèrent qu'un camembert idéal est un camembert à peu près équilibré (environ un tiers des arrivés par chaque moyen), mais vous pouvez bien sûr vous-même fonder votre propre théorie du camembert.

Moteurs de recherche[modifier | modifier le wikicode]

Les moteurs de recherche prennent de plus en plus d'importance car de plus en plus sollicités par les utilisateurs. Le tableau présente les différents moteurs de recherche comptabilisés et leur proportion par rapport au total, et il est possible d'avoir les détails des mots clés utilisés pour chaque moteur (en cliquant sur le « + »). Vous constaterez certainement l'hégémonie du moteur Google qui à lui seul catalyse plus de 80% des recherches en moyenne. Néanmoins Piwik ne se limite pas aux moteurs les plus connus et gère ainsi plus d'une centaine de moteurs différents (la liste est en constante évolution).

Pour un webmaster, il est conseillé de connaître la qualité de son référencement : les moteurs de recherche apportent-ils un nombre conséquent de visites ? Suis je bien présent sur chacun d'entre eux ? M'apportent ils tous des visites ou bien seuls un ou deux moteurs sont pour moi rentables ? Vous pourrez accéder aux mots clés utilisés pour chaque moteur afin de voir si ces mots varient d'un moteur à l'autre. Si c'est le cas, quel moteur semble le plus pertinent ?

Mots clés[modifier | modifier le wikicode]

Le tableau vous présente les différents mots clés utilisés par vos visiteurs et qui ont permis d'aboutir sur votre site Internet. Cette indication est primordiale car elle permet de connaître les attentes en termes de contenu du site pour ces visiteurs (qui en général représentent entre 5 et 50% du total des visiteurs).

Si les mots clés vous semblent cohérents avec le contenu de votre site Internet, il est intéressant d'améliorer son positionnement sur les mots qui sont majoritairement utilisés (ne négligez pas pour autant les autres mots clés car ils pourraient être peu utilisés du fait d'un mauvais classement sur le moteur pour ces mots précis).

Si au contraire certains mots clés ne vous semblent pas parfaitement cohérents avec votre site, ou si les mots clés auxquels vous pensiez sont absents, posez vous les questions suivantes : les textes du site, les images et leur attributs alt, contiennent ils bien les chaînes qui m'intéressent ? Avez vous suffisamment utilisé ces mots sur le site ? (une phrase sur la page d'accueil décrivant le contenu ne suffit pas !). Pourquoi certains mots clés qui n'ont pas de rapport direct m'apportent ils des visiteurs ? Vos textes sont ils correctement ciblés, le vocabulaire employé est il cohérent (n'hésitez pas à employer des synonymes !).

En répondant à ces quelques questions, vous pourrez mettre en avant d'éventuels problèmes sur votre site, lesquels il faudra corriger pour obtenir un meilleur « rendement » de vos arrivés par moteurs de recherche, et avec des mots clés intéressants (généralement les mots clés qui n'ont pas de rapport avec le site entraîneront une visite à une page vue, ce qui n'est pas positif pour le site).

Sites Internet[modifier | modifier le wikicode]

Le tableau récapitulatif des sites Internet qui sont dits « référents » vous permettra de connaître les pages Internet qui ont permis d'accéder à votre site. Il est très intéressant de connaître les sites Internet qui vous apportent des nouveaux visiteurs, vous constaterez ainsi le succès (ou l'inefficacité) de votre partenariat avec tel ou tel site, vous pourrez découvrir les sites qui parlent de votre site et font des liens sans que vous n'en ayez fait expressément la demande (signe de qualité certaine pour votre site). De la même manière vous pourrez découvrir si l'on parle de votre site sur des forums de discussion, si des accès sont réalisés par des annuaires, etc. Avoir des liens vers son site est très important pour la promotion et pour se faire connaître, de plus cela permet d'améliorer son référencement dans les moteurs de recherche qui utilisent cette information pour leur classement des sites. L'algorithme PageRank de Google est ainsi largement basé sur le nombre de liens qui pointent vers votre site Internet (n'hésitez pas à consulter le site http://www.webrankinfo.com/ pour plus d'informations sur le référencement et sur Google).

Entrées directes[modifier | modifier le wikicode]

Le nombre de visiteurs ayant accédé directement au site correspond aux visiteurs ayant accédé au site en tapant l'adresse dans leur navigateur ou à partir de leur marque-pages (« favoris », « bookmarks », « signets », etc. en fonction du navigateur utilisé). Cela traduit bien souvent l'intérêt des visiteurs pour le site, car ils ont retenu l'adresse ou pris soin de l'enregistrer ; ce sont souvent des visiteurs fidèles, qui visitent régulièrement (ou à fréquence régulière) le site pour voir les nouveautés et les changements.

Archivage[modifier | modifier le wikicode]

L'archivage est un procédé unique dans les application libres et gratuites. Directement inspiré des méthodes utilisées par les entreprises professionnelles éditant ce type d'outils, l'archivage des données propose de très nombreux avantages et est même indispensable pour la consultation de statistiques sur des sites à fort trafic.

Présentation[modifier | modifier le wikicode]

L'archivage consiste à calculer toutes les statistiques de visites à partir des informations brutes enregistrées pour chaque utilisateur lors de leur visite sur le site web. Les résultats des calculs sont alors stockés définitivement dans la base de données.

L’archivage dynamique des données a de nombreux avantages : il permet une forte diminution de l’espace disque de la base de données (20% à 40%), économise les ressources serveurs (les calculs d’une période terminée ne sont effectués qu’une seule fois) et surtout un gain de performances saisissant : le temps d’exécution est de 5 à 20 fois plus court, ce qui permet l’accès à des statistiques plus poussées dans certains domaines (suivi du visiteur par exemple). Le développement de l’ensemble des fonctions d’archivage dynamique au sein de Piwik a nécessité plus de 60 heures de développement.

Piwik est la seule application libre à proposer cette puissante alternative, qui rend possible la consultation des statistiques temps réel sur des sites à fort trafic, et le développement de nouvelles analyses.

Comment fonctionne t-il ?[modifier | modifier le wikicode]

Son fonctionnement est simple : lors de la consultation d’une journée, l’archivage dynamique se lance automatiquement et calcule toutes les informations (toutes les données qui apparaissent lors de la consultation des statistiques) pour cette journée. La masse de calcul est considérable, notamment pour les sites à fort trafic, puisque la totalité des informations ’pré calculées’ peut représenter plusieurs centaines de milliers de caractères. Le tout est ensuite stockée sous forme de texte dans la base de données. Il ne reste alors qu’à faire une simple sélection des données (procédé très rapide à réaliser pour le serveur, donc qui utilise très peu de ressources) et à mettre en forme ces tableaux de données. Une fois les calculs effectués avec succès, les champs de la table des logs sont supprimés ; ils ne seront plus utilisés. Le gain d’espace disque est conséquent.

Pourquoi l’archivage systématique ?[modifier | modifier le wikicode]

Bien que l’archivage d’une journée puisse nécessiter plusieurs secondes de calcul, le calcul est effectué une seule fois pour toujours (il est stocké dans la base de données). Ainsi le serveur, à chaque consultation des différents statistiques pour la même date, ne doit pas ré-effectuer les mêmes masses de calcul comme ce serait le cas sans l’archivage. Le temps de calcul ne pose aucun problème sur des sites à faible trafic (entendons moins de 100 visites par jour), l’archivage a donc pour ceux-ci une fonction principale de ’purge des données’ et l’économie des ressources serveurs. La rapidité peut devenir problématique sur des sites à trafic moyen (300 visites par jour par exemple) et constitue l’ennemi principal des sites à fort trafic, lesquels ne peuvent pas calculer leurs statistiques dans un temps acceptable.

Archivage d’une période[modifier | modifier le wikicode]

La première fois que vous consultez les données d’une semaine ou d’un mois, l’archivage dynamique calcule les données pour cette période. Il base son calcul sur le calcul de chaque jour de la période ; cela signifie donc que si vous n’avez consulté aucun jour de la période, l’archivage calculera et stockera les données de chaque jour séparément avant de calculer la période sélectionné. La durée du calcul est là encore fonction du trafic : il est normal que sur une période comme la semaine, l’archivage mette quelques secondes à s’effectuer.

Constatez ensuite par vous-même la rapidité de chargement de toutes les pages ; une telle rapidité ne serait pas possible sans la phase d’archivage préalable.

Archivage temporaire[modifier | modifier le wikicode]

Si vous consultez des statistiques sur des périodes qui ne sont pas terminées (jour d’aujourd’hui, la semaine ou le mois en cours), la fonction d’archivage le reconnaîtra automatiquement et n’archivera que ’temporairement’ les données. Attention, il est déconseillé, pour les sites à fort trafic, de consulter les statistiques du jour en cours en raison de la quantité des informations à calculer, et ce à chaque page (l’archivage temporaire du jour d’aujourd’hui est recalculé à chaque consultation des statistiques).

Cela a moins d’importance pour la semaine ou mois en cours car ne sont archivés que les jours terminés, ce qui signifie que les statistiques ne prennent pas en compte les données du jour d’aujourd’hui non terminé. Il est de toutes façons beaucoup plus intéressant d’analyser des statistiques sur des périodes qui sont terminées, et de comparer ces données aux périodes précédentes elles aussi terminées.

Notes importantes pour les sites à fort trafic[modifier | modifier le wikicode]

Dans le cas de sites Internet à forte ou très forte audience, le calcul des statistiques de Piwik peut poser problème, car gourmand en ressources. Pour éviter que votre serveur ne soit pendant trop longtemps surchargé en pleine journée, nous conseillons activement aux administrateurs de configurer un « crontab » (système d'exécution programmée de programmes) pour lancer les calculs des statistiques dans la nuit, heure visiteurs. L'expérience montre que programmer le lancement des archivages des jours/mois/semaines à 3 heure du matin permettait de minimiser très fortement les gênes occasionnées.

D'un point de vue technique, il suffit de lancer la consultation des pages jours/semaines/mois, l'archivage se fera automatiquement.

Il faut donc visiter les pages :

Programmez le crontab (ou utilisez les services du site http://www.webcron.org et http://www.easycron.com) vers 4h du matin (heure la moins fréquentée). Notez qu'il faut laisser environ 20 min entre chaque page, pour laisser le temps au serveur de calculer les statistiques (notamment sur les sites à très fort trafic).

Rapidité et performances générales de l’application sur différentes configurations[modifier | modifier le wikicode]

Piwik est optimisé pour des fonctionnements optimaux sur tous les types de sites Internet. L'ensemble des phases de calcul a été optimisée, du point de vue php mais aussi des requêtes base de données.

Les sites à faibles fréquentations (inférieures à 400 visites/jour environ) sont parfaitement gérés, quelle que soit la capacité du serveur qui héberge Piwik.

Les sites moyens (de 400 à 2000 visites/jour environ) sont de la même manière très bien gérés, sur la plus grande majorité des hébergements gratuits et professionnels. Cela pourrait néanmoins poser des problèmes sur des serveurs de qualité limitée (ex de certains hébergeurs gratuits comme Free), qui limitent les temps d'exécution des scripts php, ce qui peut bloquer le calcul de l'archivage. Néanmoins les hébergements ainsi « bridés » sont très rares, et dans la grande majorité des cas vous ne rencontrerez aucun problème.

Les sites à fort trafic (environ plus de 2000 visites/jour) seront très bien gérés si le serveur hébergeant Piwik est rapide et performant. Un hébergement sur serveur dédié n'est pourtant pas nécessaire pour des fréquentations inférieures à 20000 visites/jour, si votre hébergement mutualisé propose de très bonnes performances. Au dessus de cette limite (qui n'a rien de précise, car elle dépend entièrement des qualités de votre hébergement), il sera sûrement nécessaire d'héberger Piwik sur un serveur dédié (celui de votre site, bien sûr). Les phases de calcul de périodes longues (périodes des mois notamment) sont très gourmandes en ressources et vous pourriez ne pas pouvoir archiver les périodes pour obtenir les statistiques que vous souhaitez.

Nous serions très intéressé d'obtenir de la part des utilisateurs leurs avis sur les performances de Piwik. Si vous voulez nous aider, nous vous proposons une courte démarche à réaliser (lisez la suite). Lorsque vous lancez l'archivage de vos stats sur le mois (le mois est fini ou non), Piwik effectue de nombreux calculs et requêtes sur la base de données (il enregistre ensuite toutes les données précalculées dans la base). Une fois cette phase terminée et que les statistiques demandées s'affichent à l'écran, vous avez tout en bas de la page le temps de génération de la page. Il peut être très faible (moins d'une seconde pour un mois entier sur des petits sites) ou très élevé (plus de 100 secondes sur des sites à grandes fréquentations). Voici les informations que nous aimerions recevoir :

  • temps de génération de la page (écrit en gris clair en bas de la page) pour la page qui vient d'effectuer le calcul d'archivage
  • nombre de visiteurs pour la période archivée (nous conseillons de faire ce test sur des mois terminés ou presque terminés)
  • hébergement gratuit ou professionnel (si vous le souhaitez, précisez la société)
  • type de l'hébergement : mutualisé (cela concerne la majorité des hébergements, signifie que le serveur qui vous héberge le fait pour plusieurs sites à la fois, d'où le terme de mutualisé) ou dédié (le serveur ne s'occupe que de votre site Internet, ou d'un très faible nombre, la rapidité est très élevée et les performances très importantes)

Merci d'avance aux utilisateurs de Piwik qui effectueront ce rapide test. Vous pouvez envoyer le résultat (temps de génération de la page + infos ci-dessus) via le formulaire de contacts sur le site officiel.


Fonctionnement

Cette partie plus technique a pour but de fournir une présentation du fonctionnement de l'application Piwik. Cette partie sera utile aux curieux et aux personnes désireuses de modifier Piwik selon leur besoin, pour par exemple ajouter de nouvelles fonctionnalités. Il est conseillé de contacter l'auteur avant d'essayer de programmer quelconque nouveauté, afin de discuter avec l'équipe de développement (qui a une très bonne connaissance de l'ensemble de l'application) de la meilleure solution technique à utiliser.

Arborescence et fichiers[modifier | modifier le wikicode]

Vous trouverez ci-dessous une rapide description des fichiers et répertoires de Piwik. Cela permettra aux personnes désirant personnaliser Piwik d’avoir une vision globale de l’architecture de l’application.

  • index.php : fichier principal de Piwik où est géré l'affichage des différentes rubriques de statistiques
  • Piwik.js : code javascript principal, appelé par le court code javascript situé sur les pages du site
  • Piwik.php : fichier appelé par le code Javascript qui permet l'enregistrement dans la base de données des logs des visiteurs
  • login.php : fichier permettant la connexion via les sessions php
  • config.php : fichier crée dynamiquement qui contient les informations sur la configuration générale de l'application : nombre de sites installés, login/mot de passe, adresse du Piwik sur le serveur, type de protection (statistiques ou seulement administration), affichage des graphiques, et affichage ou non du logo
  • configX.php : fichier crée dynamiquement qui contient toutes les informations sur l'accès à la base de données (identifiants, serveur, noms des tables). Contient aussi les paramètres GET à ne pas prendre en compte
  • langdispos.php : fichier crée dynamiquement qui contient les noms et fichiers des langues disponibles, ainsi que les noms et contacts des traducteurs
  • nomsites.php : fichier crée dynamiquement qui contient les noms et adresses des sites Internet configurés dans Piwik
  • styles.php : contient les styles CSS de Piwik (conformes à la norme CSS2)
  • version.php : contient le numéro de version
  • docs/
    • changelog : fichier journal des changements mineurs & majeurs entre les différentes versions depuis la création de Piwik
    • licence et licence_fr : licence GNU/GPL français (licence_fr) et anglais (license)
    • readme : rapides explications et redirection vers cette présente documentation
    • documentation.htm : cette présente documentation au format HTML (format PDF disponible sur le site officiel de Piwik)
  • graphs/
    • graph_*.php : fichiers générant les graphiques automatiquement (sélection base de données, formatage des résultats, routines JPGraph pour construction des images)
    • jpgraph_*.php : fichiers contenant toutes les fonctions et classes pour la génération dynamique des images. JPGraph est une puissante librairie distribuée sous license QPL 1.0 (cf description JPGraph).
    • tri_graph.php : fichier de traitement des tableaux issus de la sélection de la base de données afin de correctement les formater et les trier
    • config_graph.inc.php : variables utilisées dans la génération des graphiques (dimensions, couleurs, polices, tailles, etc.)
    • graphs/fonts/ (répertoire contenant les polices utilisées dans la génération des graphs)
    • graphs/maps/ (répertoire contenant les cartes utilisées pour la génération des mappemondes dynamiques, ainsi que la barre indiquant les couleurs en fonction des pourcentages)
  • images/
  • logos/ : logos de Piwik sélectionnables pour l'affichage sur les sites internet audités. Les contributions des utilisateurs sont régulièrement ajoutées à ce répertoire et automatiquement pris en compte dans la pop-up de sélection des logos
  • browsers/ : logos des navigateurs
  • os/ : logos des systèmes d'exploitation
  • flags/ : logos des pays (images des drapeaux de tous les pays)
  • include/
    • adminconfig.php : fichier qui gère la rubrique administration et configuration
    • archiver_jour.php : fonction d’archivage d’un jour donné
    • archiver_periode.php : fonctions d’archivage d’une période donnée ; fonctions d’archivage automatique d’une semaine et d’un mois
    • calc_affluents.php : calcule les tableaux de données pour les affluents
    • connect.php : connexion et sélection MySQL
    • coord_pays.php : coordonnées des labels des noms de pays pour l'écriture sur la mappemonde
    • footer.php : fichier qui contient le bas de page html des pages générées
    • functions.php : fonctions php nécessaires à l’affichage et la configuration/installation
    • functions_disp.php : fonctions utilisées dans l'affichage de données à l'écran
    • functions_phpmv.php : fonctions utilisées pour l'enregistrement des logs des visiteurs
    • header.php : contient les meta-tags, balises d’ouverture de page, etc.
    • install.php : fichier qui gère l'installation
    • list_logos.php : pop-up dynamique qui liste les logos de Piwik disponibles
    • mappemonde.php : calculs, pointage des pays, affichage de la mappemonde et des continents
    • menu.js : menu horizontal déroulant compatible XHTML
    • microtime.php : fonction permettant de connaître le temps d’exécution du script
    • moteurs.php : tableau des moteurs de recherches
    • navigateur.class.php : fichiers qui permet la détection du navigateur et du système d'exploitation
    • os.php : tableaux des systèmes d’exploitation
    • set_lang.php : fichier qui définit la langue utilisée pour la consultation de Piwik
    • test_db_cfg.php : tests de connexion/sélection à la base MySQL lors de l’installation
    • vars.php : contient de nombreuses définitions de variables et de traitement de la période sélectionnée
    • include/display/
      • calendrier.php : fichier d’affichage du calendrier en fonction de la date sélectionnée ; colore la période sélectionnée ; prend en compte la date de début des statistiques
      • period_selection.php : affiche le menu de sélection de la période à analyser
      • sites_selection.php : affiche le menu déroulant permettant la sélection des sites
      • topmenu.php : affiche le menu principal de sélection des rubriques
  • /langs
    • compare.php : fichier en cours de test qui permet la comparaison du fichier de langue original et d'un fichier traduit.
    • encode2utf8.php : fichier qui convertit un fichier spécifié dans le jeu de caractères UTF-8 (voir la partie Traductions pour plus d'informations)
    • update_lg_files.php' : fichier qui permet l'ajout automatique des phrases anglaises dans toutes les traductions qui ne sont pas à jour. Cela permet de toujours avoir tous les fichiers de langues à jour (certains seront donc un mélange de la langue et d'anglais). Les traducteurs n'ont alors qu'à traduire les phrases en anglais pour maintenir à jour les traductions.
    • xx-utf-8.php : fichier des textes de la langue xx
    • show.php : affiche le code colorié d'un fichier donné

Architecture des tables de la base de données[modifier | modifier le wikicode]

Lors de l’installation ou de l’ajout d’un nouveau site, 6 tables sont créées dans la base Mysql configurée

  • phpmv
  • phpmv_pv
  • phpmv_suivi
  • phpmv_ajours
  • phpmv_asemaines
  • phpmv_amois
  • phpmv_bdd_vars

Table phpmv[modifier | modifier le wikicode]

Champ Description Type
Id auto_increment Mediumint(7)
IdVisiteur Id du cookie du visiteur varchar(32)
nv Nv=1 si c'est la première visite, 0 sinon tinyint(1)
date Date du serveur lors de la première page vue date
time Heure locale du visiteur time
stime Heure du serveur time
ttime Temps total de visite du visiteur mediumint(5)
referrer Page referrer varchar(255)
pv_debut Page d’arrivée sur le site varchar(255)
pv_fin Page de sortie (dernière page vue) varchar(255)
nb_pv Nombre de pages vues par le visiteur smallint(4)
host HOST du visiteur varchar(100)
ip IP du visiteur varchar(20)
os Système d’exploitation char(3)
navig Navigateur varchar(6)
resol Résolution (largeur x hauteur) varchar(9)
coul Profondeur de l’écran (en bits) tinyint(2)
pays Pays (après traitement de host et lang navig) char(2)
lang_navig Langue du navigateur (utile pour debug) varchar(10)
agent Agent (utile pour debug). Infos navigateur et os varchar(150)
flash Acceptation du plugin tinyint(3)
director idem tinyint(3)
quicktime idem tinyint(3)
real idem tinyint(3)
windowsmedia idem tinyint(3)
pdf idem tinyint(3)
java idem tinyint(3)

Dans cette table sont stockées toutes les informations sur le visiteur (voir tableau ci-dessus pour détails) qui seront ensuite retraitées lors de l’archivage. Chaque nouvelle visite est accompagnée d’un nouvel enregistrement dans cette table. Si le visiteur est connu, on update ’ttime’, ’pv_fin’ et ’nb_pv’.

Chaque champ est optimisé au maximum; les enregistrements et sélections dans cette table doivent être le plus rapide possible, car plusieurs requêtes sont effectuées pour chaque page vue (par le fichier Piwik.php).

Table phpmv_pv[modifier | modifier le wikicode]

Champ Description Type
Id auto_increment smallint(5)
page URL de la page varchar(255)
nb Nombre de hit sur cette page à la date date Smallint(5)
date Date correspondante Date

Lorsqu’une page est visitée pour la première fois pour un jour donné, un nouvel enregistrement a lieu dans la table phpmv pv. Si la page a déjà été visitée pour la date donnée, on update nb.

Table phpmv_suivi[modifier | modifier le wikicode]

Champ Description Type
id auto_increment mediumint(8)
page1 Page vue précédant la page vue notée page2 varchar(255)
page2 Page vue sélectionnée, précédée de la page1 varchar(255)
nb Nombre de visiteur ayant réalisé le trajet page1 - page2 smallint(5)
date Date correspondante date

À chaque page vue, si le suivi page1 - page2 est enregistré dans la table pour la date donnée, on update nb. Si le suivi n’a pas encore été fait par un visiteur, on l’insère dans la table avec nb valant 1.

Tables archives (phpmv_a*)[modifier | modifier le wikicode]

Champ Description Type
id auto_increment smallint(5)
done 1 : ok ; 2 : temporaire ; vide : problème tinyint(1)
date Date de la période archivée (ou du début de la période) date
visiteurs Nombre de visiteurs uniques mediumint(8)
vis Nombre de visites mediumint(8)
vis_hs Visites par heure serveur text
vis_hl Visites par heure locale (ainsi que proportion domicile/travail) text
pv Nombre de pages vues total mediumint(8)
pv_hs Pages vues par heures serveur text
pv_hl Pages vues par heure locale text
pv_diff Nombre de pages accédées différentes smallint(5)
pv_max Nombre de pages vues max pour une visite smallint(5)
vis1pv Nombre de visite à une page vue smallint(5)
hit_pv Nombre de visites par page vues pour chaque page longtext
hit_nbpv Nombre de visiteurs par nombre de pages vues text
hit_time Nombre de visites par temps par chaque période d’une minute text
sum_time Somme des temps de visite en secondes mediumint(8)
pv_debut Nombre de visites par page d’entrée longtext
pv_fin Nombre de visites par page de sortie longtext
suivi Nombre de visites pour chaque ensemble page1 - page2 longtext
pays Nombre de visites par pays pour chaque pays text
fai Nombre de visites par provider pour chaque provider mediumtext
os Nombre de visites par OS pour chaque OS text
navig Nombre de visites par navigateur pour chaque navigateur text
resol Nombre de visites par résolution pour chaque résolution text
coul Nombre de visites par profondeur d’écran (en bits) varchar(255)
plugins Taux d'acceptation des plugins varchar(255)
moteurs Nombre de visites par moteur pour chaque moteur mediumtext
mots Nombre de visites par mot clé pour chaque mot clé mediumtext
sitesrefs Nombre de visites par site referrer pour chaque site referrer mediumtext
nb_moteurs Nombre de visites provenant d’un moteur de recherche smallint(5)
nb_sites Nombre de visites provenant de liens sur d’autres sites smallint(5)
nb_direct Nombre de visites directes smallint(5)

La table des archives des mois et semaines présentent un champ supplémentaire : ’date_fin’ qui indique la date de fin de la période archivée ; cela permet de savoir s'il est utile de recalculer les archivages pour les périodes temporaires.

Dans les tables d’archivage sont stockées toutes les statistiques pré-calculées. Chaque champ est ensuite sélectionné puis affiché dans les pages de consultation des statistiques. Les champs de type ’text’, ’mediumtext’ et ’longtext’ sont des tableaux php sérialisés. Les autres champs sont des valeurs numériques.

En version 1.1, les champs ’pv debut’, ’pv fin’, ’hit pv’ et ’suivi’ sont passés au type LONGTEXT. La mise à jour est automatique lors de l’installation.

Valide XHTML 1.1 CSS[modifier | modifier le wikicode]

L’évolution du HTML vers le XHTML est la conséquence de nouvelles attentes, les aspects d'accessibilité, la multiplication des supports de lecture et les habitudes de programmation de plus en plus basées sur des pages construites dynamiquement. Le HTML pose de problèmes pour ces pratiques, car la structure est très rigide, le contenu et la mise en forme étant mélangés. Avec le XHTML, les données sont séparées de la mise en forme qui sera assurée en fonction du support par des feuilles de style CSS. Le XHTML est basé sur le XML qui est un langage de description des données, toutes les balises de présentation du HTML sont donc devenus obsolètes. Un autre gros avantage du formatage des données est d’avoir des pages beaucoup plus légères et un traitement amélioré par les navigateurs et au final une navigation plus confortable pour les internautes et une maintenance facilitée pour les programmeurs.

Pour Piwik l’avantage est de pouvoir personnaliser facilement la présentation en ne modifiant que les feuille de styles. Tous les navigateurs récents sont maintenant supportés (IE >= 5, Mozilla et ses dérivés, Opera 7, Konqueror 3), mais le rendu avec les anciens navigateurs comme Netscape 4.X est très sommaire. Si vous disposez d'un de ces navigateurs avec lesquels la consultation des statistiques de Piwik ne vous est pas possible, nous vous recommandons vivement l'utilisation du splendide navigateur Firefox, qui est très stable, rapide, puissant et complet. C'est le nouveau-né de la famille Mozilla, qui se compare aisément en termes de fonctionnalités avec Internet Explorer (il le surpasse même dans la quasi totalité des domaines). Pour le télécharger, visitez le site http://www.mozilla.org/products/firefox/ : bon surf !

Librairie graphique[modifier | modifier le wikicode]

Les graphiques de Piwik sont générés grâce à la puissante librairie JPGraph (http://www.aditus.nu/jpgraph/) distribuée sous license QPL. Il faut bien noter la différence de licences, ce qui explique que JPGraph ne soit pas directement inclue à l’application, il est nécessaire de laisser les fichiers distincts avec la notice de la license QPL en haut de chaque fichier jpgraph*.php.

Les graphiques disponibles dans Piwik sont de plusieurs types :

  • graphiques à barres verticales détaillant le nombre de visites/pages vues par heure serveur et heure locale, le nombre de visites par temps de visite ou encore le nombre de visiteurs par nombre de pages vues.
  • graphiques de type camembert 3D pour tous les résumés des statistiques concernant les pays d’origine des visiteurs, les configurations matérielles (OS, navigateurs, résolutions, profondeur de couleur).
  • graphique de type camembert 2D pour le résumé des referrants (sites, moteurs de recherche ou entrée directes).

Les graphiques ne sont pas stockés sur le serveur mais recalculés à chaque consultation. Dans une prochaine version, les possibilités de cache permises par JPGraph seront certainement utilisées, ce qui limitera les ressources serveur utilisées lors de la génération des graphiques.

Sécurité générale[modifier | modifier le wikicode]

La sécurité dans Piwik est un domaine sur lequel l'équipe de développement travaille constamment. Piwik utilise le procédé des sessions php pour la connexion, procédé inviolable et entièrement sécurisé. Le mot de passe pour accéder à l'administration est codé dans le fichier de configuration. De nombreux tests sont réalisés afin d'empêcher toute tentative de hacking via Piwik (SQL Injection ou Cross Site Scripting).

Néanmoins il convient de respecter les règles suivantes afin de minimiser les problèmes :

  1. ne pas permettre l'affichage de phpinfo(); sur aucune page visible de votre site
  2. mettre « register_globals » à « off » dans votre configuration php
  3. mettre « display_errors » à « off », et « log_errors » à « on ». C'est très important car les messages d'erreur sont une mine d'informations énorme pour un pirate. Même si en temps normal aucune erreur ne s'affiche sur votre site, le pirate fait en sorte d'afficher les erreurs lui-même, et il en tire de nombreuses informations.
  4. faire des sauvegardes régulières de sa base de données (donc des données des tables de Piwik), cela évite de tout perdre en cas d'attaque
  5. penser à créer un mot de passe complexe avec lettres et chiffres et au moins 6 caractères de longueur (il est très facile de créer un script pour attaquer un site web par dictionnaire, il y a même des logiciels qui font cela, et qui fonctionnent très bien quand le mot de passe est simple)
  6. le mot de passe admin NE DOIT PAS être le même que le ftp et/ou le mysql (ce que l'on voit trop souvent).

Il est évident de plus qu'il ne faut pas éditer les fichiers de Piwik sans être sûr de soi, afin de ne pas créer d'éventuelles failles de sécurité ou autre.

En respectant ces quelques règles, vous n'aurez presque aucune possibilité de vous faire pirater votre serveur, nous vous conseillons donc de les suivre précisément (si vous en avez les possibilités).

Ajouter un moteur de recherche[modifier | modifier le wikicode]

Vous pourrez rencontrer, dans les statistiques de la rubrique « Affluents », des arrivées par des sites Internet qui n'en sont pas réellement : certains peuvent en effet être des moteurs de recherche qui ne sont pas reconnus comme tel par Piwik. Pour corriger ce problème, il vous suffit d'ajouter ce moteur dans la liste des moteurs gérés par Piwik, en éditant le fichier /core/datas/searchEngines.php et en créant une nouvelle ligne contenant le nom, l'adresse Internet du moteur, et la variable qui contient les mots clés lorsque vous effectuez une recherche. Pour connaitre cette variable, effectuez vous-même une recherche sur le moteur que vous souhaitez ajouter à la liste, et observez l'URL de la page où sont affichés les résultats. Par ex pour Google, en cherchant « Piwik », la page sera de la forme http://www.google.fr/search?q=Piwik. Il peut y avoir de nombreuses autres variables mais relevez seulement celle contenant le mot clé recherché. La ligne du fichier moteurs.php sera de la forme :

 "www.google.fr" => array("Google", "q"),

Si vous ajoutez ainsi des moteurs de recherche, merci de prévenir l'équipe de développement afin qu'ils soient directement intégrés à la prochaine version.

Calendrier interactif[modifier | modifier le wikicode]

Le calendrier interactif permet de sélectionner une date d’étude pour les statistiques rapidement et intuitivement. Une liste déroulante propose le choix entre tous les mois depuis l’installation de Piwik. Lors d’un changement de mois, le type de période d’analyse (jour, semaine ou mois) est conservé. Les jours de la période d’analyse sont de couleur orange. Les autres jours analysables sont de couleur bleu. Les jours non analysables sont grisés. Le jour considéré comme premier jour d'installation de Piwik est la date contenu dans le premier champ de la table « phpmv » (avec id=1) ; ce champ n'est jamais supprimé car il permet d'avoir connaissance du premier jour d'installation de Piwik sur le serveur. Si vous l'avez supprimé par mégarde, éditez le premier champ de votre table « phpmv » et remplacez la valeur du id par 0 et la valeur de la date par la date du premier jour de votre installation (respectez bien la norme MySQL : aaaa-mm-dd).

Gestion de plusieurs sites[modifier | modifier le wikicode]

La gestion de plusieurs sites dans Piwik est gérée de manière très simple. À la création d’un nouveau site à auditer, des nouvelles tables sont créées (avec le numéro du site suivant le préfixe) sur le serveur configuré, dans la base MySQL configurée. Ensuite, seul le nom des tables change dans les requêtes MySQL d’affichage, d’archivage, etc. Le reste de l'application reste inchangé.

Échelle de couleur pour la mappemonde[modifier | modifier le wikicode]

L'échelle de couleur pour la mappemonde n'est à notre sens pas encore optimale, dans le sens où nous pensons qu'elle pourrait être plus précise (plus de nuances de couleurs ? Des couleurs plus distinctes ? Ou au contraire une teinte plus unie mais progressive ?).

Quoi qu'il en soit, il vous suffit d'éditer l'image de la barre de couleurs, et les nouvelles couleurs seront automatiquement prises en compte sur la mappemonde. Il est par contre nécessaire de garder les mêmes dimensions pour l'image de la barre.

Si vous arrivez à un résultat concluant, n'hésitez pas à nous faire part de l'image !

Logos Piwik[modifier | modifier le wikicode]

Tous les logos disponibles à l'affichage sur les pages des sites audités sont des logos soumis par les utilisateurs de Piwik ! L'idéal serait de toujours enrichir cette base de données de logos afin que chacun trouve le logo qui sied parfaitement à l'esprit graphique de son site Internet.

N'hésitez donc pas à soumettre vos créations de logos à l'équipe de développement ! (Sur les forums officiels par exemple)


Traductions

Langues disponibles[modifier | modifier le wikicode]

Les langues disponibles sont :

  • le français
  • l'anglais
  • l'indonésien
  • l'italien
  • le néerlandais
  • le portugais
  • le russe
  • le suédois
  • le chinois simplifié
  • l'hébreu
  • l'espagnol
  • le finlandais
  • le tchèque
  • l'allemand
  • le polonais
  • le slovène

Pour utiliser ces différentes langues, il vous suffit de télécharger la dernière version disponible de Piwik et de sélectionner la langue souhaitée via le menu en haut à droite, dans l'interface de Piwik.

Participer aux traductions[modifier | modifier le wikicode]

Vous pouvez participer au développement de Piwik dans plusieurs langues, soit en traduisant vous-même l'application dans une nouvelle langue, soit si votre langue est déjà disponible, en corrigeant les éventuelles fautes ou erreurs du traducteur.

Comment ajouter une langue dans Piwik ?[modifier | modifier le wikicode]

Si vous souhaitez utiliser Piwik dans une langue autre que celles qui sont proposées, il vous suffit de traduire vous-même l'application. La traduction de Piwik nécessite une parfaite connaissance de la langue dans laquelle la traduction est effectuée ; en effet, il y a de nombreux termes techniques et formulations de phrases qui sont peu communes et nécessite une retranscription parfaite (orthographique et grammaticale).

Pour ajouter une langue, il suffit de suivre les étapes suivantes.

traduire le fichier « en-utf-8.php » ou « fr-utf-8.php »[modifier | modifier le wikicode]

Ce fichier contient toutes les chaînes texte affichées dans Piwik. La traduction du fichier répond aux quelques règles simples suivantes.

  • Comme dans toute traduction, il est nécessaire de rester le plus proche possible du texte original, en donnant toutes les informations présentes. Par exemple, dans le terme « Graphique des visites par nombre de pages vues » il est important de traduire « Graphique » et de ne pas omettre la fin de la chaîne ou de la traduire par « et nombre de pages vues » car ce n'est pas le bon sens.
  • Il ne faut pas changer les caractères à gauche du signe = : ce sont les noms des variables des langues (ex : $lang['logo_description']). La traduction n'est faite que pour les chaînes de caractères à droite du =, entre les guillemets simples.
  • Le texte situé après le « // » final est un commentaire. Il indique en général le contexte d'apparition de la phrase à traduire. Il peut indiquer aussi si le texte est utilisé sur un graphique, auquel cas il faut s'efforcer de faire une traduction courte, car la place est très limité sur les graphiques.
  • Il ne faut pas mettre de caractères " (guillemets doubles) car ils ferment le texte en php, et cela provoquerait une erreur dans le fichier. Il faut se limiter aux guillemets simples : '. Si vous utilisez un caractère qui pose problème (le « $ », « \ » ou « " ») il faut les précéder d'un « \ ». Ce qui donnera « \$ », « \\ » et « \" ».
  • Pour les informations techniques, nous conseillons de mettre le nom complet (au lieu du pseudonyme), et de fournir l'adresse email du traducteur, afin que celui-ci puisse être contacté en cas de problème avec la traduction. Pour le code ISO, voyez le tableau des pays à la fin du fichier qui donne le code correspondant au pays de la langue dans laquelle la traduction est faite.
  • Dans les textes à traduire, vous trouverez souvent « %s ». Ce code ne doit pas être transformé, mais seulement déplacé dans la phrase et placé à l'endroit où il doit être utilisé. Le « %s » remplace généralement un nombre, une date, ou d'autres textes (un lien vers la documentation, vers le site officiel, etc.). Il faut que dans le texte traduit, il y ait autant de caractères « %s » que dans le texte original. Parfois, en commentaire, le texte qui remplace le %s est donné, afin que le traducteur ait une idée ce que donnera la phrase une fois générée dans Piwik.
  • De même, d'autres codes peuvent se présenter. Le « &amp; » remplace le caractère « & » (esperluette, signifiant « et ») ; vous n'êtes pas obligé de le laisser dans la traduction, si ce caractère n'est pas utilisé dans la langue que vous traduisez. Les balises « <strong> » et « </strong> » doivent par contre obligatoirement figurer dans la traduction, et doivent entourer le même texte que dans la chaîne originale.
  • Pour la traduction des dates, il s'agit de donner l'ordre des différents termes dans une phrase dans la langue dans laquelle la traduction est effectuée. En français, on dit « Lundi 10 novembre » mais par exemple, dans une autre langue, l'équivalent pourrait être « Novembre Lundi 10 ». Il faut ainsi mettre "%monthlong% %daylong% %daynumeric% " (mois, jour, numéro) au lieu de "%daylong% %daynumeric% %monthlong%" (jour, numéro, mois). Veillez bien à mettre les deux signes % et à ne pas oublier de lettres dans les « codes » correspondant aux dates.

encoder le fichier « xx-utf-8.php » dans le jeu de caractères UTF-8[modifier | modifier le wikicode]

Une fois le fichier entièrement traduit, il faut l'encoder dans le jeu de caractères UTF-8. Pour cela il suffit d'éditer le fichier « /langs/encode2utf8.php » et de renseigner les quelques variables :

  • $file_to_encode correspond au fichier « autre.php », fichier qui contient les chaînes traduites.
  • $file_final est le nom du fichier final. Vous pouvez le nom que vous voulez, SAUF bien sûr « encode2utf8.php » ou « autre.php ». Choisissez par exemple (par défaut) « nouvelle_langue.php ».
  • $charset_initial est le jeu de caractères utilisé pour traduire les chaînes.
  • $charset_final est le jeu de caractères utilisé par Piwik, UTF-8 par défaut. Vous ne devez pas le changer.

Une fois les variables renseignées, il suffit d'executer le fichier « /langs/encode2utf8.php » en vous rendant sur l'adresse du fichier, par ex. http://www.monsite.com/Piwik/langs/encode2utf8.php ». Votre fichier « autre.php » doit se trouver dans ce même répertoire « langs/ ».

installer le nouveau fichier de langue dans Piwik[modifier | modifier le wikicode]

Pour cela, rien de plus simple, il suffit de vous rendre dans la partie Administration > Gestion des langues. Le fichier de langues sera automatiquement recrée et votre nouveau fichier sera pris en compte. Vous pouvez alors changer la langue pour spécifier votre traduction.

Lors de la consultation des statistiques en utilisant le fichier de langue que vous avez crée, vous trouverez peut-être quelques erreurs de frappe, ou autres problèmes (nombres qui ne s'affichent plus, car peut être avez vous oublié le %s ?). Il vous suffit alors, pour mettre à jour votre fichier, de corriger les erreurs dans le fichier « autre.php » puis de ré-encoder ce fichier en exécutant « /langs/encode2utf8.php ». Vous pouvez faire cela autant de fois que nécessaire jusqu'à ce que la traduction soit parfaite !

transmettre le fichier de langues à l'équipe de développement[modifier | modifier le wikicode]

Votre travail de traduction étant terminé, il vous reste à nous le transmettre (voir formulaire de contact sur le site officiel) afin que celui-ci soit accessible à tous dès la prochaine version publique de Piwik. Vous serez cité dans les remerciements dans l'application et dans cette présente documentation. Merci d'avance à tous les traducteurs !

J'ai trouvé une faute dans la traduction : que dois je faire ?[modifier | modifier le wikicode]

Il est alors inutile de contacter l'équipe de développement, car seul le traducteur peut corriger les éventuelles erreurs de frappe ou linguistiques. Contactez alors le traducteur via les remerciements dans l'application (son email y figure) et précisez l'endroit et la phrase qui pose problème. Proposez aussi une correction de cette phrase. Attendez ensuite sa réponse, et si tout se passe bien votre correction sera présente dans la prochaine mise à jour.

Si le traducteur ne répond pas, contactez alors l'auteur de l'application (via le formulaire de contact sur le site officiel) et proposez une correction de la chaîne qui pose problème ; nous ferons de notre mieux pour l'intégrer à la prochaine version. D'avance merci à tous les re-lecteurs !

Remerciements aux traducteurs[modifier | modifier le wikicode]

Sans ces personnes, Piwik ne serait pas disponibles dans différentes langues. Un grand merci à tous ces contributeurs :

  • David Carrington, Dennis Levin, Mathieu Gagné pour la traduction anglaise
  • Angga Wisnu pour la traduction indonésienne
  • Giuseppe Scarpi, Mickael from Venice pour la traduction italienne
  • Katrien Cogghe pour la traduction néerlandaise
  • Leandro Batista Lameiro pour la traduction polonaise
  • Иван Коваленко pour la traduction russe
  • Michael Alvmarken pour la traduction suédoise
  • Mark Cai pour la traduction en chinois (simplifié)
  • Omer Hanetz pour la traduction en hébreu
  • Sergio Lopez pour la traduction en espagnol
  • Jarno Tukiainen pour la traduction en finlandais
  • Vladimír Jarý pour la traduction tchèque
  • Manuel Sammeth pour la traduction en allemand
  • Wojtek Woźny pour la traduction polonaise
  • Migel Mehlmauer pour la traduction slovène
  • Corinne Langston pour la traduction anglaise du site Internet
  • Arona Ann Pearlstein pour la traduction anglaise de la documentation


Soutien

Poser une question et obtenir une réponse[modifier | modifier le wikicode]

Si vous avez une question à propos de Piwik, que ce soit au niveau des statistiques fournies ou de l'utilisation même du logiciel (problème d'ergonomie, fonctions non comprises, etc.), n'hésitez pas à la soumettre sur le forum « Suggestions et questions diverses » du site officiel. Néanmoins assurez vous que votre question, ou une question similaire, n'ait pas déjà été posée (pour cela effectuez une recherche sur le forum). Si une question similaire a déjà été posée mais qu'elle ne correspond pas parfaitement, essayez de préciser votre demande au sein du sujet déjà existant : cela ne sert à rien de dupliquer les sujets du forum, sauf à faire perdre du temps à l'équipe et aux utilisateurs !

Bien sûr, pour obtenir une réponse, il faut que votre demande soit claire et précise. N'oubliez pas non plus d'être un minimum poli, les personnes qui vous répondront le feront sur leur temps libre.

Soumettre un bogue[modifier | modifier le wikicode]

Il est fortement conseillé, si vous rencontrez un bogue dans l'utilisation de Piwik, de soumettre ce bogue à l'équipe de développement. Il est pour nous très important de corriger tous les bogues connus pour rendre Piwik le plus stable et sûr possible. Les rapports de bogues sont faits dans le forum prévu à cet effet sur le site officiel.

Voici quelques recommandations à prendre en compte avant de soumettre un bogue dans le forum :

  • Tout d'abord assurez-vous que le bogue soit reproduisible ; un bogue reproduisible est un bogue solutionnable. S'il ne l'est pas, efforcez vous de décrire le plus précisément possible le contexte dans lequel il est apparu (rubrique parcouru, type de période sélectionné, action précédente, etc.). Si vous parvenez à répéter le bogue, décrivez précisément le protocole pour le reproduire. Accessoirement donnez l'adresse de votre site et de votre installation de Piwik afin que l'équipe puisse directement voir le problème.
  • Ensuite il est indispensable d'effectuer une recherche dans le forum ET dans la FAQ (foire aux questions) pour voir si votre bogue a déjà été soumis. Il est très déconseillé de poster un même bogue plusieurs fois dans le forum, cela n'aura pour but que de ralentir l'équipe ; le temps perdu à faire le tri le sera sur la correction. Si votre bogue est déjà soumis, essayez de compléter la description du problème en répondant au sujet du forum correspondant : faites alors votre propre description si elle semble différente de la description déjà présente.
  • Si votre bogue n'a pas été encore soumis par un autre utilisateur, vous pouvez alors créer un nouveau sujet. Le titre du sujet doit être très clair et doit parler du problème rencontré ; interdisez vous par exemple les sujets « ça ne marche pas » ou « bogue dans Piwik », préférez « présentation des données inversée » ou « archivage du mois : résultats faux ». N'oubliez pas de cocher la case pour recevoir les réponses par email afin que vous puissiez répondre si l'équipe a des questions spécifiques à poser, le bogue sera plus vite résolu. Cela est très frustrant pour nous si l'utilisateur qui a découvert un bogue ne répond plus aux demandes et questions que l'équipe de développement se pose. Dans le corps même de la description du bogue, nous conseillons de noter (si vous en avez connaissance) :
    • votre type de serveur et la version. Ex : Apache 1.2.22, IIS 4, Sambar, etc.
    • la version de PHP ET les librairies installées et configurées. Ex : PHP 4.1.1 avec GD2 et FreeType
    • votre version de base de données. Ex : MySQL 3.23.32

Pour obtenir ces informations, le plus simple et rapide est de créer un fichier 'phpinfo.php' sur votre serveur contenant le code suivant : <?php phpinfo(); ?> Rendez vous ensuite sur ce fichier avec votre navigateur et vous trouverez toutes les informations nécessaires précédentes relatives à votre configuration.

Il faut être le plus rigoureux possible lors de la description du bogue. Comme expliqué ci-dessus, une bonne description fera gagner énormément de temps et le bogue pourra être rapidement corrigé. Une fois le bogue corrigé, vous serez averti sur le forum et par email de la solution ; vous pourrez alors la corriger vous-même ou attendre la prochaine version. Merci d'avance de votre aide !

Suggérer une amélioration[modifier | modifier le wikicode]

Si une fonctionnalité non présente dans Piwik vous serait utile, ou si une fonctionnalité déjà présente ne vous semble pas pratique, n'hésitez pas à en faire part à l'équipe de développement. Il vous suffit de poser un message dans le forum « Suggestions et questions diverses » sur le site officiel. Assurez vous au préalable que votre requête n'a pas déjà été effectuée par un autre utilisateur (faites une recherche sur le forum).

Si votre demande semble pertinente, elle pourra être prise en compte par l'équipe de développement qui l'ajoutera à la liste des fonctionnalités à implémenter dans une prochaine version. N'hésitez pas, de nombreuses nouvelles fonctionnalités ont été implémentées suite à des demandes de la part des utilisateurs. Gardez bien sûr à l'esprit que les développeurs sont volontaires et non rémunérés, aucune garantie n'est donnée sur la suite de votre demande.

Si une fonctionnalité vous manque semble vraiment indispensable, le plus simple est de participer au développement, toute contribution est accueillie avec enthousiasme et l'équipe de développeurs vous soutiendra et vous aidera avec plaisir.



A propos

Pourquoi le projet Piwik ?[modifier | modifier le wikicode]

La création du projet Piwik répond à un important besoin de disposer d'un logiciel libre (et gratuit) qui propose les principales fonctionnalités des outils professionnels (et payants). Piwik n'a pas la prétention de concurrencer directement les outils payants déjà existants, dont certains sont très complets et sur lesquels travaillent plusieurs développeurs à temps plein. Piwik se situe plutôt au niveau des outils gratuits issus de ces outils payants (dont les fonctionnalités sont en général « bridées » et qui obligent l'affichage d'un logo de publicité), à la différence près que Piwik n'oblige à rien, vous laisse la liberté et le contrôle total de votre outil de statistiques. Aux utilisateurs de faire leur choix !

Bref historique[modifier | modifier le wikicode]

L'histoire de Piwik est courte (le logiciel est paru en version officielle depuis à peine un an), mais elle n'est pas réellement classique car certains événements m'ont permis de développer Piwik plus rapidement que si j'avais dû le faire seulement pendant mes temps libres...

La première version de Piwik, appelée à l'époque « bêta 0.1 », a été développée de juillet à Septembre 2002, puis en Mars-Avril 2003, afin d'être présentée au « Concours européen des jeunes créateurs multimédia », le concours « SoftQuiPeut », qui se déroulait les 4 et 5 avril 2003 au palais des congrès du Futuroscope. Élue vainqueur du prix des concurrents, j'ai gagné (avec un ami) un stage de 5 semaines au Québec, à Montréal.

Ce stage, effectué dans une entreprise de bêta-test de jeux vidéos, m'a permis de me consacrer au développement de la version 1.0 de Piwik ; le directeur de l'entreprise était en effet très intéressé par les statistiques de son site Internet, et souhaitait disposer d'un outil complet qui réponde à ses principales interrogations. J'ai ainsi pu travailler l'équivalent d'un plein temps pendant 3 semaines sur Piwik. La première version, la b0.1, souffraient de nombreux problèmes, principalement dus à des erreurs de conception de l'architecture du logiciel. Le développement de la version 1.0 a nécessité une totale réécriture du code source ; elle a été publiée, après de nombreux tests sur des sites partenaires, le 10 octobre 2003.

La version 1.1
publiée en version stable le 25 décembre propose d'intéressantes améliorations (choix des variables GET, ne pas prendre en compte le webmaster dans les statistiques) mais surtout corrige de nombreux petits bugs qui rendent cette version particulièrement stable et sûre.
La version 1.2
est un grand pas pour Piwik, puisque dorénavant les traductions sont réalisables dans toutes les langues existantes. Cette caractéristique a nécessité énormément de travail (partagé entre Marc et Matthieu), et l'application a aussi été convertie intégralement en XHTML/CSS valide ; plus modulaire, plus complète (ajout de statistiques), plus ergonomique (de nombreuses corrections suite à des suggestions d'utilisateurs), plus sécurisée (de nombreuses améliorations dans ce sens), et plus rapide (requêtes SQL optimisées pour un gain de performance de 30%), la version 1.2 représente la plus grande évolution de Piwik depuis la 1.0.
La version 1.3
n'apporte aucune révolution mais quelques nouveautés : Piwik s'internationalise et est maintenant disponible en 16 langues. Des corrections graphiques sont effectuées : choix entre de nombreux logos pour la configuration des sites, ajout des logos des OS/navigateurs et des drapeaux des pays. La procédure de mise à jour de la base de données est instaurée. De nombreux bug fix sont implémentés, pour rendre Piwik toujours plus stable. La principale amélioration est la prise en compte des plugins des visiteurs.

L'équipe de développement et de rédaction de la documentation[modifier | modifier le wikicode]

Le créateur du projet, principal développeur et rédacteur de la présente documentation est Matthieu Aubry. Marc Boussard est co-développeur de Piwik, il a développé d'importantes mises à jour (validation XHTML, internationalisation). Natsimhan a participé ponctuellement à l'évolution du logiciel, via ses intéressantes remarques et observations sur le code source. Florent Chantret s'est également impliqué via le développement de la reconnaissance des plugins, de la procédure de mise à jour des bases de données.

Licence de Piwik[modifier | modifier le wikicode]

Piwik est un logiciel libre, distribué sous licence GNU/GPL. Vous pouvez trouver cette licence sur http://www.gnu.org/copyleft/gpl.html en version originale, ou sur http://www.linux-france.org/article/these/gpl.html en traduction non officielle. Elles sont aussi disponibles dans le package de Piwik sur /docs/.

Licence de la documentation[modifier | modifier le wikicode]

Confer la discussion...


CodingStandard

Pourquoi adopter un style commun ?[modifier | modifier le wikicode]

Extrait de http://www-portal-stage.oracle.com/technology/tech/opensource/PHP_Coding_Standard.htm

Good Points
When a project tries to adhere to common standards a few good things happen:
   * programmers can go into any code and figure out what's going on
   * new people can get up to speed quickly
   * people new to PHP are spared the need to develop a personal style and defend it to the death
   * people new to PHP are spared making the same mistakes over and over again
   * people make fewer mistakes in consistent environments
   * programmers have a common enemy :-) 
Bad Points
Now the bad:
   * the standard is usually stupid because it was made by someone who doesn't understand PHP
   * the standard is usually stupid because it's not what I do
   * standards reduce creativity
   * standards are unnecessary as long as people are consistent
   * standards enforce too much structure
   * people ignore standards anyway 

Pourquoi Piwik n'impose pas un coding style 'standard' ?[modifier | modifier le wikicode]

Nous pensons que les coding guidelines sont trop parfois trop restrictives, et parfois incomplètes. Nous préférons donc faire un résumé de ce qui nous semble indispensable et important. Nous avons pour cela utilisé plusieurs guides différents (5 au total) et fait un résumé bilan des meilleures idées et concepts, pour présenter l'ensemble des règles suivantes. Les points non soulignés sont donc laissées à la liberté d'expression du développeur !

Introduction[modifier | modifier le wikicode]

Quelques notions introductives :

  • noms de fonctions, noms de variables, noms de classes et de méthodes, en anglais
  • fonctions documentées en anglais selon la norme javadoc, la documentation est générée par phpDocumentor
  • les commentaires au sein des fonctions sont à écrire en priorité en anglais. Si vraiment vous ne pouvez ou ne voulez pas, le français est autorisé. L'anglais reste très largement conseillé
  • les fichiers code source sont tous encodés en UTF-8. Cela permettra à tous les développeurs d'avoir exactement le même rendu final, quel que soit leur pays et leur langue. Ce sera notamment utile pour les noms des développeurs étrangers.
  • la programmation objet n'est pas obligatoire mais fortement encouragée Marco

Général[modifier | modifier le wikicode]

Commentaires généraux sur le style de codage à utiliser obligatoirement

  • largeur maximum des lignes : 100 caractères (et non 80)
  • utiliser des tabulations et non des espaces. Chacun règle la taille de ses tabulations (4 semble être un bon chiffre). Ne pas transformer automatiquement ses tabulations en espace comme le proposent certains logiciels !
  • pour les if then else les 2 écritures classiques sont tolérées
if (condition)
{
   ...
}
else
{
   ...
}

et

if (condition) {
    ...
} else if (condition) {
    ...
} else {
    ...
}

La première semble plus claire et est conseillée ! Moi je conseille la deuxième, beaucoup plus simple à lire et plus concise :-P !

  • faire une bonne utilisation des espaces pour les blocs d'égalité
$a        = 'hello';
$bbbb     = 'world';
$cccccccc = 'foobar';
  • en cas de multiples tests bien mettre en avant sur des nouvelles lignes plus indentées les tests logiques
if ((condition1 && condition2)
         || (condition3 && condition4)
         ||!(condition5 && condition6)) 
{
    doSomethingAboutIt();
}
  • ne pas mettre plus d'une action par ligne (statement).
$i_toto = 1;
$i_tata = 2;
  • utiliser <?php et non <? en début de fichier (et veillez à ne pas laisser de ligne vide au début ou à la fin des fichiers
  • mettre les mots clés SQL en majuscule
SELECT   S.first_name, S.last_name 
FROM     students S
WHERE    S.email =  
ORDER BY S.last_name";
  • mettre les index des tableaux entre guillemets simples
Exemples :
   $foo = $assoc_array[blah]; IS WRONG
   $foo = $assoc_array['blah']; IS OK

Commentaires[modifier | modifier le wikicode]

  • pour les commentaires en une ligne utilisez le style
// ici le commentaire
  • pour les commentaires sur plusieurs lignes utilisez le style
/* ici
 * un 
 * commentaire
 */
  • commentaires de fonctions, classes, méthodes respectent la norme javadoc
   /**
   * what the function does in one line.
   * more detailed description on 0-n lines, if needed.
   * @access  [public|static|pseudostatic]
   * @param   [string|int|double|bool|array|object|mixed] $paramName1 desc
   * @param   [string|int|double|bool|array|object|mixed] $paramName2 desc
   *  ...
   * @param   [string|int|double|bool|array|object|mixed] $paramNameN desc
   * @return  datatype  description
   * @throws  not until PHP 5
   * @see     some_function()
   * @todo    description
   * @since   ATutor version, PHP version   (comma separated list)
   * @status  stable|experimental           (if not set then considered stable)
   * @pattern singleton|factory|mvc|observer|facade|...
   * @author  description                   (comma separated list)
   */
   function something() 
   {
       ...
   }

Conventions de nommage[modifier | modifier le wikicode]

Cette partie est très importante et doit être scupuleusement suivie !

  • variables : utiliser le style "studly caps". Chaque premier caractère d'un nouveau "mot" doit être une majuscule, sauf le tout premier.
Exemples :
 $currentuser is WRONG
 $current_user is WRONG
 $currentUser is OK
 $isLogged
 $setParamsOn
  • fonctions : utiliser le même style que les variables. De préférence sous forme de verbes (les fonctions effectuent, il existe forcément un verbe pour cet effet... !).
Exemples :
 getToto()
 loadFoo()
 sellMs()
 phpmvRocks()
 cocoricoDeBonMatin()
Exemples :
 L'utilisateur est il loggué ?
 isUserLogged()
 Piwik est il puissant ?
 isPhpmvPowerfull() 
Note : ne pas utiliser la notation pdf2html mais plutôt pdfToHtml pour plus de clarté (confusion possible entre pdf2Html sinon...)
  • classes : elles suivent également le style StudlyCaps, mais avec une majuscule au début
class DatabaseLayer
class BrowserDetection
  • utilisez à bon escient les préfixes ou suffixes 'naturels' comme *Count, temp*, etc.
  • ne pas utiliser des noms de variables à 1 caractère seulement, excepté des index dans les boucles ($i, $j, $k, etc.)
  • pour combler le manque de précision de php sur le type des variables, il faut typer les array, string, integer, bool avec un préfixe
a_ : tableau (array)
s_ : chaîne (string)
i_ : entier (integer)
b_ : booleen (boolean)
  • également pour les variables globales
g_ : globale (global)
  • écrire true, false, et null en minuscule

Programmation[modifier | modifier le wikicode]

  • ne pas utiliser les variables globales sauf s'il n'y a pas d'autre solution, et dans ce cas se concerter entre développeurs auparavant.
  • il faut initialiser les variables
$a_t = array();
$s_t = '';
  • connaître et savoir utiliser === et !==
  • dans le switch, quand on fait un 'return' ne pas oublier le 'break'
switch ($x) {
     case 'hello':
     return TRUE;
     break;
}
  • utiliser des 'foreach' plutôt que des 'while(list($t, ) = each($t2))'
  • pas de magic numbers, ces nombres qui apparaissent dans le code sans justification particulière, comme par magie. Définir des constantes ou variables ayant comme valeurs ces magic number, mais ne pas faire les tests directement !
  • optimiser les boucles for et autres, notamment lors de l'utilisation des sizeof()
Exemple :
 // le sizeof() est appelé à chaque itération de la boucle : MAUVAIS !
 for ($i = 0; $i < sizeof($post_data); $i++)
 {
     doSomething();
 }
 
 // le sizeof() est calculé une fois au départ, seulement : BON !
 for ($i = 0, $size = sizeof($post_data); $i < $size; $i++)
 {
     doSomething();
 }
  • de même que pour le if on peut écrire
 for ($i = 0, $size = sizeof($post_data); $i < $size; $i++) {
     doSomething();
 }
  • utilisez plutôt sizeof() que count()
  • utilisez plutôt strpos() que strstr()
  • ne pas utiliser la possibilité de Smarty de mettre du code PHP dans les templates via les tags . C'est dangereux et l'on peut faire sans !
  • quand une fonction doit retourner un bool, retournez un bool soit true soit false et non pas 1 ou 0

IMPORTANT fonctions propres à Piwik[modifier | modifier le wikicode]

  • pour récupérer une variables utiliser la fonctions getRequestVar() qui sécurise les données
  • pour stripslasher utiliser la fonction stripslashesPmv() qui prend en compte les magic_quote
  • pour faire des requêtes utiliser query() au lieu de mysql_query()


Réflexions version2

Introduction[modifier | modifier le wikicode]

Histoire[modifier | modifier le wikicode]

phpMyVisites est depuis 1 an et demi en version 1.x. La structure actuelle n'est pas adaptée pour répondre aux exigences toujours plus importantes des utilisateurs, amateurs, confirmés ou entreprises. La structure de la base n'est pas assez souple, évolutive. La structure du code n'est pas modulaire. Il n'est pas facile de faire des modifications sur le code source, de développer des skins. Nous souhaitons développer une version 2 de phpmyvisites, qui aura des fonctionnalités importantes en terme d'évolutivité et de souplesse. Bien sûr nous réutiliserons des parties importantes de l'actuel phpMyVisites qui fonctionnent bien (traductions, design de l'interface, présentation générale, bases de données des moteurs, etc.). Mais il est obligatoire de faire un travail de fond sur la base de données, les fichiers, la gestion des données, l'architecture générale.

Cette version 2 représente un travail très conséquent, et nous avons besoin de l'aide de spécialistes pour nous aider dans nos choix techniques, nos réflexions, pour donner des bonnes idées ou nous conseiller sur ce qu'il faut faire et ne pas faire.

Ce wiki est l'endroit idéal pour que chacun puisse s'exprimer. Vous pouvez le compléter librement, après vous être enregistré. Bonne lecture !!

Objectifs[modifier | modifier le wikicode]

PhpMyVisites a pour objectif de devenir l'outil de statistiques nouvelle génération le plus complet, rapide, puissant et évolutif. Pour cela l'équipe de développement s'engage à suivre les 10 commandements suivants :

  • Reliable (fiable)
phpMyVisites sera fiable, ne provoquera aucune perte de données. Un outil de sauvegarde/restauration sera disponible par la suite pour prévenir tout problème.
  • Scalable (évolutif)
phpMyVisites saura s'adapter à des audiences de toutes tailles. phpMyVisites saura tenir la charge et assurera une rapidité maximale, via un système d'archivage complexe et une optimisation des traitements et calculs sur les données.
  • Secure (sécurisé)
phpMyVisites sera protégé de toute forme de hacking, que ce soit par des visiteurs anonymes ou des membres enregistrés avec des privilèges. La sécurité est une priorité majeure de l'équipe de développement.
  • Flexible (flexible)
phpMyVisites proposera un système de thèmes, qui permettra de fournir des rapports avec des apparences différentes pour répondre aux besoins de chaque type d'utilisateurs. Le contenu des rapports pourra également être facilement modifié.
  • Modular (Modulaire)
phpMyVisites sera découpé en parties fonctionnelles, chacune étant le plus indépendante possible du reste de l'application. L'ajout de nouvelles fonctionnalités sera facilitée, que ce soit au niveau de l'intégration code ou base de données, et de l'affichage.
  • Localizable (traduisible)
phpMyVisites sera entièrement traduisible et gérera les spécificités de chaque langue. Le système de traduction sera simple et il sera très rapide d'ajouter une nouvelle langue.
  • Intuitive (intuitif)
phpMyVisites sera facile à installer, facile à utiliser. Les utilisateurs pourront facilement tirer d'importantes conclusions sur l'activité de leur site Internet et sur l'intérêt de leurs visiteurs. Les utilisateurs avancés pourront exploiter les fonctionnalités complexes de phpMyVisites pour des analyses encore plus fines.
  • Portable (portable)
phpMyVisites fonctionnera avec des exigences techniques de compatibilité importantes : register_globals Off, error_reporting E_ALL, ne dépendra pas du serveur utilisé, ne dépendra pas du système d'exploitation utilisé, sera compatible avec des versions anciennes de php.

Release Early, release Often[modifier | modifier le wikicode]

Suivons les grandes idées du développement du logiciel libre. On publiera des versions bêta le plus régulièrement possible cet été pour que les testeurs ne s'ennuient pas. Également :

18. To solve an interesting problem, start by finding a problem that is interesting to you.

6. Treating your users as co-developers is your least-hassle route to rapid code improvement and effective debugging.
7. Release early. Release often. And listen to your customers.
8. Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone.
9. Smart data structures and dumb code works a lot better than the other way around.
10. If you treat your beta-testers as if they're your most valuable resource, they will respond by becoming your most valuable resource.
11. The next best thing to having good ideas is recognizing good ideas from your users. Sometimes the latter is better.
12. Often, the most striking and innovative solutions come from realizing that your concept of the problem was wrong.
13. ``Perfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away.
14. Any tool should be useful in the expected way, but a truly great tool lends itself to uses you never expected.
15. When writing gateway software of any kind, take pains to disturb the data stream as little as possible—and never throw away information unless the recipient forces you to!
17. A security system is only as secure as its secret. Beware of pseudo-secrets.
19: Provided the development coordinator has a communications medium at least as good as the Internet, and knows how to lead without coercion, many heads are inevitably better than one.


DeadLine prévue[modifier | modifier le wikicode]

Beta 1, Codename "Ouf" (10 octobre)[modifier | modifier le wikicode]

Premiere release publique

Beta 2, Codename "buggyTrip" (date prévue : 29 Octobre)[modifier | modifier le wikicode]

  • correction bug beta1
  • gestion multi users / groups puissante
  • première implémentation des graphiques

Beta 3 (date prévue : 6 Novembre)[modifier | modifier le wikicode]

  • correction bugs beta 2
  • graphiques des statistiques via artichow (tous implémentées, 6 types de graph)

Beta 4 (date prévue : 13 Novembre)[modifier | modifier le wikicode]

  • gérer les fichiers ds le tableau des pages ou séparément
  • correction bugs beta 3
  • cookie d'exclusion du webmaster
  • gérer les variables par page

Beta 5 (date prévue : 20 Novembre)[modifier | modifier le wikicode]

  • correction bug beta 4
  • Module assurant le lancement des calculs des données automatiquement, lancés par les visiteurs lors de leur visite sur phpmyvisites.php (archive ts les sites, tts les périodes, calcule et envoie les mails)
  • ajouter choix logo par site
  • cleaner présentation module admin
  • version anglaise parfaite
  • pouvoir choisir de sender le résumé des sites pour l'envoi (seulement sites autorisés !)
  • gestion fine des emails d'envoi (par utilisateur, fréquence d'envoi, etc.)


Plus tard[modifier | modifier le wikicode]

  • module de conversion des stats de phpmv 1.x vers 2.x
  • pouvoir choisir le site sur lequel on arrive par défaut OU sur le résumé

Documentation de phpMyVisites v2[modifier | modifier le wikicode]

Une documentation qui soit modulaire, réutilisable ![modifier | modifier le wikicode]

Dans ce domaine tout reste à faire. L'idée est de faire une documentation utilisateur très complète, facile à comprendre, et surtout réutilisable. En effet à long terme nous aimerions que les éléments de l'interface de phpmv soient cliquables, et le clic ouvre la partie de la doc concernée.

Par exemple un clic sur [?] au dessus d'un graph ouvre une pop up ou charge dans la page l'explication de ce graph, en 2 parties :

  • "Résumé" qui explique en une phrase ce que donne cet élément comme information
  • "Analys" qui explique comment analyser correctement les données de cet élément

Documentation générale[modifier | modifier le wikicode]

  • Présentation succincte
  • Installation et Mise à jour
  • Configuration requise
  • Étapes de l'installation
  • Téléchargement et upload de phpMyVisites
  • Phase d'installation web guidée
  • Insertion du code Javascript sur les pages du site à auditer
  • Mettre à jour depuis une ancienne version
  • Fonctionnalités générales
  • Nommer les pages
  • Classer les pages par groupes
  • Intérêts de visites par critères
  • Exclusion des faibles populations
  • Variables modulaire par page
  • Affluent de type newsletter
  • Affluent Site partenaire
  • Archivage
  • Statistiques par mail
  • Statistiques par fil RSS
  • Multi-Sites
  • etc.
  • Fonctionnalités des rapports de mesure d'audience
  • Visites
  • Pages vues
  • Fréquence de visites
  • Provenance
  • Configuration
  • Affluents
  • Résumé multi-sites
  • Administration
  • Sécurité
  • PHP
  • MySQL
  • Traductions
  • Traductions disponibles (avec traducteurs)
  • Ajouter une nouvelle traduction
  • Corriger et compléter une traduction existante
  • Support
  • Documentation
  • FAQ
  • Forums
  • BugTracker
  • A propos
  • Licence du logiciel
  • Licence de la documentation
  • Historique
  • Equipe de développement

Documentation technique[modifier | modifier le wikicode]

  • s'occuper de générer la doc du code via phpdoc (il faut un responsable pour ça)
  • générer un schéma à jour du MCD
  • décrire l'arborescence fichiers
  • donner les standards respectés
  • faire un appel générale à la communauté pour wikifier, pour corriger/ajouter des bouts de docs

Général[modifier | modifier le wikicode]

Fonctionnalités[modifier | modifier le wikicode]

  • fort respect des standards (XHTML strict, CSS2)
  • Garder la compatibilité avec le maximum de navigateurs en respectant les normes
  • compatible php > 4.3 et compatible php 5 (je ne peux pas faire les tests personnellement qq1 devra s'en charger !)
  • compatibilité avec la majorité des hébergeurs disponibles
  • maintenir la forte internationalisation i18n
  • respecter la séparation CONTENU / AFFICHAGE (Smarty & CSS)
  • compatible 'register_globals' sur 'OFF' évidemment
  • aucune erreur en mode 'error_reporting(E_ALL);'
  • OS indépendant (unix, windows, mac) et Serveur indépendant (apache, IIS, etc.)
  • il doit être possible d'inclure phpmyvisites dans une interface tierce, via un système simple et non contraignant.

Documentation du code[modifier | modifier le wikicode]

Questions / réponses[modifier | modifier le wikicode]

Abstraction BDD par Adodb (choix final)[modifier | modifier le wikicode]

Nous allons certainement utiliser Adodb pour l'abstraction BDD.

Le principe sera : - rester au plus près des appels natifs pour l'enregistrement des logs, on devra donc écrire les requêtes utilisées pour les logs pour chaque serveur de base de données séparément dans des fichiers séparés, sachant que les requêtes sont normalement standards.

- pour tout le reste de l'appli, on utilise Adodb


Ce choix fait suite à des benchs et rapports de fonctionnalités que je publierai peut être au propre un jour. Nous mettions en comparaison pear:db, adodb, adodblite, et mysql natif.

Comptabilisation des moteurs de recherches via un système de log parallèle[modifier | modifier le wikicode]

Voir discussion sur http://fr.wikibooks.org/wiki/Documentation_phpMyVisites/R%C3%A9flexions_version2/SearchEnginesDetection

Sauvegarde et restauration des données par un système simple[modifier | modifier le wikicode]

Dans l'administration, un lien « Sauvegarder la base de données » entraine la création d'un fichier .gz sur le serveur, librement téléchargeable par l'utilisateur. Cette archive contient un DUMP de la base. Dans l’administration, un lien « Restaurer la base de données » permet la lecture de ce GZ et la restauration des données du DUMP.

A réfléchir pour une compatibilité avec toutes les bases de données (ça ne doit pas être évident ?). Le générateur de DUMP doit à mon avis ne pas dépendre de la structure de la bdd et doit être générique (il lit tout seuls les tables avec un préfixe xxx_ et les champs et crée le fichier).

Export OOo[modifier | modifier le wikicode]

Utiliser du format open document pour l'export des données (compatible koffice, OO 2, etc.)

Voir les classes à utiliser pour faire ça

La classe tbsOOo est une extension du moteur de template TinyButStrong.
Elle permet de générer dynamiquement des documents OpenOffice en séparant présentation et données.
En pratique, il suffit de concevoir un document avec OpenOffice qui servira de modèle (template). :Ensuite à partir du script PHP, il reste à fusionner ce modèle avec une source de données pour obtenir un nouveau document OpenOffice.
http://www.tinybutstrong.com/apps/tbsooo/doc_fr.html

Autres Q/A[modifier | modifier le wikicode]

  • Comment sont gérées les préférences des utilisateurs en matière de templates ?
>> le choix du template peux être garder en session ou dans un cookie.
Après plus de réflexion, je pense que le template par défaut doit être dans le fichier de conf de phpMyVisites. Ensuite si on veut laisser le choix à l'utilisateur de changer de template, je préconise les cookies, les sessions sont gourmandes en ressource et les cookies permettent de garder le choix d'une session à l'autre. Marco
  • Comment gérer proprement les erreurs génériques dans toute l'application ?
>> Une fonction que l'on accroche via set_error_handler() et qui crée une file de message d'erreur affichables dans les templates.
bonne idée ta fonction. Il faudra la développer. Comment vois tu la chose ? Matthieu Aubry 21 jul 2005 à 00:24 (UTC)

Architecture[modifier | modifier le wikicode]

Général[modifier | modifier le wikicode]

Schéma de l'architecture de l'application

Base de données[modifier | modifier le wikicode]

Schéma de l'architecture de la base de données


Coding Standard[modifier | modifier le wikicode]

Nouvelles fonctionnalités (liste non définitive)[modifier | modifier le wikicode]

Des fonctionnalités (parmi les moins importantes) ne seront peut être pas développées s'il manque du temps.

Fonctionnalités globales[modifier | modifier le wikicode]

Intérêts de visites[modifier | modifier le wikicode]

On peut analyser les intérêts des visiteurs (indicateurs définis) selon divers critères caractérisant ce visiteur.

Critères :

  • par type d'accès (moteur, site, partenaire, newsletter, direct)
  • par mot clé
  • par moteur
  • par site affluent
  • par partenaire
  • par newsletter
  • par pays
  • par continent
  • par OS
  • par navigateur
  • par résolution
  • par heure locale
  • (par page d'entrée)

Indicateurs (informations) disponibles :

  • pages vues par visite
  • pages vues par visite significatives
  • taux de visites à une page
  • durée de visites
  • fréquence de visites

Ex : combien de pages en moyenne ou de temps en moyenne restent les gens

  • français
  • américains
  • qui viennent de Google
  • de Yahoo
  • ou qui ont tapé comme mot "toto"
  • ou 'titi'

Nommer les pages[modifier | modifier le wikicode]

Possibilité de nommer les pages, via une variable dans le code javascript, de la forme par exemple :

var pagename = "Mon_titre";
var pagename = "groupe1&gt;groupe2&gt;mon_titre";
var pagename = "groupe1&gt;mon_titre";

Cette convention de nommage demande un temps d'adaptation au site sur lequel phpmyvisites est installé mais propose une très grande facilité de maintenance (voire aucune maintenance, normalement), et une évolution (si le site évolue largement) très aisée.

À noter que l'on peut récupérer le contenu de la balise <title>[..]</title> pour l'assigner automatiquement à cette variable, pour encore plus de facilité de mise en place.

Si la variable pagename n'est pas renseignée, l'URL est enregistrée (avec possibilité d'exclure certains paramètres de cette URL).

Le nommage de pages est très important. Il peut par exemple permettre de savoir quelles actions précises sont effectués sur un module donné. Il peut permettre de connaître l'état d'avancement de l'acte d'achat sur un site de commerce (mise dans le panier, validation commandes, saisies coordonnées, paiement). On peut alors facilement visionner le taux d'abandon à chaque étape.

Groupes de pages[modifier | modifier le wikicode]

Possibilité de classer dynamiquement les pages dans des groupes de pages. N niveaux de groupes sont disponibles.

var pagename = "groupe1&gt;groupe2&gt;mon_titre";

Possibilité d'avoir les stats par groupe de pages (nombre de consultation du groupe). Nombre de consultation par groupe d'entrée, par groupe de sortie (statistiques déjà présentes pour les pages).

IHM : Elle doit être simple, clair, accessible. On doit pouvoir voir tous les groupes, éventuellement avec AJAX pour un chargement rapide et efficace (et joli).à définir...


possibilité que le > délimiteur soit un / facilement. On peut alors séparer les grands thèmes du site si le site est organisé par répertoire. POwerFULL !!

Définition de variables modulaires par page[modifier | modifier le wikicode]

Nouveauté qui permet à phpMyVisites de répondre a priori à tout problème, même très spécifique. Le principe est simple : des variables (4 pour l'instant) sont dites « libres » et sont donc définissables par le webmaster. Elles peuvent désigner des nombres (chiffres, prix, id), des chaînes (PrénomNom de la personne logguée pour un intranet, nom d'un sous état d'une page...), des états (connecté à la section membre), etc.

Il est ensuite possible d'isoler les visites en fonctions de ces variables et de leur valeur.

Exemple :

intranet

on peut faire des études en fonction de la valeur du paramètre

désignant le PrénomNom des membres

media

on peut étudier les différences de comportement en

fonction des visiteurs connectés (abonnés) ou anonymes

ATTENTION

ce qui suit sont des pures spéculations, les réflexions sur la faisabilité, le temps de développement et l'intégration n'ont pas été faites !


ecommerce on peut imaginer pouvoir faire des stats sur les ventes, CA
  • nb de commandes
  • panier moyen
  • nb d'objets moyen par achat
  • fréquence de commandes par visite
  • délai (en temps et pages vues) avant la commande

Ces variables sont propres à chaque site et sont renommables par site, pour améliorer l'affichage dans l'interface.



Pour la consultation des données, le principe suivant peut être utilisé : lors du clic sur une page (ou « action ») donnée, une pop up se lance, et pour chacune des 4 variables (si elles ont été assignées), on afffiche

  • nom variable et valeur

  • nombre de visites sur cette page (« action ») avec cette valeur de variable

Ex :


  • Magasin
  • informatique
  • plomberie
  • consultation
  • achat
  • envoie à un ami
  • charcuterie
  • Contacts

Le lien consultation par exemple déplie un tableau avec le

contenu suivant :



Etat visiteur

Visites

connecté

400 (40%)

anonyme

600 (60%)



On visionne pour une page donné des sous états, de manière simple et pratique.



On peut imaginer sur un intranet une variable PrenomNom :

Nom

Visites

Dupond_Jean-Marie

3 (n%)

Ernesto_Philippe

2 (n%)

On visionne rapidement qui s'est connecté à chaque page, combien de fois.


Ces statistiques sont aussi disponibles pour les groupes. Dans ce cas on fait la somme pour chaque page du groupe. Pour le groupe « plomberie » on somme le nombre de pages vues avec un état « connecté » ou « anonyme ».

Avec cette technique de variables libres et renommables, on peut envisager répondre à tout problème spécifique.

Statistiques à l'année[modifier | modifier le wikicode]

Pour l'instant seules sont dispos les stats au jour, semaines, mois.
Pour les stats à l'année, les stats sur les mois sont utilisées.

Bilan multi-sites (facultatif)[modifier | modifier le wikicode]

Dans le sélecteur de sites est disponibles un « Bilan global », où sont sommées et moyennées les valeurs essentielles de chaque site.
Cela implique que les données de tous les sites soient archivées, cela lance donc éventuellement l'archivage de chaque site.

Les données intégrées seront (à compléter) :

  • toutes les informations relatives aux visites et nombre de pages vues

  • les pays, continents

  • les configurations matérielles

  • les affluents (moyenne des types d'affluents et meilleurs moteurs)

Mesure des téléchargements[modifier | modifier le wikicode]

Les téléchargements sont simples à mettre en place : pour comptabiliser dans phpmyvisites une page de type "fichier", et donc pouvoir comptabiliser des fichiers .zip .exe ou autres, il suffit de mettre un lien pour le téléchargement de ce fichier de la forme

http://adresse phpmyvisites/phpmyvisites.php?go=URL OU ON REDIRIGE&pagename=FILE:NOM DU FICHIER LISIBLE AVEC EVENTUELLEMENT LES GROUPES&id=ID DU SITE DANS PHPMYVISITES

Le script redirige automatiquement vers l'url _GET['go']

La variable pagename dans le cas d'un fichier est

de la forme

var pagename = "FILE:fichier_a_telecharger.zip";

Ou avec un nom « parlant »

var pagename = "FILE:Plan_accès_entreprise";

Gestion des referers « partenaires »[modifier | modifier le wikicode]

Il serait intéressant que certaines URLS connues soient classées dans une section partenaires dans affluents. De même quand il y a un paramètre idsite_partner=xx dans l'url du site analysé pouvoir considérer cet id comme provenant d'un site partenaire.

Cette fonctionnalité entraîne la gestion des sites partenaires dans l'administration :

  • nom du site partenaire

  • URL du site partenaire

  • id valeur de la variable idsite_partner

Gestion des referers « newsletters »[modifier | modifier le wikicode]

Idem que pour les sites partenaires, gérer les visites venant d'une newsletter via la détection d'une variable idnewsletter.


Cette fonctionnalité entraîne la gestion des newsletters dans l'administration :

  • nom newsletter

L'id valeur de la variable idnewsletter est alors donné par phpmyvisites, et c'est cet id qui doit être placé dans les liens de la newsletter.

Chemins, suivi, tracking... (facultatif)[modifier | modifier le wikicode]

On définit des chemins à étudier. Un chemin est un ensemble de pages, de 2 à 6 par exemple.

Exemple :
          accueil > consultation produit > avis clients > consultations produit > achat 

Informations à donner pour chaque chemin prédéfini de ce type. Attention, la notion de prédéfini esti mportante, car seules les stats sur des chemins pré-demandés par l'utilisateur seront accessibles (impossible de calculer les données pour tous les chemins différents, milliers de possibilités)

  • à chaque étape
  • nombre de hits
  • arrivés (de quelles parties/pages/referers ?)
  • sorties (vers quelles parties/pages/referers ?)
  • sur la globalité
  • personne qui ont fait le chemin en ENTIER du début à la fin
et oui attention, car même si à la dernière étape on a 500 personnes, ce n'est pas pour ça que les 500 personnes viennent de la premiere étape et ont suivi toutes les étapes dans l'ordre. Il est important d'avoir une vsion globales des hits de chaque étape mais également des hits sur le chemin en entier.

avez vous des idées de nouvelles fonctionnalités ou IHM ?

Fonctionnalités administration[modifier | modifier le wikicode]

Exclusion d'IP et de plages d'IP[modifier | modifier le wikicode]

Pour un site donné, on peut exclure une ou plusieurs plages d'ip.
De la forme A.B.C.D ou A.B.C.x ou A.B.x ou A.x

x pouvant prendre n'importe quelle valeur

Intérêt : dans les réseau de grandes entreprises, il est impossible d'installer un cookie sur chaque poste (technique disponible actuellement dans phpmyvisites) cette exclusion par plage d'ips est pratique et fiable

Gestion avancée des utilisateurs et des droits[modifier | modifier le wikicode]

Importante nouveauté. Il sera possible de créer des utilisateurs avec différents droits sur chaque site.

Fonctionnalités :

  • ajout nouveau user

  • modification caractéristiques user

  • (futur : suppression user)

Niveaux de droits prédéfinis (d'autres sont ajoutables mais ça ne semble pas naturel)

  • Super admin : tous les droits sur tous les sites sans exception et sans modification possible

  • Admin site N : droits de modification, de purge des données, etc.

  • Consultant site N : droit de voir les stats, d'ajouter un cookie pour ne pas être pris encompte

  • Visiteur : droit (ou pas) de consulter les stats

Chaque utilisateur est caractérisé par un alias, un login, un password

Sont affichés les dates de dernière connexion, les ips et hostnames des dernières connexions.

A noter l'arrivée par défaut en mode « anonymous » qui concerne tous les visiteurs non logguées. On gère les droits de ce anonymous comme on gère les droits d'un user enregistré. Bien sûr il ne faut pas lui donner plus que le droit de visiteur.

Un site peut avoir plusieurs URLs différentes[modifier | modifier le wikicode]

Ces URLs sont enregistrées dans l'admin pour le site considérée et les provenances à partir de ces urls ne sont pas considérées dans les « sites affluents » mais dans les « accès directs »

Système simple et pratique de sauvegarde restauration de toutes les données (facultatif)[modifier | modifier le wikicode]

En un clic, une archive est créée sur le serveur dans un répertoire /backup/ en gzippé

Possibilité de restaurer les stats facilement (lecture du gzip et écriture données base)

Fonctionnalités visites[modifier | modifier le wikicode]

Fréquences des visites[modifier | modifier le wikicode]

Question : comment gérer les visiteurs uniques proprement ?
Réponse : gestion plus fine des visiteurs et de leur visites. Gestion via des cookies et une autre méthode qui consiste à considérer que la parfaite concordances d'éléments techniques que sont l'OS, la résolution, le navigateur, la profondeur de couleur et l'IP implique qu'une personne est unique (elle a donc une IP fixe et une configuration fixe, souvent le cas, et de plus en plus pour les Ips fixes). On ne peut plus se baser sur la différence heure locale/heure serveur car les XP SP2 sont mis à l'heure de MS automatiquement. Cette information n'est plus pertinente. A noter que si une personne change de navigateur il n'y aura aucun moyen de la détecter comme un visiteur unique (son cookie change ET son navigateur change). Ce cas reste très rare.


Information disponibles :

  • fréquence de visites sur la période

  • nombre de visiteurs uniques (chiffre exact... contrairement à actuellement)

  • taux de retour des visiteurs sur la période (assiduité)

  • % de nouveaux visiteurs / % visiteurs connus (graph : soit 2 barres verticales, soit une à 2 couleurs)

  • pages vues par visite du visiteur fidèle

  • moyenne des pages vues du visiteur fidèle

  • nombre de visiteurs par nombre de visites sur la période

Pages vues par visites significatives[modifier | modifier le wikicode]

Nombre de pages vues pour les visites de plus d'une page. Plus intéressant que la donnée « pages vues par visite » qui prend en compte les visites à une page vue.

Durée de visite par page[modifier | modifier le wikicode]

Par page être capable de donner le temps de visite moyen

Top des meilleurs configurations[modifier | modifier le wikicode]

Top des meilleurs trio OS/navigateur/résolution pour montrer les tendances du marché

Pages des visites à une page vue (facultatif)[modifier | modifier le wikicode]

Liste des pages qui ont entraînées une visite à une page vue (single access pages) : classées par nombre de visites. Cela peut mettre en avant des pages sans contenu ou liens vers d'autres contenus. Des pages à retravailler (le taux de visites à une page vue doit être le plus faible possible).



Divers (à préciser...)[modifier | modifier le wikicode]

Export des données dans différents formats (facultatif)[modifier | modifier le wikicode]

Il serait intéressant de pouvoir exporter toutes les données fournies dans l'interface de phpmyvisites dans différents formats :

  • CSV

  • XML

  • XHTML Imprimable

  • PDF

  • OpenOffice

  • Envoi de mail automatique (problème de l'archivage qui est nécessaire...)

Cette fonctionnalité implique un important travail de structuration des donnéees, le must étant certainement de passer par le XML pour ces exportations. Voir la compatibilité de la classe PEAR XML_Serializer avec les hébergeurs, car elle serait très pratique.

Vision plus globale de l'évolution à long terme de l'audience (facultatif)[modifier | modifier le wikicode]

Il serait intéressant de voir plus facilement l'évolution de l'audience sur des longues périodes. Solutions ? Graphiques plus étalés dans le temps, tableaux récapitulatifs remontant plus que 7jours/7semaines/7mois.

A réfléchir...

Conservation urls précises des moteurs de recherche (facultatif)[modifier | modifier le wikicode]

Demande fréquente des utilisateurs mais lourdes contraintes techniques : il serait intéressant pour eux de conserver les urls précises des moteur de recherche qui ont permis d'accéder au site. Cela permet de voir directement le classement dans le moteur de recherche en un clic.
Problèmes

quand beaucoup de mots clés différents, de moteurs

différents, il y a énormément d'adresses à conserver pour un volume de données très important.

Le must serait de proposer cette fonctionnalité en option activable ou pas.
A voir si du temps disponible...

Ne logguer que les requetes sur le site audité (facultatif)[modifier | modifier le wikicode]

SI un concurrent met le même marqueur sur les pages de SON site, alors on enregistre ses stats dans notre phpmyvisites. Aucun intérêt pour qq1 de faire si ce n'est de polluer les stats.

Il suffirait de tester que l'url est bien une des urls du site enregistré dans site_urls

Divers[modifier | modifier le wikicode]

Syntaxe MediaWiki[modifier | modifier le wikicode]

Divers liens[modifier | modifier le wikicode]


Réflexions version2/SearchEnginesDetection

Description[modifier | modifier le wikicode]

Fonctionnalité qui serait vraiment très intéressante. Via un tag en PHP, collé après ou avant le tag javascript (et non pas dans le noscript car ce noscript n'est pas exécuté par tous les moteurs de recherche !!), on enregistre les logs des visiteurs détectés comme étant des moteurs de recherche. Liste des moteurs connus disponibles sur robots.net/robots.txt ou semblant. Faire une liste des moteurs assez exhaustive tant que possible, sans bien sûr prendre en compte les robots qui ne sont pas des moteurs de recherche (toutes saloperies diverses :))

Une fois les logs des robots enregistrés (forme des logs à déterminer), avec le plus d'informations possibles (que nous fournit PHP donc, car les infos JavaScript ne sont pas dispos), on crée des rapports sur la visite des robots qui sont intégrés à phpMyVisites. Pour créer les rapports il faut bien sûr faire un archivage dans le même esprit que celui de phpmyvisites. On parcourt les logs pour enregistrer toutes les données sous forme préformatées, la plupart du temps sous forme de tableaux PHP sérialisés.

On profite alors de toute l'architecture de base de l'appli. Ce module serait accessible via un nouveau menu « Moteurs ». Présentation contenu à déterminer.

Les stats disponibles pourraient être (à compléter par de bonnes idées)

  • par robot différent
  • nombre de visites dans la période
  • nombre de pages vues dans la période
  • liste des pages vues par URL physique, avec possibilité d'exclure des paramètres définis OU de ne prendre en compte que certains des paramètres des URLs (définition de ces paramètres dans l'administration)
  • heure de visites de chaque robot
  • autres ?
  • globalement
  • nombre de visites/nombre de pages vues
  • heures de passage
  • graphique camembert de répartition de l'activité des robots en nb de pages vues sur la période (Google bot : 70%, MSN : 20%, etc.) (utiliser bien sûr la lib déjà utilisée dans phpmv)
  • autres ?
  • Autre données.. idées dans la salle ?


Au niveau logs, calculs, archivages : il faut à mon avis internaliser le process à phpmyvisites directement.

  • On log à partir du moment où le tag PHP appelle le script, normal.
  • On calcule les données relatives aux robots au moment de l'archivage des stats classiques.

Les robots ont a mon avis une propre table d'archivage spécifique. Les pages qu'ils ont vues sont caractérisées par des ID reliées aux URL dans une table crée et alimentée lors de l'archivage. On utilise le même principe de nommage des pages, sauf que en plus de la variable javascript pagename qui contient le nom de la page, on assigne également une variable php $namepage qui sera utilisée à la place de l'URL pour savoir quelles pages ont visitées les robots. Si ce nom n'est pas renseigné, on utilise l'url brute, mais ça peut faire mal si le site a 10000 urls différentes (de Mo de textes en base qui font mal).

Allure du code PHP[modifier | modifier le wikicode]

<?php
$pagename = ; // valeur a remplir, sinon l'URL sera utilisée
include "http://www.site.com/phpmyvisites/searchengines.php";
?>
Le tag devra plutôt être de la forme :
<?php
$pagename = ; // valeur a remplir, sinon l'URL sera utilisée
include "/data/members/paid/l/e/monsite.com/htdocs/www/phpmyvisites/searchengines.php";
?>
car il faut que le fichier travail en local. L'adresse sera calculée lors de l'installation.--Jidébé 22 jul 2005 à 22:53 (UTC)
En fait j'ai réfléchi et mieux vaut que le code print une image du style
<?php
$pagename = ; // valeur a remplir, sinon l'URL sera utilisée
print("<img src=\"http://site.com/phpmv/searchengines.php?para1=TOTO&param2=".$_SERVER['truc']");;
?>
non ?
tout dépend en fait des infos qu'on ne peut prendre que via php (pas grand chose normalement), qu'en penses tu ? Matthieu Aubry 22 jul 2005 à 23:57 (UTC)
Là, tu m'intéresse. C'est effectivement une bonne idée et probablement la solution aux sites hébergés sur un autre serveur que phpMyVisites. je vais tester ça.--Jidébé 23 jul 2005 à 09:17 (UTC)

Voila un tag qui devrait fonctionner :

<?php
$pagename = ; // valeur a remplir, sinon l'URL sera utilisée
$_SERVER = $HTTP_SERVER_VARS; // ligne inutile !
$url = $_SERVER['REQUEST_URI'];
$url = urlencode($url); // mettre les urlencode directement au dessus urlencode($_SERVER['REQUEST_URI']);
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$agent = urlencode($agent);
print("<img src=http://www.site.com/phpmv/searchengines.php?url=$url&ip=$ip&agent=$agent>");
?>

Je suis en train de le tester.--Jidébé 23 jul 2005 à 16:11 (UTC)

ok tiens moi au courant ! Matthieu Aubry 24 jul 2005 à 11:10 (UTC)
Marco => La piste de l'image est une fausse piste, les robots ne vont pas l’appeler, en tout cas très rarement. Il faut utiliser un formulaire http et l'envoyer à l'aide de fsockopen, fputs, fclose, il y a des exemples dans mon code interrogation des FAI (http://www.webmaster-experience.net/telechargement/avfpp.tar.gz). On pourrait aussi utiliser curl mais ce n'est pas présent chez beaucoup d'hébergeurs.Il ne me semble pas utile d'utiliser urlencode. Cela permet d'avoir un tag PHP qui fonctionne même si le site audité n'est pas sur le même serveur que phpMyVisites. On peut imaginer dans l'avenir fournir des tags en java, asp... La solution noscript, comme celle de l'image est à écarter. Ensuite il faut bien voir comment détecter les robots, il faut trouver une solution pérenne et si on passe par une liste récupéré sur un site il faut bien vérifier que la licence d’utilisation soit compatible.
Marco Après réflexion, l'idée de faire une requête http me parait pas très judicieuse car ça va vraiment ralentir l'affichage. Je suis pour mettre un tag PHP uniquement dans le cas où le site audité est sur le même serveur.
Matthieu 26 jul 2005 à 17:28 (UTC) moi je suis contre le fait que le script doit être sur le serveur, ce n'est pas du tout pratique et c'est contre la politique actuelle de phpmyvisites qui est de tout centraliser dans le /phpmyvisites/. On oblige les webmasters à mettre le tag php juste avant </html> point final, ça ne ralentira pas les page comme ça. Et une requête http aussi basique que celle là ne doit vraiment pas poser problème je pense (a vérifier par des tests)


Pour la requête HTTP, à partir du code de Marco j'ai testé ça :


<?php
$url =urlencode($_SERVER['REQUEST_URI']);
$ip = $_SERVER['REMOTE_ADDR'];
$agent =urlencode($_SERVER['HTTP_USER_AGENT']);

$variablescodees = "url=".$url."&ip=".$ip."&agent=".$agent;

$urlphpmv = parse_url("http://www.monsite.com/phpmyvisites/searchengine.php");

$fp = fsockopen($urlphpmv['host'],80);
if(!$fp)
{
echo"probleme";
}

fputs($fp,sprintf("POST %s%s%s HTTP/1.0\n",$urlphpmv['path']));
fputs($fp, "host: {$urlphpmv['host']}\n");
fputs($fp,"Content-type: application/x-www-form-urlencoded\n");
fputs($fp, "Content-length:".strlen($variablescodees)."\n");
fputs($fp,"Connection: close\n\n");
fputs($fp,"$variablescodees\n");
$ligne =fgets($fp);
echo"$ligne";
fclose($fp);
?>

Je n'ai pas d'affichage de "probleme", donc à priori la connection se fait, le echo"$ligne"; me donne :

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

mais rien ne se passe (pas de prise en compte de la visite), pourquoi?

--Jidébé 28 jul 2005 à 08:44 (UTC)J'ai modifié mon tag comme ça :
<?php
$url =urlencode($_SERVER['REQUEST_URI']);
$ip = $_SERVER['REMOTE_ADDR'];
$agent =urlencode($_SERVER['HTTP_USER_AGENT']);
$variablescodees = "url=".$url."&ip=".$ip."&agent=".$agent;
$urlphpmv = parse_url("http://www.le-site-des-petits-brun.com/phpmyvisites/searchengines.php");

// initialisation de l’entête

$entete = "POST /phpmyvisites/searchengines.php HTTP/1.1\r\n";
$entete .= "Host: " . $urlphpmv['host'] . "\r\n";
$entete .= "Content-Type: application/x-www-form-urlencoded\r\n";
$entete .= "Content-Length: " . strlen($variablescodees) . "\r\n";
$entete .= "Connection: close\r\n\r\n";
$entete .= $variablescodees . "\r\n";

// ouverture de la connexion

$socket = fsockopen($urlphpmv['host'], 80, $errno, $errstr);
if($socket) // si connexion ok
{
fputs($socket, $entete); // envoi de l'entete
fclose($socket);
}

?>

Si je le met sur une page de mon site ça marche, mais par contre si je le met sur un site hébergé sur un autre serveur (Multimania dans ce cas) ça ne marche pas. Quelqu'un a une idée?

--Jidébé 29 jul 2005 à 11:26 (UTC)Voila pourquoi ça ne marche pas :
Warning: fsockopen, pfsockopen, show_source, php_uname, ini_get, ini_alter, ini_restore, ini_set,
 getrusage, mysql_list_dbs, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, listen,
 chown, chmod, chgrp, realpath, tmpfile, link, mb_send_mail() has been disabled for security reasons
 in /data/members/free/multimania/fr/s/h/e/shetlandor/htdocs/test2.php on line 67

Je crains donc qu'il n'y ai pas de solution universelle, peut-être il faudra proposer plusieurs forme de tag...

Au niveau des fonctionnalités il faut voir ce que font les outils du marché :

  • webtrends derniere version
  • XITI (le fait il ?)
  • RobotStats (leader php je crois, mais il est naze)
  • AWStats
  • autre ?

pour prendre leurs bonnes idées.


On peut ajouter http://www.php-tools.de/site.php (patSpiderizer) en GPL

Mais attention cette solution exige que le serveur audité comprenne le php et que phpMyVisites soit sur le même serveur. C'est contraignant et limitatif, prévoir une option pour que ce ne soit pas actif. Voir aussi quelles sont les limitations de noscript, ça peut être suffisant.


Réflexions version2 test

Fonctionnalités globales[modifier | modifier le wikicode]

Intérêts de visites[modifier | modifier le wikicode]

On peut analyser les intérêts des visiteurs (indicateurs définis) selon divers critères caractérisant ce visiteur.


Critères :

  • par type d'accès (moteur, site, partenaire, newsletter, direct)

  • par mot clé

  • par moteur

  • par site affluent

  • par partenaire

  • par newsletter

  • par pays

  • par continent

  • par OS

  • par navigateur

  • par résolution

  • par heure locale

  • (par page d'entrée)

Indicateurs (informations) disponibles :

  • pages vues par visite

  • pages vues par visite significatives

  • taux de visites à une page

  • durée de visites

  • fréquence de visites

Nommer les pages[modifier | modifier le wikicode]

Possibilité de nommer les pages, via une variable dans le code javascript, de la forme par exemple :

var pagename = "Mon_titre";

var pagename = "groupe1>groupe2>mon_titre";

var pagename = "groupe1>mon_titre";

Cette convention de nommage demande un temps d'adaptation au site sur lequel phpmyvisites est installé mais propose une très grande facilité de maintenance (voire aucune maintenance, normalement), et une évolution (si le site évolue largement) très aisée.

A noter que l'on peut récupérer le contenu de la balise <title>[..]</title> pour l'assigner automatiquement à cette variable, pour encore plus de facilité de mise en place.

Si la variable pagename n'est pas renseignée, l'URL est enregistrée (avec possibilité d'exclure certains paramètres de cette URL).

Le nommage de pages est très important. Il peut par exemple permettre de savoir quelles actions précises sont effectués sur un module donné.
Il peut permettre de connaître l'état d'avancement de l'acte d'achat sur un site de commerce (mise dans le panier, validation commandes, saisies coordonnées, paiement). On peut alors facilement visionner le taux d'abandon à chaque étape.

Groupes de pages[modifier | modifier le wikicode]

Possibilité de classer dynamiquement les pages dans des groupes de pages. N niveaux de groupes sont disponibles.

var pagename = "groupe1>groupe2>mon_titre";

Possibilité d'avoir les stats par groupe de pages (nombre de consultation du groupe).
Nombre de consultation par groupe d'entrée, par groupe de sortie (statistiques déjà présentes pour les pages).

IHM : Elle doit être simple, clair, accessible. On doit pouvoir voir tous les groupes, éventuellement avec AJAX pour un chargement rapide et efficace (et joli). à définir...

Définition de variables modulaires par page[modifier | modifier le wikicode]

Nouveauté qui permet à phpMyVisites de répondre a priori à tout problème, même très spécifique. Le principe est simple : des variables (4 pour l'instant) sont dites « libres » et sont donc définissables par le webmaster. Elles peuvent désigner des nombres (chiffres, prix, id), des chaînes (PrénomNom de la personne logguée pour un intranet, nom d'un sous état d'une page...), des états (connecté à la section membre), etc.

Il est ensuite possible d'isoler les visites en fonctions de ces variables et de leur valeur.

Exemple :

intranet

on peut faire des études en fonction de la valeur du paramètre

désignant le PrénomNom des membres

media

on peut étudier les différences de comportement en

fonction des visiteurs connectés (abonnés) ou anonymes

ATTENTION

ce qui suit sont des pures spéculations, les réflexions sur la faisabilité, le temps de développement et l'intégration n'ont pas été faites !


ecommerce on peut imaginer pouvoir faire des stats sur les ventes, CA
  • nb de commandes
  • panier moyen
  • nb d'objets moyen par achat
  • fréquence de commandes par visite
  • délai (en temps et pages vues) avant la commande

Ces variables sont propres à chaque site et sont renommables par site, pour améliorer l'affichage dans l'interface.



Pour la consultation des données, le principe suivant peut être utilisé : lors du clic sur une page (ou « action ») donnée, une pop up se lance, et pour chacune des 4 variables (si elles ont été assignées), on afffiche

  • nom variable et valeur

  • nombre de visites sur cette page (« action ») avec cette valeur de variable

Ex :


  • Magasin
  • informatique
  • plomberie
  • consultation
  • achat
  • envoie à un ami
  • charcuterie
  • Contacts

Le lien consultation par exemple déplie un tableau avec le

contenu suivant :



Etat visiteur

Visites

connecté

400 (40%)

anonyme

600 (60%)



On visionne pour une page donné des sous états, de manière simple et pratique.



On peut imaginer sur un intranet une variable PrenomNom :

Nom

Visites

Dupond_Jean-Marie

3 (n%)

Ernesto_Philippe

2 (n%)

On visionne rapidement qui s'est connecté à chaque page, combien de fois.


Ces statistiques sont aussi disponibles pour les groupes. Dans ce cas on fait la somme pour chaque page du groupe. Pour le groupe « plomberie » on somme le nombre de pages vues avec un état « connecté » ou « anonyme ».

Avec cette technique de variables libres et renommables, on peut envisager répondre à tout problème spécifique.

Statistiques à l'année[modifier | modifier le wikicode]

Pour l'instant seules sont dispos les stats au jour, semaines, mois.
Pour les stats à l'année, les stats sur les mois sont utilisées.

Bilan multi-sites (facultatif)[modifier | modifier le wikicode]

Dans le sélecteur de sites est disponibles un « Bilan global », où sont sommées et moyennées les valeurs essentielles de chaque site.
Cela implique que les données de tous les sites soient archivées, cela lance donc éventuellement l'archivage de chaque site.

Les données intégrées seront (à compléter) :

  • toutes les informations relatives aux visites et nombre de pages vues

  • les pays, continents

  • les configurations matérielles

  • les affluents (moyenne des types d'affluents et meilleurs moteurs)

Mesure des téléchargements[modifier | modifier le wikicode]

Les téléchargements sont mesurables par 2 méthodes :

  • une pop up ou une nouvelle page se lance et demande de patienter pendant le chargement d fichier (2s maximum). Pendant ce temps le code JS de phpmyvisites dans la page loggue le téléchargement

  • le lien vers le fichier à télécharger a une méthode onclick: qui valide et lance l'enregistrement du log par phpmyvisites (appelle la fonction log_phpmv() qui affiche l'appel à l'image dans un <div>). Inconvénient

    le code javascript de phpmyvisites doit être placé
    en haut des pages, après le <body> car la fonction doit être déclarée avant son appel, en javascript. Or il n'est pas conseillé de placer les marqueurs de mesure d'audience en haut des pages.

La variable pagename dans le cas d'un fichier est de la forme

var pagename = "FILE:fichier_a_telecharger.zip";

Ou avec un nom « parlant »

var pagename = "FILE:Plan_accès_entreprise";



Par la suite il pourra éventuellement être possible de gérer des groupes de fichiers comme les groupes de pages. En attendant la solution est de créer un groupe « Fichier » et de considérer les fichiers comme de simples pages, si cette notion d'arborescence entre les fichiers est nécessaire.

Gestion des referers « partenaires »[modifier | modifier le wikicode]

Il serait intéressant que certaines URLS connues soient classées dans une section partenaires dans affluents. De même quand il y a un paramètre idsite_partner=xx dans l'url du site analysé pouvoir considérer cet id comme provenant d'un site partenaire.

Cette fonctionnalité entraîne la gestion des sites partenaires dans l'administration :

  • nom du site partenaire

  • URL du site partenaire

  • id valeur de la variable idsite_partner

Gestion des referers « newsletters »[modifier | modifier le wikicode]

Idem que pour les sites partenaires, gérer les visites venant d'une newsletter via la détection d'une variable idnewsletter.


Cette fonctionnalité entraîne la gestion des newsletters dans l'administration :

  • nom newsletter

L'id valeur de la variable idnewsletter est alors donné par phpmyvisites, et c'est cet id qui doit être placé dans les liens de la newsletter.

Fonctionnalités administration[modifier | modifier le wikicode]

Exclusion d'IP et de plages d'IP[modifier | modifier le wikicode]

Pour un site donné, on peut exclure une ou plusieurs plages d'ip.
De la forme A.B.C.D ou A.B.C.x ou A.B.x ou A.x

x pouvant prendre n'importe quelle valeur

Intérêt : dans les réseau de grandes entreprises, il est impossible d'installer un cookie sur chaque poste (technique disponible actuellement dans phpmyvisites) cette exclusion par plage d'ips est pratique et fiable

Gestion avancée des utilisateurs et des droits[modifier | modifier le wikicode]

Importante nouveauté. Il sera possible de créer des utilisateurs avec différents droits sur chaque site.

Fonctionnalités :

  • ajout nouveau user

  • modification caractéristiques user

  • (futur : suppression user)

Niveaux de droits prédéfinis (d'autres sont ajoutables mais ça ne semble pas naturel)

  • Super admin : tous les droits sur tous les sites sans exception et sans modification possible

  • Admin site N : droits de modification, de purge des données, etc.

  • Consultant site N : droit de voir les stats, d'ajouter un cookie pour ne pas être pris encompte

  • Visiteur : droit (ou pas) de consulter les stats

Chaque utilisateur est caractérisé par un alias, un login, un password

Sont affichés les dates de dernière connexion, les ips et hostnames des dernières connexions.

A noter l'arrivée par défaut en mode « anonymous » qui concerne tous les visiteurs non logguées. On gère les droits de ce anonymous comme on gère les droits d'un user enregistré. Bien sûr il ne faut pas lui donner plus que le droit de visiteur.

Un site peut avoir plusieurs URLs différentes[modifier | modifier le wikicode]

Ces URLs sont enregistrées dans l'admin pour le site considérée et les provenances à partir de ces urls ne sont pas considérées dans les « sites affluents » mais dans les « accès directs »

Système simple et pratique de sauvegarde restauration de toutes les données (facultatif)[modifier | modifier le wikicode]

En un clic, une archive est créée sur le serveur dans un répertoire /backup/ en gzippé

Possibilité de restaurer les stats facilement (lecture du gzip et écriture données base)

Fonctionnalités visites[modifier | modifier le wikicode]

Fréquences des visites[modifier | modifier le wikicode]

Question : comment gérer les visiteurs uniques proprement ?
Réponse : gestion plus fine des visiteurs et de leur visites. Gestion via des cookies et une autre méthode qui consiste à considérer que la parfaite concordances d'éléments techniques que sont l'OS, la résolution, le navigateur, la profondeur de couleur et l'IP implique qu'une personne est unique (elle a donc une IP fixe et une configuration fixe, souvent le cas, et de plus en plus pour les Ips fixes). On ne peut plus se baser sur la différence heure locale/heure serveur car les XP SP2 sont mis à l'heure de MS automatiquement. Cette information n'est plus pertinente. A noter que si une personne change de navigateur il n'y aura aucun moyen de la détecter comme un visiteur unique (son cookie change ET son navigateur change). Ce cas reste très rare.


Information disponibles :

  • fréquence de visites sur la période

  • nombre de visiteurs uniques (chiffre exact... contrairement à actuellement)

  • taux de retour des visiteurs sur la période (assiduité)

  • % de nouveaux visiteurs / % visiteurs connus (graph : soit 2 barres verticales, soit une à 2 couleurs)

  • pages vues par visite du visiteur fidèle

  • moyenne des pages vues du visiteur fidèle

  • nombre de visiteurs par nombre de visites sur la période

Pages vues par visites significatives[modifier | modifier le wikicode]

Nombre de pages vues pour les visites de plus d'une page. Plus intéressant que la donnée « pages vues par visite » qui prend en compte les visites à une page vue.

Durée de visite par page[modifier | modifier le wikicode]

Par page être capable de donner le temps de visite moyen

Top des meilleurs configurations[modifier | modifier le wikicode]

Top des meilleurs trio OS/navigateur/résolution pour montrer les tendances du marché

Pages des visites à une page vue (facultatif)[modifier | modifier le wikicode]

Liste des pages qui ont entraînées une visite à une page vue (single access pages) : classées par nombre de visites. Cela peut mettre en avant des pages sans contenu ou liens vers d'autres contenus. Des pages à retravailler (le taux de visites à une page vue doit être le plus faible possible).

Divers (à préciser...)[modifier | modifier le wikicode]

Export des données dans différents formats (facultatif)[modifier | modifier le wikicode]

Il serait intéressant de pouvoir exporter toutes les données fournies dans l'interface de phpmyvisites dans différents formats :

  • CSV

  • XML

  • XHTML Imprimable

  • PDF

  • Envoi de mail automatique (problème de l'archivage qui est nécessaire...)

Cette fonctionnalité implique un important travail de structuration des donnéees, le must étant certainement de passer par le XML pour ces exportations. Voir la compatibilité de la classe PEAR XML_Serializer avec les hébergeurs, car elle serait très pratique.

Vision plus globale de l'évolution à long terme de l'audience (facultatif)[modifier | modifier le wikicode]

Il serait intéressant de voir plus facilement l'évolution de l'audience sur des longues périodes. Solutions ? Graphiques plus étalés dans le temps, tableaux récapitulatifs remontant plus que 7jours/7semaines/7mois.

A réfléchir...

Conservation urls précises des moteurs de recherche (facultatif)[modifier | modifier le wikicode]

Demande fréquente des utilisateurs mais lourdes contraintes techniques : il serait intéressant pour eux de conserver les urls précises des moteur de recherche qui ont permis d'accéder au site. Cela permet de voir directement le classement dans le moteur de recherche en un clic.
Problèmes

quand beaucoup de mots clés différents, de moteurs

différents, il y a énormément d'adresses à conserver pour un volume de données très important.

Le must serait de proposer cette fonctionnalité en option activable ou pas.
A voir si du temps disponible...

Organisation de l'interface de phpMV 2.0[modifier | modifier le wikicode]

Tout ce qui est italique rouge sont les nouveautés prévues



VISITES

Statistiques

Récapitulatifs sur la période

Graphique récapitulatif des statistiques

Graphique des durées des visites par visiteur

Intérêts des visites en fonction de critères particuliers

Graphique des visites par heure du serveur

Graphique des visites par heure du visiteur

Graphique des lieux de connexion



PAGES VUES

Tableau des détails des groupes et des pages vues

(Analyse avancée d'une variable)

Graphique des visites par nombre de pages vues

Durée de visite par groupe et par page vue

Tableau des fichiers téléchargés

Graphique des pages vues par heure du serveur

Graphique des pages vues par heure du visiteur



SUIVI

Groupes d'entrées

Groupes de sorties

Pages d'entrées

Pages de sortie

Suivi du chemin du visiteur par groupes

Suivi du chemin du visiteur par pages


PROVENANCE

Mappemonde

Récapitulatif des pays

Fournisseurs d'accès



CONFIGURATIONS

Meilleurs configurations (OS + Navigateur + Résolution)

Systèmes d'exploitation

Navigateurs

Navigateurs (par famille)

Résolutions

Ecran large/normal

Couleurs

Plugins



AFFLUENTS

Graphique récapitulatif des affluents

Moteurs de recherche

Mots clés

Sites internet

Sites partenaires

Newsletters

Entrées directes


Notes diverses :

  • le lien pour les stats à l'année est ajouté à la suite de ( Jour | Semaine | Mois | Année )

  • les intérêts des visites sont disponibles dans une rubrique spéciale Intérêts dans la rubrique Visites et sont aussi disponibles dans chaque sous rubrique où c'est faisable. Par exemple, dans la rubrique Navigateurs On trouve un lien discret nommé Intérêts qui pointe vers les intérêts des visiteurs en fonction du Navigateur. Idem pour les autres critères définies dans <A HREF="#Intérêts de visites|outline">Intérêts de visites</A> Le sous-titre est « Intérêts des visiteurs en fonction du critère X »

  • Les fichiers téléchargés sont affichés dans un tableau classiques comme sont actuellement présentées les pages vues dans phpmyvisites 1.3.1

  • Pour les groupes et pages vues, possibilité de déplier les groupes et sous groupes. Gestion des données via AJAX, chargement dynamique pour plus de rapidité et d'aisance de navigation. Possibilité de classer par ordre alphabétique ou nombre de hits, croissants ou décroissants.

    Sont affichées les nombre de hits par groupe en faisant la somme des hits des sous groupes et pages.
    Possibilité d'afficher les différentes valeurs qu'ont pris les variables et le nombre de fois qu'elles ont pris ces valeurs par groupe, sous groupe, page

  • Pour les Durée de visite par groupe et par page vue la présentation est la même que le Détail des groupes et des pages vues sauf que l'information n'est plus le nombre de hits sur les pages et groupes mais le temps moyen passé sur ces pages et groupes

  • Les Sites partenaires et Newsletters ont la même présentation que les sites référant dans la version actuelle



ADMINISTRATION

  • Configuration générale

  • Ajouter un site Internet

  • Gérer les sites Internets

        • Modifier les caractéristiques

        • Gérer les partenaires

        • Gérer les newsletters

        • Exclure Ips ou plages d'IPs

        • Gérer les alias d'URL

  • Gestion des utilisateurs

        • Ajouter utilisateur

        • Modifier utilisateur

        • Supprimer utilisateur

  • (Informations techniques du serveur)

  • (Sauvegarde et restauration des données)


interfaces club

Objectifs du module info[modifier | modifier le wikicode]

La carte PC a accès à deux ressources indépendantes : la carte électronique et la caméra firewire. Son but est donc de les utiliser au mieux afin de jouer le plus intelligemment (ou plutôt efficacement) possible. Le programme doit aussi être facilement configurable et pratique à déboguer, notamment en vue d'un changement tactique de dernière minute.

Unités[modifier | modifier le wikicode]

Cette partie pourrait presque faire partie du guide de style, elle concerne les unités utilisés par les interfaces.

  • On utilisera pour désigner des longueurs, positions ou distances le millimètre.
  • Les angles seront mesurés en radian.
  • Les vitesses s'expriment en millimètre/seconde et les accélérations en millimètre/seconde².
  • Les vitesses angulaires en radian/seconde et les accélérations en radian/seconde².
  • Les fréquences en Hertz.
  • Les temps en seconde.

Si pour une raison ou une autre une autre unité est utilisée, il faudra préciser clairement dans le commentaire et dans le nom de la fonction ou de la variable quelle unité est utilisée.

Numérotation des éléments du terrain[modifier | modifier le wikicode]

Voir les schémas annexes... On considère que les éléments sont fixes et que c'est le robot qui démarre d'un cote ou de l'autre.

Les éléments importants du terrain sont numérotés de la façon suivante :

  • Tx.y pour la position des totems, x représentant le numéro de camp et y la position dans le camp.
  • Hx.y pour la position des trous (Holes), x représentant le numéro de camp et y la position dans le camp en partant du haut du terrain. La numérotation des trous suit la logique du terrain (les trous sont placés par symétrie axiale), mais le terrain risquant d'être modifié, il est probable que la numérotation change.
  • Bx.y pour la position des balles, x représentant la couleur de la balle et y la position de la balle en partant en haut à gauche du terrain.
  • Beaconx.y pour la position des balises, x représentant le numéro de camp et y le numéro de balise.

Description des couches et modules[modifier | modifier le wikicode]

Comme le montre le diagramme UML, le programme est divisé en couche représentant différents niveaux d'abstraction permettant de passer du protocole de communication avec le matériel, au niveau le plus abstrait qui permet de faire jouer un match complet en quelques lignes de script.

Légende des priorités[modifier | modifier le wikicode]

Il existe un système de priorité de développement pour organiser le développement. 3 niveaux de priorités :

  • *** : Urgent / indispensable. À faire en priorité, doit être parfaitement stable et fonctionnel
  • ** : Intéressant. Indispensable pour faire une intelligence évoluée. Dans un 1er temps, facultatif.
  • * : Facultatif. Le must du must pour de l'IA poussée... si on a fini en avance alors on gère ce genre de choses, mais on ne perds pas une minute dessus jusqu'à Avril.

Couche "Auxiliaires Globaux"[modifier | modifier le wikicode]

Cette couche regroupe l'ensemble des modules pouvant servir à plusieurs niveaux, on y retrouve typiquement des modules de débuggages, de configurations, des définitions de types globaux ou des modules facilitant le codage (plus spécifique au C++).


Types Globaux[modifier | modifier le wikicode]

Description

Ce sont tous les types qui ne sont pas spécifiques à un module, et qui pourront donc être employés par plusieurs couches différentes. On a notamment des types permettant de spécifier des positions.

Ébauche d'interface 
Priorité globale : ***
 typedef int64;
 typedef uint64;
 typedef int32;
 typedef uint32;
 typedef int16;
 typedef uint16;
 typedef int8;
 typedef uint8;

 class cRange
 {
 	bool IsInRange(float value);
 	float GetNearestValueFrom(float value);
 }

 class cPos3D
 {
 	cVector4D GetCoordInBase(const cBase &);
 	void SetCoordInBase(const cBase &, const cVector4D &);
 };

 class cBase
 {
 	cBase(cBase *Parent);
 	SetPosition(const cVector3D&), Rotate();
 };
Variables globales
cBase RepereAbsolu;
cBase RepereRobot;

On utilise deux repères globaux à l'application :

  • Le premier est absolu, son origine se situe dans le coin a droite de la zone de départ du robot. L'axe des X est parallèle à la grande longueur du terrain, l'axe des Y est parallèle à la largeur du terrain et l'axe Z est perpendiculaire au terrain, orienté vers le haut.
  • Le second est relatif, son origine se situe entre les deux roues motrices du robot. L'axe des X est dirigé vers l'avant du robot, l'axe des Y est dirigé vers la gauche du robot et l'axe Z est identique à l'axe Z du repère absolu. Enfin on définit l'angle thêta comme l'angle direct (sens trigo) entre l'axe X absolue et l'axe X relatif.

Math[modifier | modifier le wikicode]

Description

Primitives mathématiques diverses qui servent en particulier au positionnement (matrice4x4, vecteur3d)

Ébauche d'interface 
Priorité globale : ***
 class cMatrix4x4
 {
 	//operations basiques sur les matrices :
 	//addition, multiplication... (avec une autre matrice ou un scalaire)
 }
 
 class cVector4D
 {
 	//opérations basiques sur les vecteurs:
 	//addition, multiplication... (avec un autre vecteur, un scalaire ou une matrice)
 }

+ fonctions permettant de créer des matrices de rotation, translation...

Constantes Globales[modifier | modifier le wikicode]

Description

Constantes généralement en relation avec le règlement, le terrain ou la mécanique du robot.

Ébauche d'Interface
FIELD_WIDTH
FIELD_HEIGHT
HOLE_RADIUS
BALL_RADIUS
TOTEM_RADIUS
BALL_NB
HOLE_NB

Voir la section sur la numérotation des éléments du terrain.

HOLE_POSITION[x][y]
TOTEM_POSITION[x][y]
BALL_START_POSITION[x][y]
BEACON_POSITION[x][y]

Helpers divers et Abstraction OS[modifier | modifier le wikicode]

Description

Couche d'abstraction avec le système d'exploitation.

En particulier il s'agit d'objets simplifiant :

  • le multitâche (création de thread et synchronisation)
  • le réseau (création de client/serveur tcp-ip)
  • le chronométrage (utilisé uniquement par le module Timer)
  • les interfaces graphiques (utilisé uniquement par le module IHM)


Ébauche d'interface 
Priorité globale : ***
 class cMutex
 {
 	Lock();
 	Release();
 };

 class cEvent
 {
 	Wait();
 	Set();
 };

+Gestionnaire d’événement/message avec des fonctions du style :

 LinkEventToCallback(event, callback);
 //Problème de durée de vie des événements ?

 class cThread
 {
 	virtual int32 threadMain();
 };

 //Automatise la protection de variable avec un mutex
 template 
 class cProtectedData<typename T>
 {
 	T Get();
 	void Set(const &T);
 
 	//Classe permettant de modifier l'objet directement
 	//(sans en faire de copie)
 	class Accessor;
 };
 
 //Idem cProtectedData, mais stocke la variable en
 //plusieurs exemplaires (technique du backbuffering)
 template
 class cBufferedData<typename T>
 {};

 template class cSingleton<typename>;

 uint64 GetCurrentTick();
 uint64 GetTickFrequency();
 date GetTodayDate();
Priorité : **
//Classes mères de client/serveur tcp-ip
class cTCPIPServer;
class cTCPIPClient;

Voir doc spécifique OSAL.

Timer[modifier | modifier le wikicode]

Description

Le timer peut envoyer des évènements à certains moments clefs du match. On peut aussi lui demander de lever un évènement toutes les x secondes. Il permet en plus de chronométrer, et de profiler facilement certaines parties du code.

Ébauche d'interface 
Priorité globale : **
(seule sont indispensables les méthodes permettant de connaitre la fin du match, et de calculer un temps simplement et précisément)


uint64 GetCurrentTick();
uint64 GetTickFreq();
void MatchBeginNow();
uint32 GetMsAfterBeginning();
uint32 GetMsBeforeEnd();
[IT]: EndOfMatch();
[IT]: TimeBeforeEnd(int sec);
[IT]: TimeAfterBeginning(int sec);
[IT]: WarnMeIn(int ms);
[IT]: WarnMeEvery(int ms);


class cProfiler - Priorité : *
{
	SegmentStart();
	SegmentEnd();

	GetAveragePeriod();
	GetAverageFrequency();
	GetCallNumber();
}

IHM/Debug[modifier | modifier le wikicode]

Description

Le but de ce module est de faciliter le debuggage (éventuellement à distance). On y retrouve des classes permettant de logguer du texte, de tracer des courbes, d'afficher des images à l'écran assez facilement ou encore de lire le clavier de manière asynchrone.

Ébauche d'interface 
 //Classe de log, fournit des ostream (type cout)
 //l'affichage se fait dans des consoles graphiques
 class cLog - Priorité : '''***'''
 {
 	static std::ostream &Debug();
 	static std::ostream &Error();
 	static std::ostream &Info();
 }; 

 //type de figure pouvant etre dessine sur le terrain2D
 class cPattern - Priorité : '''**'''
 {
 	Move(const cPos2D &);
 	Hide(); / Show();
 	Blink(hz);
 };
 
 //Fenetre d'affichage de terrain vue du dessus
 class cFieldDisplayer - Priorité : '''**'''
 {
 	cPattern *AddPattern(Dot/Pixel/Line/Cross/Circle/Square + color);
 	[IT]: OnMouseClick() + GetMousePos()
 };

 //Fenetre d'affichage video
 class cVideoDisplayer - Priorité : '''***'''
 {
 	DrawPicture(rgb);
 }

 //Fenetre d'affichage de courbe
 class cPlotDisplayer - Priorité : '''*'''
 {
 	AddPoint(x, y);
 	SetScale(minX, maxX, minY, maxY);
 }

 //La fonction callback prend en paramètre l'id de la touche pressée
Priorité : **
[IT] OnKeyPressed();
[IT] OnSpecKeyPressed(keyid);

Config Manager[modifier | modifier le wikicode]

Description

Le Config Manager permet de configurer les constantes de chaque module au démarrage du programme. Il pourra par exemple lire ces constantes depuis un fichier de script (type .ini ou .xml).

Ébauche d'interface 
class Config - Priorité : **
{
	void Load(file);
 	int32 GetVar(string);
};

Couche IA (Intelligence Artificielle)[modifier | modifier le wikicode]

Il s'agit de la couche décisionnelle de plus haut niveau : à terme la tactique devrait être programmé uniquement dans ces modules.

IA/Script[modifier | modifier le wikicode]

Description
Priorité : *

Il s'agit du module le plus haut : c'est lui qui prend les décisions, il peut éventuellement se servir d'un fichier de script (type Python ou Lua) pour lire les actions qu'il doit exécuter.

Il n'y a pas réellement d'interface pour ce module étant donné que c'est à lui d'utiliser les autres modules. Par contre si on décide d'utiliser un fichier de script, il faudra définir des fonctions "glues" permettant d’appeler les fonctions haut niveau du programme C++ depuis le script.


Exemple de script simple du type homologation

On récupère une balle a une position sure et on va la déposer dans le trou le plus simple.

 onStarter()
 {
 	cParallelLinePath path1;
 	cBallPickupWP wp1(BALL_START_POSITION(B1.1));
 	path1.push(wp1);
 	Controler::Run(path1);
 }
 
 ~ Approximatif : ~
 onBallPickupReached(-400)
 {
 	Automatisme::ActivateRollerDuring(800);
 }
 ~
 
 onNewBallInEjector()
 {
 	Controler::Stop();
 	cParallelLinePath path2;
 	if(Automatisme::GetBallColor(LEFT_EJECTOR) == WHITE_BALL)
 	{
 		cBallDropping wp2(LEFT_EJECTOR, HOLE_POSITION(H2.1));
 	}
 	else if(Automatisme::GetBallColor(RIGHT_EJECTOR) == WHITE_BALL)
 	{
 		cBallDropping wp2(RIGHT_EJECTOR, HOLE_POSITION(H2.1));
 	}
 	path2.push(wp2);
 	Controler::Run(path2);
 }
 
 
 onBallDroppingReached()
 {
 	if(Automatisme::GetBallColor(LEFT_EJECTOR) == WHITE_BALL)
 	{
 		Automatisme::DropBall(LEFT_EJECTOR);
 	}
 	else if(Automatisme::GetBallColor(RIGHT_EJECTOR) == WHITE_BALL)
 	{
 		Automatisme::DropBall(RIGHT_EJECTOR);
 	}
 }
 
 
 onEndOfGame()
 {
 	cControler::EmergencyStop();
 	Automatisme::StopAll();
 }
 
 onCollisionDetected()
 {
 	cControler::EmergencyStop();
 	Automatisme::StopAll();
 }

Exemple de script en pseudo langage :

 //On suppose que le script a deja ete lance par l'ihm elec avec les fonctions suivantes :
 //Automatisme->ActivateIA().Wait();
 //nb = Automatisme->GetIHMStratSwitch();
 //LaunchScript(nb);
 
 Pos->SetTeam(Auto->GetTeamSwitch();
 Auto->Starter().Wait();
 
 ClothoidPath path;
 pos = posaux->GetNearestWhiteBall();
 wp = WaypointPickup(pos);
 LinkEventToCallback(wp.Approaching(500), Auto->ActivateRollerDuring(1000));
 path.push(wp);
 
 pos = posaux->GetNearestWhiteBall(pos);
 wp = WaypointPickup(pos);
 LinkEventToCallback(wp.Approaching(500), Auto->ActivateRollerDuring(1000));
 path.push(wp);
 
 pos = posaux->GetNearestAlliedFreeHole(pos);
 wp = Waypoint(pos);
 LinkEventToCallback(wp.Approaching(1000), RecomputePathWithEjecteur());
 path.push(wp);
 
 path.go();

 function RecomputePathWithEjecteur
 path.clear();
 if(Auto->GetBallColor(LEFT) == WHITE_BALL)
      wp = WaypointDropping(pos, LEFT);
 else
      wp = WaypointDropping(pos, RIGHT);
 
 path.push(wp);
 path.recompute();
 LinkEventToCallback(path.GoalReached(), Auto->DropBall(LEFT/RIGHT);

Couche Auxiliaire IA[modifier | modifier le wikicode]

Les auxiliaires de l'IA sont la pour simplifier certains calculs et algorithmes et permettent donc à la couche d'IA d'utiliser des scripts assez simples. Cela permet aussi de factoriser certaines taches qui pourrait revenir systématiquement dans chaque script.

Positionnement auxiliaire[modifier | modifier le wikicode]

Description

Fournit à l'IA des fonctions simples pour obtenir des informations sur des éléments particuliers du jeu (comme la balle la plus proche ou le trou le plus accessible). Basiquement il s'agit d'algorithme de tri ou de recherche de min/max.

Interface

Les fonctions retournent un booléen indiquant l'existence de l'élément recherché et modifie l'objet position le cas échéant. Le terme 'nearest' ici signifie proche en temps, pas forcément en distance. Il s'agit donc d'obtenir l'élément le plus accessible.

bool GetNearestWhiteBallPos(Pos &, posRobot = currentPos); (priorité : ***)
bool GetNearestBlackBallPos(Pos &, posRobot = currentPos); (priorité : *)
bool GetNearestUntriggeredTotemPos(Pos &, posRobot = currentPos);  (priorité : *)
bool GetNearestFreeAlliedHolePos(Pos &, posRobot = currentPos); (priorité : ***)
bool GetNearestBlackAlliedHolePos(Pos &, posRobot = currentPos); (priorité : *)
bool GetNearestFreeOpponentHolePos(Pos &, posRobot = currentPos); (priorité : **)
bool GetNearestWhiteOpponentHolePos(Pos &, posRobot = currentPos); (priorité : *)
//retourne le point le plus proche de la bordure
void GetNearestHorizontalBorderPos(Pos &, posRobot = currentPos); (priorité : **)
void GetNearestVerticalBorderPos(Pos &, posRobot = currentPos); (priorité : **)
//Fonction de retour d'info IA → Positionnement
Priorité : ***
void	FrontTouchedDownHEdge();
void	FrontTouchedUpHEdge();
void	FrontTouchedLeftVEdge();
void	FrontTouchedRightVEdge();
void	BackTouchedDownHEdge();
void	BackTouchedUpHEdge();
void	BackTouchedLeftVEdge();
void	BackTouchedRightVEdge();

Pathfinder[modifier | modifier le wikicode]

Description

Le pathfinder permet de déterminer les trajectoires optimales permettant d'aller d'un point a un autre.


Ébauche d'interface 
 class cPath //- Priorité : '''***'''
 {
 public:
 	virtual	void	Compute();
 	virtual	cmd	TranslateToMotorCmd();
 	virtual	float	EstimateDeviation(const cPos &Current);
 	virtual	float	EstimateRemainingTime();
 
 		void	Push(const cWaypoint &);
 		void	Push(const cFixedWaypoint &);
 
 	static	float	EstimateTime(pos From, pos To);
 }

Des classe spécialisées peuvent hériter de cPath afin d'avoir plusieurs style de trajectoires, par exemple on peut avoir un cPath version clothoide, un cPath version ligne droite et rotation sur place, ou encore un cPath ligne droite horizontale ou verticale uniquement.

 class cClothoidPath : public cPath; Priorité : '''*'''
 class cStraightLinePath : public cPath; Priorité : '''**'''
 class cParallelLinePath : public cPath; Priorité : '''***'''


 class cControler : public cSingleton - Priorité : '''***'''
 {
 	void	Run(const cPath &); == TransitionToPathAt (path, 0)
 	void	Stop();
  	void	EmergencyStop();
  	void	TransitionToPathAt(const cPath &, ~uint32 Tick~);
 	cWaypoint GetInitWaypointAt(uint32 Tick);
 	cWaypoint GetNextWaypoint();
 
 [IT]:
 	GoalReachedIn(uint32 ms = 0);
 	WaypointReachedIn(uint32 ~waypnb~, uint32 ms = 0); (dans Waypoint ?)
 	DeviationDetected(float difference);
 	ObstacleOnPath();
 };


 class cWaypoint - Priorité : '''***'''
 {
 	virtual cRange GetAllowedSpeedRange();
 	virtual cRange GetAllowedAngularSpeedRange();
 	virtual cRange GetAllowedThetaRange();
 	virtual enum GetAllowedDirection();
 	virtual cPos GetPos(float theta);
 
 	//GenerateFixedWaypoint(...);
 };
 
 class cFixedWaypoint
 {
 	float GetLeftSpeed();
 	float GetRightSpeed();
 	cPos GetPos();
 	float GetTheta();
 };

Des classes spécialisées peuvent hériter de cWaypoint, pour définir par exemple des Waypoint de recallage sur bordure, d'attrapage de balle ou encore de dépose de balle. Ceci permet d'ajuster plus précisément la position du robot : pour déposer une balle dans un trou, il faut aligner l'éjecteur de balle avec le trou (et non pas le centre du robot).

 class cEdgeFrontAdjustement : public cWaypoint; //(priorité : '''**''')
 class cEdgeBackAdjustement : public cWaypoint; //(priorité : '''**''')
 class cBallPickup : public cWaypoint; //(priorité : '''***''')
 class cBallPickupAgainstBorder : public cWaypoint; //(priorité : '''**''')
 class cBallDropping : public cWaypoint; //(priorité : '''***''')
 class cBallAspiration : public cWaypoint; //(priorité : '''*''')
 class cTotemTriggering : public cWaypoint; //(priorité : '''*''')

Synthèse[modifier | modifier le wikicode]

Cette couche permet de regrouper les informations par catégorie sans distinctions de leur source (Vidéo ou HAL). Par ex: on peut contrôler et connaître l'état d'un capteur par la même interface même si l'état est connu par le biais de la vidéo et que le contrôle se fait par la HAL.

Positionnement[modifier | modifier le wikicode]

Description

Le module de positionnement synthétise toutes les informations relatives aux positions des éléments du jeu (balles, robots, totems, éléments du terrain), il peut aussi donner l'incertitude sur ces valeurs. L'intérêt est notamment de faire la synthèse des informations redondantes (particulièrement pour la position du robot : odométrie, caméra, balise).

Ébauche d'interface 
(priorité globale : ***)
 struct sBall
 {
 	enum color;
 	pos; delta;
 	trustyness;
 	bool isInHole;
 };

 struct sOppBot
 {
 	pos; delta;
 	trustyness;
 };

 struct sRobot
 {
 	pos; delta;
 	angle; delta;
 	vitesse;
 };

 struct sTotem
 {
 	id;
 	bool Triggered;
 	enum side;
 	pos;
 };

 struct sHole
 {
 	id;
 	enum side;
 	pos;
 	enum filled;
 };


 vector<sBall> GetKnownWhiteBall(); //(priorité : '''***''')
 vector<sBall> GetKnownBlackBall(); //(priorité : '''*''')
 vector<sTotem> GetKnownTotem(); //(priorité : '''*''')
 sOppBot GetOpponentBot(); //(priorité : '''*''')
 sRobot GetRobot(); //(priorité : '''***''')
 sHole[28] GetHole(); //(priorité : '''***''')


 //fonctions de retour d'infos IA -> Positionnement
 void SetTeamColor(enum); //(priorité : '''***''')
 void SetPosRobotX(); //(priorité : '''***''')
 void SetPosRobotY(); //(priorité : '''***''')
 void SetWhiteBallInHole(id); //(priorité : '''**''')
 void SetBlackBallInHole(id); //(priorité : '''*''')
 void SetTotemTriggered(id); //(priorité : '''*''')

Automatisme[modifier | modifier le wikicode]

Description

Le module d'automatisme gère les différents actionneurs et capteurs (comme la tirette de démarrage). Il permet donc de connaître l'état des actionneurs et de les contrôler assez facilement. On peut par exemple savoir la couleur de la balle actuellement dans le système d'éjection (vidéo) et commander son éjection (HAL).

Ébauche d'interface 
(priorité globale : ***)

La définition des interfaces du driver HAL générique dépasse le cadre de ce document, voir la doc spécifique.

void ActivateRoller(bool);  
void ActivateFan(bool);
void ActivateRollerDuring(int ms);
void ActivateFanDuring(int ms);
void EjectBall(enum);  
void DropBall(enum);  
enum GetBallColor(enum);  
enum GetIHMTeamSwitch();
int GetIHMStratSwitch();

void StopAll();

CommandeAsservBasNiveau....
(Vitesse moteur + distance à parcourir) pour chaque roue.
[IT] CollisionDetected();
[IT] NewBallInEjector();
[IT] ActivateIA();
[IT] Starter();

Drivers (spécifiques et génériques)[modifier | modifier le wikicode]

La couche de drivers spécifiques dépend entièrement de la mécanique du robot utilisé et du règlement du jeu. Son interface explicite donc les noms des divers éléments. Cette couche est directement relié à la couche de drivers génériques, elle effectue une simple traduction. La couche générique est plus universelle et devrait pouvoir être réutilisée pour plusieurs règlement/application.

Vidéo et vidéo lib[modifier | modifier le wikicode]

Description

Le module de vidéo utilise la librairie vidéo afin de détecter les éléments du jeu. La librairie vidéo est quant à elle beaucoup plus générique et devrait pouvoir être réutilisée telle quelle d'année en année.

Ébauche d'interface 

La définition des interfaces du driver vidéo générique dépasse le cadre de ce document, voir la doc spécifique.

vector<sBall> GetExternalBall(); - Priorité : ***
vector<sBall> GetInternalBall(); - Priorité : *
sRobot GetRobotPos(); - Priorité : **
vector<sTotem> GetTotem(); - Priorité : **
enum GuessTeam(); - Priorité : ½*

HAL (Hardware Abstraction Layer) et Driver Elek[modifier | modifier le wikicode]

Description

De la même façon que la vidéo, l'HAL fournit une implémentation spécifique du driver elek. L'HAL fournit donc une interface explicitant le nom des actionneurs, tandis que le driver elek reste totalement générique et ne dépend que de l'électronique utilisée.

Ébauche d'interface 
(priorité globale : ***)

[A définir plus précisément avec la méca et l'asservissement]

Pos GetOdometriePos(); 
angle-time GetGonioTick();
+ Idem Automatisme

Simulateur[modifier | modifier le wikicode]

Description

Le simulateur permet de coder les modules haut niveau (au dessus de la couche de HAL) sans avoir implémenté les couches inférieures. Dans notre cas, le simulateur va nous aider à coder :

  • Dans un premier temps : les modules de recherche et de génération de chemin.
  • Ensuite : les modules de synthèses de position et de positionnement auxiliaire.
  • Enfin indirectement, le module d'intelligence artificielle.


Interface

L'interface possède donc deux niveaux (mutuellement exclusive, on utilise qu'une des deux):

  • Un niveau qui simule la couche de synthèse avec notamment les fonctions :
sRobot GetRobot(); //infos diverses sur l'etat du robot (cf struct sRobot)
cEvent Starter(); //tirette de demarrage
//Commande Asserv
PushCmd(v1,v2, d1,d2); //Envoie une commande a l'asservissement
ClearCmd(); //Efface les commandes courantes de l'asservissement
//+Eventuellement les fonctions de positionnement des autres objets:
vector<sBall> GetKnownWhiteBall();
vector<sBall> GetKnownBlackBall();
vector<sTotem>GetKnownTotem();
sOppBot       GetOpponentBot();
sHole[28]     GetHole();
  • Un second niveau simulant la couche de HAL :
//Vidéo :
vector<sBall> GetExternalBall();
sRobot GetRobotPos(); //camera
//Elek :
sRobot GetRobotPos(); //odometrie
cEvent CollisionDetected();

À ces deux niveaux d'interfaces, vient se rajouter le module de constantes.

Le simulateur doit aussi être configurable, on doit pouvoir notamment régler les erreurs/incertitudes sur les capteurs, un decallage entre la commande et la mise en action (simulation de la latence de la transmission usb), ...

GFDL GFDL Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture.