Je pense que les amis qui ont utilisé Google Analytics comprennent ses puissantes fonctions.
En raison de besoins professionnels, j'ai récemment téléchargé une copie du code urchin.js et je l'ai étudié. Parce qu'il y a peu de commentaires et que le nom est difficile à comprendre, j'ai étudié pendant un mois et j'ai obtenu un certain succès. commentaires à partager avec tout le monde. Le code d'identification de l'utilisateur de Google est supprimé ici /**//*.
=====================================
|--------Auteur par BlackSoul---------|
|----------------2006.04.27--------------|
|[email protected] ------|
|----------------QQ:9136194-------------|
|------http://blacksoul.cnblogs.cn---|
======================================
*/
//Définir des variables globales
var ur = ""; //Adresse source
var urp = new Array(); //Nom du paramètre source
var urpv = new Array(); //Valeur du paramètre source
var arrayCount = 0; //Nombre de paramètres
pageOpen = new Date(); //Heure pour accéder à la page
var reqURL = " http://192.168.0.219/Analytics/ " //Adresse de la page pour recevoir les données
var GUID = Math.round(Math.random()*2147483647); //Nombre aléatoire unique de l'utilisateur
var title = document.title; //Titre de la page Web
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); //Définir le délai d'expiration du cookie et limiter le retour des utilisateurs
var rtu = "false"; //Indique si l'utilisateur revient visiter l'utilisateur
//Informations sur les fonctionnalités du navigateur
var navigateur = new Array();
/**//*
* navigateur[0] type de navigateur
* version du navigateur navigateur[1]
*browser[2] Si le navigateur Java est activé 1 activé - 1 désactivé
* navigateur[3] version flash du navigateur
* navigateur[4] système d'exploitation du navigateur
* Résolution du navigateur[5]
* profondeur de couleur du navigateur[6]
* langue du navigateur[7] du navigateur
* plug-in de navigateur Browser[8]
*/
var sEn=new Array(); //Le nom du moteur de recherche
var keyWord=new Array(); //Formulaire de transmission de mot-clé
sEn[0]="google"; mot clé[0]="q";
sEn[1]="yahoo"; keyWord[1]="p";
sEn[2]="msn"; motclé[2]="q";
sEn[3]="aol"; keyWord[3]="requête";
sEn[4]="lycos"; keyWord[4]="requête";
sEn[5]="demander"; keyWord[5]="q";
sEn[6]="altavista"; keyWord[6]="q";
sEn[7]="recherche"; keyWord[7]="q";
sEn[8]="netscape"; keyWord[8]="requête";
sEn[9]="lien terrestre"; keyWord[9]="q";
sEn[10]="cnn"; keyWord[10]="requête";
sEn[11]="looksmart"; keyWord[11]="clé";
sEn[12]="à propos"; keyWord[12]="termes";
sEn[13]="exciter"; keyWord[13]="qkw";
sEn[14]="maman"; keyWord[14]="requête";
sEn[15]="toutleWeb"; keyWord[15]="q";
sEn[16]="gigablast"; keyWord[16]="q";
sEn[17]="voila"; keyWord[17]="kw";
sEn[18]="virgilio"; keyWord[18]="qs";
sEn[19]="teoma"; keyWord[19]="q";
sEn[20]="baidu"; keyWord[20]="wd";
//données de test-------------------------------//////////////////// / ////////////---------------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost"; keyWord[21]="q";
Certaines quantités globales sont définies ici, où upr et urpv sont des paramètres et des références source. Par exemple, la source est http://www.google.com/?p=BlackSoul&q=javascript , puis urp[0]="p", urp[ 1]="q" correspond à urpv[0]="BlackSoul",urpv[1]="javascript".
Mais lors de la transmission finale, il est transmis au serveur sous forme de délimiteurs.
Le GUID est un nombre aléatoire, c'est ainsi que Google procède. Au début, je n'ai pas compris pourquoi il fallait enregistrer un nombre aléatoire, mais je l'ai compris plus tard après avoir analysé les données afin de vérifier le caractère unique de l'utilisateur. .
Voici le traitement de la fonction :
//--------------------------------Comparez les urls, s'il s'agit d'un moteur de recherche, enregistrez le mot-clé--- ----- -----
fonction getKeyword (url)
{
var nom d'hôte ;
if(url.indexOf(".") == -1)
{nom d'hôte = url ;}
autre
{nom d'hôte = url.substring(url.indexOf("."),url.lastIndexOf("."));}
pour(var i = 0; i < sEn.length; i++)
{
si (nom d'hôte == sEn[i])
{
pour(var j = 0; j < urp.length; j++)
{
si (urp [j] == mot clé [i])
{
retourner urpv[j];
}
}
}
}
retour "";
}
//Convertir l'URL en paramètres d'adresse et de page et la valeur du paramètre uri en adresse de page
fonction gethn(uri)
{
if(!uri || uri == "") return "";
ur = uri;
varsub;
//avec paramètres
if(ur.indexOf("?") != -1)
{
var url = ur.substring(0,ur.indexOf("?"));
var para = ur.substring(ur.indexOf("?")+1,ur.length);
while(para.length > 0)
{
if(para.indexOf("&") == -1)
{
urp[arrayCount] = para.substring(0,para.indexOf("="));
urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length);
casser;
}
sub = para.substring(0,para.indexOf("&"));
urp[arrayCount] = sub.substring(0,sub.indexOf("="));
urpv[arrayCount] = sub.substring(sub.indexOf("=")+1,sub.length);
para = para.substring(para.indexOf("&")+1,para.length);
tableauCount++;
}
URL de retour ;
}
autre
retournez-vous;
}
//---------------------------------Obtenir un nom de domaine-------------- ------- ----------------------------
fonction getHostName (url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
URL de retour ;
}
//---------------------------------Obtenir la version flash---------- ------- --------------------------
fonction getFlash() {
var f="-1",n=navigateur;
if (n.plugins && n.plugins.length) {
pour (var ii=0;ii<n.plugins.length;ii++) {
if (n.plugins[ii].name.indexOf('Shockwave Flash')!=-1) {
f=n.plugins[ii].description.split('Shockwave Flash')[1];
casser;
}
}
} sinon si (window.ActiveXObject) {
pour (var ii=10;ii>=2;ii--) {
essayer {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
si (fl) { f=ii + '.0';
}
attraper(e) {}
}
}
si(f == "-1")
retourner f;
autre
return f.substring(0,f.indexOf(".")+2);
}
//-------------------------Définir la transmission asynchrone------------------- -------------------
fonction createXMLHttpRequest()
{
si (window.XMLHttpRequest)
{
renvoie un nouveau XMLHttpRequest();
}
sinon si (window.ActiveXObject)
{
return new ActiveXObject("Microsoft.XMLHttp");
}
} La méthode ci-dessus peut obtenir des informations de base. Mais le problème clé est de définir les cookies de l'utilisateur, de déterminer les visites récurrentes, de déterminer l'heure de la dernière visite et de définir son GUID. Après avoir longuement cherché ici, je n'ai pas trouvé comment. Google le fait... J'ai donc pensé avoir trouvé des méthodes stupides. Voir le code :
//Informations sur les fonctionnalités du navigateur
fonctionBrowserInfo()
{
navigateur[0] = navigateur.appName ;
navigateur[7] = navigateur.langue;
si(navigateur[0] == "Netscape")
{
varbrowserInfo = navigator.userAgent;
navigateur[1] = navigateurInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
navigateur[0] = navigateur[1].substring(0,brower[1].lastIndexOf("/"));
navigateur[1] = navigateurInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
navigateur[7] = navigateur.langue;
}
sinon if(brower[0] == "Microsoft Internet Explorer")
{
navigateur[1] = navigator.userAgent.split(";")[1];
navigateur[7] = navigateur.userLanguage;
}
navigateur[2] = navigator.javaEnabled()?1:-1;
navigateur[3] = getFlash();
navigateur[4] = getOS();
si (auto.écran) {
sr=écran.largeur+"x"+écran.hauteur ;
sc=screen.colorDepth+"-bit";
}
sinon si (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.largeur+"x"+s.hauteur ;
}
//Résolution
navigateur[5] = sr;
//Profondeur de couleur
navigateur[6] = sc;
//Liste des plug-ins
navigateur[8] = getPlugin();
}
//-----------------------Obtenir l'adresse actuelle-------------------- - ---------
fonction getHref()
{
renvoyer document.location.href ;
}
//-------------l'opération de cookie démarre--------------------- -------------------------------------------------- ---------------------------------------------
fonction setCookie(nom, valeur)
//Définir la valeur du cookie
{
var expdate = nouvelle Date();
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expire = 15768000 ;
var chemin = (argc > 3) ? argv[3] : nul;
var domaine = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false
;
{
//Définir le délai d'expiration sur 24 heures
expdate.setTime(uexp);
document.cookie = nom + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
+ ((chemin == null) ? "" : ("; chemin=" + chemin)) +((domaine == null) ? "" : ("; domaine=" + domaine))
+ ((secure == true) ? "; secure=" : "");
}
}
fonction delCookie(nom)
//Supprimer le cookie
{
var exp = nouvelle Date();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (nom);
document.cookie = nom + "=" + cval + "; expires="+ exp.toGMTString();
}
//Obtenir la valeur du Cookie
fonction getCookie(fname)
{
nom de la variable, valeur ;
var cookies = nouvel objet ();
var début,milieu,fin;
début = 0;
while(début < document.cookie.length)
{
middle = document.cookie.indexOf("=", début);
fin = document.cookie.indexOf(";",début);
if(fin == -1)
{
fin = document.cookie.length ;
}
if((milieu > fin) || (milieu == -1))
{
nom = document.cookie.substring(début, fin);
valeur = "" ;
}
autre
{
nom = document.cookie.substring(début,milieu);
valeur = document.cookie.substring(middle+1,end);
}
si(nom == fnom)
{
return unescape (valeur);
}
début = fin + 2 ;
}
}
//-----Obtenir si le cookie du GUID existe---------------------------------- - ---------------
fonction getCookieValue()
{
var guid = getCookie("GUID");
si(guid != null)
{
guide de retour ;
}
autre
{
renvoie "noCookie" ;
}
}
//-------------------------Obtenir le cookie de l'utilisateur enregistré---------------------- -----------------------
fonction getRegUserCookie()
{
retour ;
}
//----------------------------Opération cookie terminée---------------- -------------------------------------------------- ------------------------------------------
//------ ---------------------Obtenir le système d'exploitation------------------------- - -
fonction getOS()
{
var OSlist = new Array();
var NomOS = new Array();
Liste OS[0] = « Windows 4.0 » ; Nom OS[0] = « Windows 95 » ;
Liste OS[1] = « Windows 98 » ; Nom OS[1] = « Windows 98 » ;
Liste OS[2] = « Windows NT 5.0 » ; Nom OS[2] = « Windows 2000 » ;
Liste OS[3] = « Windows NT 5.1 » ; Nom OS[3] = « Windows XP » ;
Liste OS[4] = « Windows NT 5.2 » ; Nom OS[4] = « Windows Server 2003 » ;
var ua = navigator.userAgent.split(";");
pour (var i = 0; i < OSlist.length; i++)
{
si(ua[2] == OSlist[i])
renvoie le nom du système d'exploitation [i] ;
}
retourner ua[2] ;
}
//Récupérer le plug-in
fonction getPlugin()
{
varplugin = "";
var ua = navigator.userAgent.split(";");
si (ua.length < 4)
retour "";
pour(var i = 4; i < ua.length; i++)
{
plugin += ua[i] + ",";
}
return plugin.substring(0,plugin.length-2);
}
Une chose qui doit être expliquée est la fonction GetResidentTime. Google utilise la méthode img.load pour charger la page de réception et de traitement des informations. Vous devez configurer le côté serveur pour compiler et exécuter des fichiers avec le suffixe .gif ou d'autres formulaires. choisissez d'utiliser aspx. Parce que j'avais initialement envisagé d'utiliser l'appel asynchrone xmlHttp. Mais parfois, il n'est pas exécuté à la fermeture de la page. Le code est donc le suivant : fonction GetResidentTime().
{
pageFerme = nouvelle Date();
minutes = (pageClose.getMinutes() - pageOpen.getMinutes());
si (minutes < 0)
{
minutes = minutes + 60 ;
}
secondes = (pageClose.getSeconds() - pageOpen.getSeconds());
if(secondes < 0){ secondes += 60;}
temps = (secondes + (minutes * 60));
//-------------------------Modifiez ici pour recevoir l'adresse de lien transmission asynchrone XML-------------- ---- -------------------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
// xmlHttp.send(null);
//---------------------------------------------Transmission sous forme d'image------------- ---- ----------------------------------------------- -
si (isReturn() == faux)
{
var i = nouvelle Image (1,1);
i.src = reqURL + "firstVisit.aspx + StrPara() + "&GUID=" + GUID ;
i.onload = function() {LoadVoid();}
//Informations entrant dans la page
if(getCookieValue("GUID") == "noCookie"){return ;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + heure ;
i.onload=fonction() {LoadVoid();}
}
autre
{
var je = nouvelle image (1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + heure ;
i.onload=fonction() {LoadVoid();}
}
} Finalement, il a été appelé. j'ai utilisé window.onunload = GetResidentTime.
Vous pouvez imprimer les paramètres transmis et jeter un œil. Vous devriez pouvoir comprendre leur signification.
Le reste est le traitement côté serveur. Le traitement côté serveur est en fait assez simple. Obtenez la valeur de la requête, vérifiez-la et enregistrez-la dans la base de données. Maintenant que nous avons les données, l'analyse peut être gérée par l'utilisateur. selon ses propres exigences. Ajoutez une phrase, l'adresse IP est obtenue et enregistrée par le serveur.
Lors de son utilisation, pensez à le mettre côté serveur, puis utilisez <javascript language="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script> Joindre le code complet http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html