Creo que los amigos que han utilizado Google Analytics comprenden sus potentes funciones.
Debido a necesidades laborales, recientemente descargué una copia del código urchin.js y lo estudié. Debido a que hay pocos comentarios y el nombre es difícil de entender, lo estudié durante un mes y reescribí el código. comentarios para compartir con todos. El código de identificación de usuario de Google se elimina aquí /**//*.
=======================================
|--------Autor por BlackSoul---------|
|----------------2006.04.27--------------|
|[email protected] ------|
|----------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
========================================
*/
//Definir variables globales
var ur = ""; //Dirección de origen
var urp = new Array(); //Nombre del parámetro fuente
var urpv = new Array(); //Valor del parámetro fuente
var arrayCount = 0; //Número de parámetros
pageOpen = new Date(); //Hora de ingresar a la página
var reqURL = " http://192.168.0.219/Analytics/ "; //Dirección de la página para recibir datos
var GUID = Math.round(Math.random()*2147483647 //Número aleatorio único del usuario);
var título = documento.título; //título de la página web
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30 // Establece el tiempo de vencimiento de las cookies y limita los usuarios que regresan);
var rtu = "false"; //Indica si el usuario vuelve a visitar al usuario
//Información de las funciones del navegador
var navegador = nueva matriz();
/**//*
* navegador[0] tipo de navegador
* navegador[1] versión del navegador
* navegador[2] Si el navegador java está activado 1 activado - 1 desactivado
* navegador[3] versión flash del navegador
* navegador[4] sistema operativo del navegador
* navegador[5] resolución del navegador
* navegador[6] profundidad de color del navegador
* navegador[7] idioma del navegador
* complemento del navegador browser[8]
*/
var sEn=new Array(); //El nombre del motor de búsqueda
var keyWord=new Array(); //Forma de transmisión de palabras clave
sEn[0]="google"; palabra clave[0]="q";
sEn[1]="yahoo"; palabra clave[1]="p";
sEn[2]="msn"; palabra clave[2]="q";
sEn[3]="aol"; palabra clave[3]="consulta";
sEn[4]="lycos"; palabra clave[4]="consulta";
sEn[5]="preguntar"; palabra clave[5]="q";
sEn[6]="altavista"; palabra clave[6]="q";
sEn[7]="buscar"; palabra clave[7]="q";
sEn[8]="netscape"; palabra clave[8]="consulta";
sEn[9]="enlace terrestre"; palabra clave[9]="q";
sEn[10]="cnn"; palabra clave[10]="consulta";
sEn[11]="looksmart"; palabra clave[11]="clave";
sEn[12]="acerca de"; palabra clave[12]="términos";
sEn[13]="excitar"; palabra clave[13]="qkw";
sEn[14]="mamá"; palabra clave[14]="consulta";
sEn[15]="toda la web"; palabra clave[15]="q";
sEn[16]="gigablast"; palabra clave[16]="q";
sEn[17]="voilá"; palabra clave[17]="kw";
sEn[18]="virgilio"; palabra clave[18]="qs";
sEn[19]="teoma"; palabra clave[19]="q";
sEn[20]="baidu"; palabra clave[20]="wd";
//datos de prueba--------------------------///////////////////// / ////////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost"; palabra clave[21]="q";
Algunas cantidades globales se definen aquí, donde upr y urpv son referencias y parámetros de origen. Por ejemplo, la fuente es http://www.google.com/?p=BlackSoul&q=javascript , luego urp[0]="p", urp[ 1]="q" corresponde a urpv[0]="BlackSoul",urpv[1]="javascript".
Pero en la transmisión final, se pasa al servidor en forma de delimitadores.
GUID es un número aleatorio, así es como lo hace Google. Al principio no descubrí por qué necesitaba guardar un número aleatorio, pero luego lo descubrí después de analizar los datos para verificar la unicidad del usuario. .
El siguiente es el procesamiento de funciones:
//--------------------------------Compara URL, si es un motor de búsqueda, guarda la palabra clave--- ----- -----
función obtenerPalabra clave(url)
{
var nombre de host;
si(url.indexOf(".") == -1)
{nombre de host = URL;}
demás
{nombre de host = url.substring(url.indexOf("."),url.lastIndexOf("."));}
para(var i = 0; i < sEn.length; i++)
{
if(nombre de host == sEn[i])
{
for(var j = 0; j < urp.length; j++)
{
if(urp[j] == palabra clave[i])
{
devolver urpv[j];
}
}
}
}
devolver "";
}
//Convierte la URL en dirección y parámetros de página y el valor del parámetro uri del parámetro en dirección de página
función gethn(uri)
{
if(!uri || uri == "") return "";
ur = uri;
varsub;
//con parámetros
si(ur.indexOf("?") != -1)
{
var url = ur.substring(0,ur.indexOf("?"));
var para = ur.substring(ur.indexOf("?")+1,ur.length);
mientras (para.longitud > 0)
{
si(para.indexOf("&") == -1)
{
urp[arrayCount] = para.substring(0,para.indexOf("="));
urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length);
romper;
}
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++;
}
URL de retorno;
}
demás
devolverte;
}
//----------------------------------Obtener nombre de dominio---------- ------- ----------------------------
función getHostName(url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
URL de retorno;
}
//---------------------------------Obtener la versión flash---------- ------- --------------------------
función obtenerFlash() {
var f="-1",n=navegador;
if (n.complementos && n.complementos.longitud) {
para (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];
romper;
}
}
} más si (ventana.ActiveXObject) {
para (var ii=10;ii>=2;ii--) {
intentar {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
si (fl) { f=ii + '.0';
}
captura(e) {}
}
}
si(f == "-1")
devolver f;
demás
return f.substring(0,f.indexOf(".")+2);
}
//--------------------------Establecer transmisión asíncrona------------------ ------------------
función crearXMLHttpRequest()
{
si (ventana.XMLHttpRequest)
{
devolver nuevo XMLHttpRequest();
}
de lo contrario si (ventana.ActiveXObject)
{
devolver nuevo ActiveXObject("Microsoft.XMLHttp");
}
} El método anterior puede obtener información básica, pero la cuestión clave es configurar las cookies del usuario, determinar las visitas repetidas, determinar la hora de la última visita y configurar su GUID. Después de mirar aquí durante mucho tiempo, no descubrí cómo. Google lo hace... Así que pensé que se me ocurrieron algunos métodos estúpidos. Mira el código:
//Información de características del navegador
funciónNavegadorInfo()
{
navegador[0] = navegador.appName;
navegador[7] = navegador.idioma;
if(navegador[0] == "Netscape")
{
var browerInfo = navigator.userAgent;
navegador[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
navegador[0] = navegador[1].substring(0,navegador[1].lastIndexOf("/"));
navegador[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
navegador[7] = navegador.idioma;
}
else if(navegador[0] == "Microsoft Internet Explorer")
{
navegador[1] = navigator.userAgent.split(";")[1];
navegador[7] = navegador.userLanguage;
}
navegador[2] = navigator.javaEnabled()?1:-1;
navegador[3] = getFlash();
navegador[4] = getOS();
si (auto.pantalla) {
sr=pantalla.ancho+"x"+pantalla.altura;
sc=pantalla.colorDepth+"-bit";
}
de lo contrario si (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.ancho+"x"+s.alto;
}
//Resolución
navegador[5] = sr;
//Profundidad de color
navegador[6] = sc;
//Lista de complementos
navegador[8] = getPlugin();
}
//-----------------------Obtener la dirección actual-------------------- - --------
función obtenerHref()
{
devolver documento.ubicación.href;
}
//-----------------------se inicia la operación de cookies--------------------- -------------------------------------------------- ---------------------------------------
función setCookie(nombre, valor)
//Establecer valor de cookie
{
var expdate = nueva fecha();
var argv = setCookie.argumentos;
var argc = setCookie.argumentos.length;
var caduca = 15768000;
var ruta = (argc > 3)? argv[3] : nulo;
var dominio = (argc > 4)? argv[4] : nulo;
var seguro = (argc > 5) ? argv[5] : falso
si(expira!=nulo)
{
//Establecer tiempo de vencimiento 24 horas
expdate.setTime(uexp);
document.cookie = nombre + "=" + escape (valor) +((expires == null)? "" : ("; expires="+ expdate.toGMTString()))
+ ((ruta == nulo) ? "" : ("; ruta=" + ruta)) +((dominio == nulo) ? "" : ("; dominio=" + dominio))
+ ((seguro == verdadero)? "; seguro=": "");
}
}
función delCookie(nombre)
//Eliminar cookie
{
var exp = nueva fecha();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (nombre);
documento.cookie = nombre + "=" + cval + "; expira="+ exp.toGMTString();
}
//Obtener el valor de Cookie
función obtenerCookie(fnombre)
{
var nombre, valor;
var cookies = nuevo Objeto();
var principio,medio,fin;
principio = 0;
mientras (comienzo <documento.cookie.longitud)
{
medio = document.cookie.indexOf("=",comienzo);
fin = document.cookie.indexOf(";",comienzo
si(fin == -1)
{
fin = documento.cookie.longitud;
}
if((medio > fin) || (medio == -1))
{
nombre = documento.cookie.substring(principio,fin);
valor = "";
}
demás
{
nombre = documento.cookie.substring(principio,medio);
valor = documento.cookie.substring(medio+1,fin);
}
si(nombre == fnombre)
{
devolver unescape(valor);
}
principio = fin + 2;
}
}
//-----Obtenemos si la cookie del GUID existe---------------------------------- - ---------------
función obtenerValorCookie()
{
var guid = getCookie("GUID");
si (guid! = nulo)
{
guía de retorno;
}
demás
{
devolver "noCookie";
}
}
//---------------------Obtener cookie de usuario registrado---------------------- -----------------------
función getRegUserCookie()
{
devolver ;
}
//-----------------------Operación de cookies completada---------------- -------------------------------------------------- ------------------------------------------
//------ ---------------------Obtener el sistema operativo--------------------------------- - -
función obtenerOS()
{
var OSlist = nueva matriz();
var OSName = nueva matriz();
ListaOS[0] = "Windows4.0"; NombreOS[0] = "Windows 95";
ListaOS[1] = "Windows 98"; NombreOS[1] = "Windows 98";
ListaOS[2] = "Windows NT 5.0"; NombreOS[2] = "Windows 2000";
ListaOS[3] = "Windows NT 5.1"; NombreOS[3] = "Windows XP";
ListaOS[4] = "Windows NT 5.2"; NombreOS[4] = "Windows Server 2003";
var ua = navigator.userAgent.split(";");
para(var i = 0; i < OSlist.length; i++)
{
if(ua[2] == ListaOS[i])
devolver nombreOS[i];
}
devolver ua[2];
}
//Obtener el complemento
función obtenerPlugin()
{
complemento var = "";
var ua = navigator.userAgent.split(";");
si(ua.longitud < 4)
devolver "";
para(var i = 4; i < ua.length; i++)
{
complemento += ua[i] + ",";
}
return complemento.substring(0,plugin.length-2);
}
Una cosa que debe explicarse es la función GetResidentTime. Google utiliza el método img.load para cargar la página de recepción y procesamiento de información. Debe configurar el lado del servidor para compilar y ejecutar archivos con el sufijo .gif u otros formularios. elija usar aspx. Porque originalmente consideré usar la llamada asincrónica xmlHttp, pero a veces no se ejecuta cuando la página sale, por lo que se abandona.
{
páginaCerrar = nueva Fecha();
minutos = (pageClose.getMinutes() - pageOpen.getMinutes());
si(minutos < 0)
{
minutos = minutos + 60;
}
segundos = (pageClose.getSeconds() - pageOpen.getSeconds());
si(segundos < 0){ segundos += 60;}
tiempo = (segundos + (minutos * 60));
//---------------------Modifique aquí para recibir la transmisión asincrónica XML de la dirección del enlace-------------- ---- -------------------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + primera visita.aspx?" + StrPara(), falso);
// xmlHttp.send(nulo);
//-------------------------------Transmisión en forma de imagen------------- ---- ---------------------------------------------- -
si(isReturn() == falso)
{
var i = nueva Imagen(1,1);
i.src = reqURL + "primeraVisita.aspx?" + StrPara() + "&GUID=" + GUID;
i.onload = function() {LoadVoid();}
//Información ingresando a la página
if(getCookieValue("GUID") == "noCookie"){return;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + hora;
i.onload=función() {CargarVoid();}
}
demás
{
var i=nueva Imagen(1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + hora;
i.onload=función() {CargarVoid();}
}
} Finalmente fue llamado. Usé window.onunload = GetResidentTime.
Puede imprimir los parámetros pasados y echar un vistazo. Debería poder comprender su significado.
El resto es el procesamiento del lado del servidor. El procesamiento del lado del servidor es en realidad bastante simple. Obtenga el valor de la solicitud, verifíquelo y guárdelo en la base de datos. Ahora que tenemos los datos, el usuario puede manejar el análisis. de acuerdo con sus propios requisitos. Agregue una oración, el servidor obtiene y guarda la dirección IP.
Al usarlo, recuerde ponerlo en el lado del servidor y luego use <javascript language="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script> Adjunte el código completo http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html