Ich glaube, dass Freunde, die Google Analytics verwendet haben, seine leistungsstarken Funktionen verstehen.
Aus beruflichen Gründen habe ich kürzlich eine Kopie des urchin.js-Codes heruntergeladen und ihn studiert. Da es nur wenige Kommentare gibt und der Name schwer zu verstehen ist, habe ich einige Erfolge erzielt Kommentare, die mit allen geteilt werden sollen, werden hier gelöscht.
====================================
|--------Autor von BlackSoul---------|
|----------------27.04.2006--------------|
|[email protected] ------|
|----------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
=====================================
*/
//Globale Variablen definieren
var ur = ""; //Quelladresse
var urp = new Array(); //Quellparametername
var urpv = new Array(); //Quellparameterwert
var arrayCount = 0; //Anzahl der Parameter
pageOpen = new Date(); //Zeit zum Aufrufen der Seite
var reqURL = " http://192.168.0.219/Analytics/ " //Seitenadresse zum Empfangen von Daten
var GUID = Math.round(Math.random()*2147483647); //Eindeutige Zufallszahl des Benutzers
var title = document.title; //Titel der Webseite
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); //Legen Sie die Ablaufzeit des Cookies fest und begrenzen Sie die Anzahl der wiederkehrenden Benutzer
var rtu = "false"; //Gibt an, ob der Benutzer zum Besuch der
//Browser-Funktionsinformationen
zurückkehrt
var brower = new Array();
/**//*
* browser[0] Browsertyp
* browser[1] Browserversion
* brower[2] Gibt an, ob der Java-Browser aktiviert ist: 1 an – 1 aus
* Browser[3] Browser-Flash-Version
* Browser[4] Browser-Betriebssystem
* Browser[5] Browserauflösung
* browser[6] Browser-Farbtiefe
* browser[7] Browsersprache
* browser[8] Browser-Plug-in
*/
var sEn=new Array(); //Der Name der Suchmaschine
var keyWord=new Array(); //Form der Schlüsselwortübertragung
sEn[0]="google"; keyWord[0]="q";
sEn[1]="yahoo"; keyWord[1]="p";
sEn[2]="msn"; keyWord[2]="q";
sEn[3]="aol"; keyWord[3]="query";
sEn[4]="lycos"; keyWord[4]="query";
sEn[5]="ask"; keyWord[5]="q";
sEn[6]="altavista"; keyWord[6]="q";
sEn[7]="search"; keyWord[7]="q";
sEn[8]="netscape"; keyWord[8]="query";
sEn[9]="earthlink"; keyWord[9]="q";
sEn[10]="cnn"; keyWord[10]="query";
sEn[11]="looksmart"; keyWord[11]="key";
sEn[12]="about"; keyWord[12]="terms";
sEn[13]="excite"; keyWord[13]="qkw";
sEn[14]="mamma"; keyWord[14]="query";
sEn[15]="alltheweb"; 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";
//Testdaten------------//////////////////// / ////////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost"; keyWord[21]="q";
Hier werden einige globale Größen definiert, wobei upr und urpv Quellparameter und Referenzen sind. Die Quelle ist beispielsweise http://www.google.com/?p=BlackSoul&q=javascript , dann ist urp[0]="p". urp[ 1]="q" entspricht urpv[0]="BlackSoul",urpv[1]="javascript".
Bei der endgültigen Übertragung wird es jedoch in Form von Trennzeichen an den Server übergeben.
GUID ist eine Zufallszahl, weshalb Google zunächst nicht herausgefunden hat, warum eine Zufallszahl gespeichert werden musste, aber ich habe es später nach der Analyse der Daten herausgefunden, um die Einzigartigkeit des Benutzers zu überprüfen .
Das Folgende ist die Funktionsverarbeitung:
//--------------------------------URLs vergleichen, wenn es sich um eine Suchmaschine handelt, das Schlüsselwort speichern--- ----- -----
Funktion getKeyword(URL)
{
var Hostname;
if(url.indexOf(".") == -1)
{hostname = url;}
anders
{hostname = url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(var i = 0; i < sEn.length; i++)
{
if(hostname == sEn[i])
{
for(var j = 0; j < urp.length; j++)
{
if(urp[j] == keyWord[i])
{
return urpv[j];
}
}
}
}
zurückkehren "";
}
//Konvertieren Sie die URL in Adress- und Seitenparameter und den Parameterwertparameter uri in die Seitenadresse
Funktion gethn(uri)
{
if(!uri || uri == "") return "";
ur = uri;
varsub;
//mit Parametern
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);
brechen;
}
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);
arrayCount++;
}
Rückgabe-URL;
}
anders
gib ur zurück;
}
//----------------------------------Domainnamen erhalten---------- ------- --------------
Funktion getHostName(URL)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
Rückgabe-URL;
}
//------------------------------------------------Holen Sie sich die Flash-Version---------- ------- ------------
Funktion getFlash() {
var f="-1",n=Navigator;
if (n.plugins && n.plugins.length) {
for (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];
brechen;
}
}
} else if (window.ActiveXObject) {
für (var ii=10;ii>=2;ii--) {
versuchen {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
if (fl) { f=ii + '.0';
}
fangen(e) {}
}
}
if(f == "-1")
Rückkehr f;
anders
return f.substring(0,f.indexOf(".")+2);
}
//-----------Asynchrone Übertragung einstellen------------------ -------------------
Funktion createXMLHttpRequest()
{
if (window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
sonst wenn (window.ActiveXObject)
{
return new ActiveXObject("Microsoft.XMLHttp");
}
} Mit der oben genannten Methode können einige grundlegende Informationen abgerufen werden. Das Hauptproblem besteht jedoch darin, Benutzercookies zu setzen, erneute Besuche zu ermitteln, die Zeit des letzten Besuchs zu ermitteln und die GUID festzulegen. Nachdem ich hier lange gesucht habe, habe ich nicht herausgefunden, wie Google macht es ... Also dachte ich, ich hätte mir ein paar dumme Methoden ausgedacht:
//Informationen zur Browserfunktion
functionBrowserInfo()
{
brower[0] = navigator.appName;
brower[7] = navigator.sprache;
if(brower[0] == "Netscape")
{
var browerInfo = navigator.userAgent;
brower[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
brower[0] = brower[1].substring(0,brower[1].lastIndexOf("/"));
brower[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
brower[7] = navigator.sprache;
}
else if(brower[0] == "Microsoft Internet Explorer")
{
brower[1] = navigator.userAgent.split(";")[1];
brower[7] = navigator.userLanguage;
}
brower[2] = navigator.javaEnabled()?1:-1;
brower[3] = getFlash();
brower[4] = getOS();
if (self.screen) {
sr=screen.width+"x"+screen.height;
sc=screen.colorDepth+"-bit";
}
sonst wenn (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.width+"x"+s.height;
}
//Auflösung
brower[5] = sr;
//Farbtiefe
brower[6] = sc;
//Plug-in-Liste
brower[8] = getPlugin();
}
//---------Holen Sie sich die aktuelle Adresse------------------- - --------
Funktion getHref()
{
return document.location.href;
}
//----------------------Cookie-Vorgang startet--------------------- -------------------------------------------------- --------------------------------------------
Funktion setCookie(name, Wert)
//Cookie-Wert festlegen
{
var expdate = neues Datum();
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var läuft ab = 15768000;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
if(expires!=null)
{
//Ablaufzeit auf 24 Stunden einstellen
expdate.setTime(uexp);
document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; Expires="+ expdate.toGMTString()))
+ ((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain))
+ ((secure == true) ? "; secure=" : "");
}
}
Funktion delCookie(name)
//Cookie löschen
{
var exp = neues Datum();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (Name);
document.cookie = name + "=" + cval + "; Expires="+ exp.toGMTString();
}
//Den Wert von Cookie abrufen
Funktion getCookie(fname)
{
Var-Name, Wert;
var Cookies = new Object();
var Anfang, Mitte, Ende;
Anfang = 0;
while(beginning < document.cookie.length)
{
middle = document.cookie.indexOf("=",beginning);
end = document.cookie.indexOf(";",beginning);
if(end == -1)
{
end = document.cookie.length;
}
if((Mitte > Ende) || (Mitte == -1))
{
name = document.cookie.substring(beginning,end);
value = "";
}
anders
{
name = document.cookie.substring(beginning,middle);
value = document.cookie.substring(middle+1,end);
}
if(name == fname)
{
return unescape(value);
}
Anfang = Ende + 2;
}
}
//-----Ermitteln Sie, ob das Cookie der GUID existiert---------------------------------- - ---------------
Funktion getCookieValue()
{
var guid = getCookie("GUID");
if(guid != null)
{
Rückführung;
}
anders
{
return „noCookie“;
}
}
//-------Cookie für registrierte Benutzer abrufen--------------------- ---------
Funktion getRegUserCookie()
{
zurückkehren ;
}
//--------------Cookie-Vorgang abgeschlossen---------------- -------------------------------------------------- ------------------------------------------
//------ ---------------------Holen Sie sich das Betriebssystem------------------------ - -
Funktion getOS()
{
var OSlist = new Array();
var OSName = new Array();
OSlist[0] = "Windows4.0"; OSName[0] = "Windows 95";
OSlist[1] = "Windows 98"; OSName[1] = "Windows 98";
OSlist[2] = „Windows NT 5.0“; OSName[2] = „Windows 2000“;
OSlist[3] = „Windows NT 5.1“; OSName[3] = „Windows XP“;
OSlist[4] = „Windows NT 5.2“; OSName[4] = „Windows Server 2003“;
var ua = navigator.userAgent.split(";");
for(var i = 0; i < OSlist.length; i++)
{
if(ua[2] == OSlist[i])
return OSName[i];
}
return ua[2];
}
//Hol dir das Plug-in
Funktion getPlugin()
{
var-Plugin = "";
var ua = navigator.userAgent.split(";");
if(ua.length < 4)
zurückkehren "";
for(var i = 4; i < ua.length; i++)
{
Plugin += ua[i] + ",";
}
returnplugin.substring(0,plugin.length-2);
}
Eine Sache, die erklärt werden muss, ist die GetResidentTime-Funktion, die Google zum Laden der Seite zum Empfangen und Verarbeiten von Informationen verwendet. Sie müssen die Serverseite so konfigurieren, dass sie Dateien mit dem Suffix .gif oder anderen Formaten kompiliert und ausführt Wählen Sie die Verwendung von aspx. Da ich ursprünglich über die Verwendung eines asynchronen xmlHttp-Aufrufs nachgedacht habe, wird dieser beim Beenden der Seite nicht ausgeführt. Der Code lautet also wie folgt:
{
pageClose = neues Datum();
Minuten = (pageClose.getMinutes() - pageOpen.getMinutes());
if(Minuten < 0)
{
Minuten = Minuten + 60;
}
seconds = (pageClose.getSeconds() - pageOpen.getSeconds());
if(seconds < 0){ seconds += 60;}
Zeit = (Sekunden + (Minuten * 60));
//-------Hier ändern, um die asynchrone XML-Übertragung der Linkadresse zu empfangen-------------- ---- -------------------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
// xmlHttp.send(null);
//----------------Übertragung in Bildform------------- ---- ---------------------------------------------- -
if(isReturn() == false)
{
var i = new Image(1,1);
i.src = reqURL + "firstVisit.aspx?" + StrPara() + "&GUID=" + GUID;
i.onload = function() {LoadVoid();}
//Informationen, die auf die Seite gelangen
if(getCookieValue("GUID") == "noCookie"){return ;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + time;
i.onload=function() {LoadVoid();}
}
anders
{
var i=new Image(1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + time;
i.onload=function() {LoadVoid();}
}
} Schließlich wurde es aufgerufen. window.onunload = GetResidentTime
Sie können die übergebenen Parameter ausdrucken und einen Blick darauf werfen. Sie sollten in der Lage sein, ihre Bedeutung zu verstehen.
Der Rest ist die serverseitige Verarbeitung. Die serverseitige Verarbeitung ist eigentlich ganz einfach. Den Wert der Anfrage ermitteln, überprüfen und in der Datenbank speichern nach seinen eigenen Anforderungen.. Fügen Sie einen Satz hinzu, die IP-Adresse wird vom Server abgerufen und gespeichert.
Denken Sie bei der Verwendung daran, es auf der Serverseite zu platzieren und dann <javascript language="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script> zu verwenden. Hängen Sie den vollständigen Code an http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html