« Matomo/Réflexions version2 » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 122 :
 
==Comptabilisation des moteurs de recherches via un système de log parallèle==
Voir discussion sur
 
http://fr.wikibooks.org/wiki/Documentation_phpMyVisites/R%C3%A9flexions_version2/SearchEnginesDetection
=== description ===
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 executé 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
:* nb 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 roboots. 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===
 
<?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.--[[Utilisateur:Jidébé|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 ? [[Utilisateur:Matthieu|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.--[[Utilisateur:Jidébé|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&amp;ip=$ip&amp;agent=$agent>");
?>
Je suis en train de le tester.--[[Utilisateur:Jidébé|Jidébé]] 23 jul 2005 à 16:11 (UTC)
:ok tiens moi au courant ! [[Utilisateur:Matthieu|Matthieu Aubry]] 24 jul 2005 à 11:10 (UTC)
 
:: [[Utilisateur:Marco|Marco]] => La piste de l'image est une fausse piste, les robots ne vont pas l'appeller, en tout acs 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 d'intérogation 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 immaginer 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étcter les robots, il faut trouver une solution pérenne et si on passe par une liste récuperé sur un site il faut bien vérifier que la licence d'utilisaton soit compatible.
::: [[Utilisateur:Marco|Marco]] Après reflexion, 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.
:::: [[Utilisateur:Matthieu|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 requete 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 :
<pre>
 
<?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);
?>
</pre>
 
Je n'ai pas d'affichage de "probleme", donc à priori la connection se fait,
le echo"$ligne"; me donne :
<pre>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
</pre>
mais rien ne se passe (pas de prise en compte de la visite), pourquoi?
 
::--[[Utilisateur:Jidébé|Jidébé]] 28 jul 2005 à 08:44 (UTC)J'ai modifié mon tag comme ça :
<pre>
<?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");
 
// initialition de l'entete
 
$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);
}
 
?>
 
</pre>
 
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?
 
::--[[Utilisateur:Jidébé|Jidébé]] 29 jul 2005 à 11:26 (UTC)Voila pourquoi ça ne marche pas :
<pre>
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
</pre>
 
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.
 
=== MCD ===
 
Voici une proposition de structure des tables pour cette partie:
[[Image:structure_tables_robots.png]]
 
Vu le faible volume de données (les robots et les pages sont désignés par leur id), est-il nécessaire de prévoir des tables d'archivage semaine et mois?
--[[Utilisateur:Jidébé|Jidébé]] 22 jul 2005 à 22:49 (UTC)
 
: questions :
: * est ce sûr que les robots ont au maximum 2 ips ?
:: [[Utilisateur:Marco|Marco]] Non, google par exemple possède des dizaine d'ip pour ses robots. Ca ne sert à rien d'enregistrer les ip des robots.
: * pour les urls, tu devrait par contre utiliser exactement la même table que MA table page_url. L'id de cette table n'est pas l'id du robot car sinon il faudrait enregistrer chaque URL pour chaque robot, ce qui est lourd et inutile. Il faut que tu fasses une liste link_bots_vp qui fait le lien entre la table des logs des visites des robots et la table des urls de pages vues. EN fait je te conseille de suivre le MCD de la v2 qui est dessous en image car c'est la bonne solution, et surtout pas la version de phpmb 1.x car l'architecture des tables de la BDD est vraiment mauvaise ;)
: * bon courage :) surtout n'hésite pas à me poser des questions, et pour le mcd je te conseille l'excellent logiciel DBDesigner pour le dessiner, c'est rapide et tellement classe ;)
: [[Utilisateur:Matthieu|Matthieu Aubry]] 24 jul 2005 à 11:22 (UTC)
 
:: --[[Utilisateur:Marco|Marco]] 25 jul 2005 à 21:17 (UTC) Je ne suis pas du tout d'accord pour la table des robots qui semble très inspirée de robotstats. Je pense qu'il faut mener une réflexion sur la question, en particulier imaginer une détection par expression régulière et non par un simple user_agent. Pour la détection eventuelle par ip il faut faire une table supplémentaire pour ne pas être limité par leur nombre.
 
::: --[[Utilisateur:Jidébé|Jidébé]] 26 jul 2005 à 10:08 (UTC) Bon je vais revoir ma copie en fonction de tout ça. La détection par IP est-elle vraiment utile? Je n'en effectivement pas sur. La détection par expression régulière me plait bien. L'utilisateur a-t-il envie de savoir que c'est Googlebot untel ou Googlebot truc qui est passé sur son site ou simplement un robot Google?
 
:::: [[Utilisateur:Matthieu|Matthieu]] 26 jul 2005 à 17:32 (UTC) le mcd ressemble à moitié à robotstat et à moitié à phpmyvistes v1. Or phpmv v1 est vraiment nul, mauvais, au niveau des structures des tables, donc il faut l'oublier. jidébé, regarde attentivement le schéma de la v2 et pars de ça. Pour la gestion des robots je ne sais pas quoi dire, car je ne connais pas les problemes qui peuvent se poser.
:::: pour le robot Googlebot x ou y, SI et seulement SI l'information sert à quelque chose, alors on la donne, sinon on se content de GoogleBot. Pour savoir si cette information est pertinennte il faut demander sur les forums de webrankinfo, jidébé je te laisse t'en charger ;-)
 
==Sauvegarde et restauration des données par un système simple==