|
Pratique
13/02/2008
Suivre la navigation interne sur un site Web
Voici les bases pour réaliser un tracker de liens sortant en faisant appel à XHRConnection. Pour réaliser l'exemple suivant, vous devez avoir à votre disposition un environnement LAMP . XHRConnection est une classe qui permet de simplifier l'utilisation de l'objet XMLHttpRequest. Elle propose plusieurs méthodes afin de faciliter la gestion des données à envoyer en arrière plan, autrement dit, XHRConnection permet d'appréhender facilement Ajax. Depuis la version 1.1 elle inclut deux nouvelles fonctionnalités. Vous avez désormais la possibilité d'effectuer des opérations sans avoir à définir de fonction de callback. Enfin, il est proposé une méthode qui construit au besoin un objet DOM. XMLHttpRequest est une des briques pour réaliser des applications riches dites Web 2.0.
Utilisation de la classePour faire appel à la classe XHRConnection, placez ce code entre les balises head de votre page: <script type="text/javascript" src="XHRConnection.js"></script> Détéction des cliquesBeaucoup de solutions de tracking utilise des pages de redirection. Nous allons mettre en place ici une autre solution à base de JavaScript pour laisser les liens en "dur". Au chargement de la page nous allons définir une action sur le gestionnaire onclick de chaque lien. Ouvrez votre éditeur et créez le fichier javascript appelé tracker.js et placez le code suivant :
// +--------------------------------------------+
// | track
// | Entrée :
// | - lnk, référence au lien
// +---------------------------------------------+
function track (lnk) {
// Création de l'objet
var XHR = new XHRConnection();
// Paramètre à envoyer : l'URL de la page encours
XHR.appendData('urlFrom', document.location.href);
// Paramètre à envoyer : l'URL de la page demandée
XHR.appendData('urlTo', lnk.href);
// Appel du script serveur de tracking
XHR.sendAndLoad('tracker.php', 'POST');
// On retourne true pour permettre au navigateur
document.links est un tableau contenant l'ensemble des liens présents dans la page. Il suffit de parcourir ce tableau et pour chaque élément/lien indiquer que lorsque l'utilisateur clique sur le lien, on appelle la fonction track() en passant comme argument une référence au lien en cours. La fonction, via un object XHRConnection, enverra à un script coté serveur (tracker.php) l'URL de la page courante ainsi que l'URL de la page demandée par l'utilisateur. track() renvoit ensuite TRUE afin que le navigateur puisse effectuer la requête utilisateur en accédant à l'URL demandée. Pensez à inclure le fichier tracker.js de la même façon que vous l'avez fait pour XHRConnection.js
Enregistrement en base donnéesVoici la structure de la table MySQL utilisée : CREATE TABLE `tracking` ( `trakId` int(10) unsigned NOT NULL auto_increment, `urlFrom` varchar(255) NOT NULL, `urlTo` varchar(255) NOT NULL, `date` datetime NOT NULL, `ip` int(11) NOT NULL, PRIMARY KEY (`trakId`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Voici le script PHP du fichier "tracker.php" : <?php // Connectez vous à votre base de données MySQL // ... // Faut-il prendre en compe les liens internes, La constante ACCEPT_INTERNAL_LINK est un booléen qui permet de prendre en compte dans les liens internes (même domaine) si elle est égale à TRUE. Comme vous pouvez le constater, le script ne retourne rien. Le serveur renverra tout de même les entêtes HTTP.
ExempleLe tracking est actif sur ce document. Je vous invite à naviguer également à travers ces trois pages, et même de cliquer sur des liens externes :
Ensuite vous pourrez vous rendre à cette page pour voir le résultat du tracking.
Pour aller plus loinOn peut imaginer ajouter plusieurs filtres, de contrôles et même d'ajouter des informations. Je pense en particulier aux liens entrants (bakclink/referer) à envoyer au script serveur. Il est également possible de créer une structures de base de données plus performante (regrouper les URLS, gestion de clés étrangères, tables d'association ...). Ce contenu a été réalisé par Thanh Nguyen sous licence Creative Commons.
|
|||||||||||||||||||||||||||