Acredito que amigos que usaram o Google Analytics entendem suas funções poderosas.
Devido às necessidades de trabalho, baixei recentemente uma cópia do código urchin.js e estudei. Como há poucos comentários e a nomenclatura é difícil de entender, estudei por um mês e consegui reescrever o código. comentários para compartilhar com todos o código de identificação do usuário do Google é excluído aqui.
=====================================
|--------Autor por BlackSoul---------|
|----------------2006.04.27--------------|
|[email protected] ------|
|----------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
=====================================
*/
//Definir variáveis globais
var ur = ""; //Endereço de origem
var urp = new Array(); //Nome do parâmetro fonte
var urpv = new Array(); //Valor do parâmetro fonte
var arrayCount = 0; //Número de parâmetros
pageOpen = new Date(); //Hora de entrar na página
var reqURL = " http://192.168.0.219/Analytics/ " //Endereço da página para receber dados
var GUID = Math.round(Math.random()*2147483647); //Número aleatório exclusivo do usuário
var title = document.title; //título da página da web
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); //Definir o tempo de expiração do cookie e limitar os usuários de retorno;
var rtu = "false" //Indica se o usuário retorna para visitar o usuário
//Informações sobre recursos do navegador
var navegador = new Array();
/**//*
* navegador[0] tipo de navegador
* navegador[1] versão do navegador
* navegador[2] Se o navegador java está ativado 1 ligado - 1 desligado
* navegador[3] versão flash do navegador
* navegador[4] sistema operacional do navegador
* navegador[5] resolução do navegador
* navegador[6] profundidade de cor do navegador
* navegador[7] idioma do navegador
* plug-in do navegador [8]
*/
var sEn=new Array(); //O nome do mecanismo de pesquisa
var keyWord=new Array(); //Formulário de transmissão de palavras-chave
sEn[0]="google"; keyWord[0]="q";
sen[1]="yahoo"; keyWord[1]="p";
sen[2]="msn"; keyWord[2]="q";
sEn[3]="aol"; keyWord[3]="consulta";
sEn[4]="lycos"; keyWord[4]="consulta";
sEn[5]="perguntar"; keyWord[5]="q";
sEn[6]="altavista"; keyWord[6]="q";
sEn[7]="pesquisar"; palavra-chave[7]="q";
sEn[8]="netscape"; keyWord[8]="consulta";
sEn[9]="ligação terrestre"; keyWord[9]="q";
sEn[10]="cnn"; keyWord[10]="consulta";
sEn[11]="looksmart"; keyWord[11]="chave";
sEn[12]="sobre"; keyWord[12]="termos";
sEn[13]="excitar"; keyWord[13]="qkw";
sEn[14]="mamãe"; keyWord[14]="consulta";
sEn[15]="todaweb"; keyWord[15]="q";
sEn[16]="gigablast"; keyWord[16]="q";
sen[17]="voila"; keyWord[17]="kw";
sEn[18]="virgílio"; keyWord[18]="qs";
sEn[19]="teoma"; keyWord[19]="q";
sen[20]="baidu"; keyWord[20]="wd";
//dados de teste--------------------------/////////////////// / ///////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost"; keyWord[21]="q";
Algumas quantidades globais são definidas aqui, onde upr e urpv são parâmetros e referências de origem. Por exemplo, a origem é http://www.google.com/?p=BlackSoul&q=javascript e urp[0]="p", urp[ 1]="q" corresponde a urpv[0]="BlackSoul",urpv[1]="javascript".
Mas na transmissão final, ele é passado ao servidor na forma de delimitadores.
GUID é um número aleatório, e é assim que o Google faz. Não descobri por que precisava salvar um número aleatório no início, mas descobri depois de analisar os dados para verificar a exclusividade do usuário. .
A seguir está o processamento da função:
//--------------------------------Compare urls, se for um mecanismo de busca, salve a palavra-chave--- ----- -----
função getKeyword(url)
{
var nome do host;
if(url.indexOf(".") == -1)
{nome do host = url;}
outro
{hostname = url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(var i = 0; i < sEn.length; i++)
{
if(nome do host == sEn[i])
{
for(var j = 0; j < urp.length; j++)
{
if(urp[j] == palavra-chave[i])
{
retornar urpv[j];
}
}
}
}
retornar "";
}
//Converte URL em endereço e parâmetros de página e valor de parâmetro parâmetro uri em endereço de página
função gethn(uri)
{
if(!uri || uri == "") return "";
você = uri;
varsub;
//com parâmetros
if(ur.indexOf("?") != -1)
{
var url = ur.substring(0,ur.indexOf("?"));
var para = ur.substring(ur.indexOf("?")+1,ur.length);
enquanto(para.comprimento > 0)
{
if(para.indexOf("&") == -1)
{
urp[arrayCount] = para.substring(0,para.indexOf("="));
urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length);
quebrar;
}
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);
arrayCont++;
}
url de retorno;
}
outro
retorne você;
}
//----------------------------------Obter nome de domínio---------- ------- ----------------------------
função getHostName(url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
url de retorno;
}
//---------------------------------Obter a versão flash---------- ------- --------------------------
função getFlash() {
var f="-1",n=navegador;
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];
quebrar;
}
}
} senão if (window.ActiveXObject) {
for (var ii=10;ii>=2;ii--) {
tentar {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
se (fl) {f=ii + '.0';
}
pegar(e) {}
}
}
se(f == "-1")
retornar f;
outro
retornar f.substring(0,f.indexOf(".")+2);
}
//--------------------------Definir transmissão assíncrona------------------ ------------------
função createXMLHttpRequest()
{
se (janela.XMLHttpRequest)
{
retornar novo XMLHttpRequest();
}
senão se (janela.ActiveXObject)
{
retornar novo ActiveXObject("Microsoft.XMLHttp");
}
} O método acima pode obter algumas informações básicas, mas a questão principal é definir cookies do usuário, determinar visitas de retorno, determinar o horário da última visita e definir seu GUID. Depois de muito tempo procurando aqui, não descobri como. O Google faz isso... Então pensei em criar alguns métodos estúpidos. Veja o código:
//Informações sobre recursos do navegador
funçãoBrowserInfo()
{
navegador[0] = navegador.appName;
navegador[7] = navegador.idioma;
if(navegador[0] == "Netscape")
{
var browerInfo = navegador.userAgent;
navegador[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
navegador[0] = navegador[1].substring(0,brower[1].lastIndexOf("/"));
navegador[1] = navegadorInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
navegador[7] = navegador.idioma;
}
senão if(navegador[0] == "Microsoft Internet Explorer")
{
navegador[1] = navegador.userAgent.split(";")[1];
navegador[7] = navegador.userLanguage;
}
navegador[2] = navegador.javaEnabled()?1:-1;
navegador[3] = getFlash();
navegador[4] = getOS();
if (self.screen) {
sr=tela.largura+"x"+tela.altura;
sc=screen.colorDepth+"-bit";
}
senão se (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.largura+"x"+s.altura;
}
//Resolução
navegador[5] = sr;
//Profundidade de cor
navegador[6] = sc;
//Lista de plug-ins
navegador[8] = getPlugin();
}
//-----------------------Obtém o endereço atual-------------------- - --------
função getHref()
{
retornar documento.localização.href;
}
//-----------------------a operação de cookie é iniciada--------------------- -------------------------------------------------- --------------------------------------------------------
função setCookie(nome, valor)
//Definir valor do cookie
{
varexpdate = new Data();
var argv = setCookie.argumentos;
var argc = setCookie.argumentos.length;
var expira = 15768000;
var caminho = (argc > 3) ? argv[3] : null;
var domínio = (argc > 4) ? argv[4] : null;
var seguro = (argc > 5) ? argv[5] : falso
;
{
//Define o tempo de expiração em 24 horas
expdate.setTime(uexp);
document.cookie = nome + "=" + escape (valor) +((expira == nulo) ? "" : ("; expira="+ expdate.toGMTString()))
+ ((caminho == nulo) ? "" : ("; caminho=" + caminho)) +((domínio == nulo) ? "" : ("; domínio=" + domínio))
+ ((seguro == verdadeiro) ? "; seguro=" : "");
}
}
função delCookie(nome)
//Excluir cookie
{
var exp = nova Data();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (nome);
document.cookie = nome + "=" + cval + "; expira="+ exp.toGMTString();
}
//Obtém o valor do cookie
função getCookie(fnome)
{
var nome, valor;
var cookies = new Object();
var início,meio,fim
;
while(início <document.cookie.length)
{
meio = document.cookie.indexOf("=",início);
fim = document.cookie.indexOf(";",início
if(fim == -1)
{
fim = documento.cookie.comprimento;
}
if((meio > fim) || (meio == -1))
{
nome = document.cookie.substring(início,fim);
valor = "";
}
outro
{
nome = document.cookie.substring(início,meio);
valor = document.cookie.substring(meio+1,fim);
}
if(nome == nomef)
{
retornar unscape(valor);
}
começo = fim + 2;
}
}
//-----Obter se o cookie do GUID existe--------------------------------- - ---------------
função getCookieValue()
{
var guid = getCookie("GUID");
if (guid! = nulo)
{
guia de retorno;
}
outro
{
retorne "noCookie";
}
}
//---------------------Obter cookie de usuário registrado---------------------- -----------------------
função getRegUserCookie()
{
retornar ;
}
//-------------------------------------------Operação de cookie concluída---------------- -------------------------------------------------- ------------------------------------------
//------ --------------------- Obtenha o sistema operacional ----------------------------- - -
função getOS()
{
var listaOS = new Array();
var OSName = new Array();
OSlist[0] = "Windows4.0";
OSlist[1] = "Windows 98";
OSlist[2] = "Windows NT 5.0";
OSlist[3] = "Windows NT 5.1";
OSlist[4] = "Windows NT 5.2";
var ua = navigator.userAgent.split(";");
for(var i = 0; i < OSlist.length; i++)
{
if(ua[2] == lista de SO[i])
return OSName[i];
}
retorne você[2];
}
//Obter o plug-in
função getPlugin()
{
var plugin = "";
var ua = navigator.userAgent.split(";");
if(ua.comprimento <4)
retornar "";
for(var i = 4; i < ua.length; i++)
{
plugin += ua[i] + ",";
}
retornar plugin.substring(0,plugin.length-2);
}
Uma coisa que precisa ser explicada é que a função GetResidentTime do Google usa o método img.load para carregar a página de recebimento e processamento de informações. Você precisa configurar o lado do servidor para compilar e executar arquivos com o sufixo .gif ou outros formulários. escolha usar aspx. Porque originalmente considerei usar a chamada assíncrona xmlHttp, mas às vezes ela não é executada quando a página é encerrada.
{
fechamento da página = new Data();
minutos = (pageClose.getMinutes() - pageOpen.getMinutes());
se(minutos < 0)
{
minutos = minutos + 60;
}
segundos = (pageClose.getSeconds() - pageOpen.getSeconds());
if(segundos < 0){ segundos += 60;}
tempo = (segundos + (minutos * 60));
//---------------------Modifique aqui para receber a transmissão assíncrona XML do endereço do link-------------- ---- -------------------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
//xmlHttp.send(nulo);
//------------------------------------------Transmissão em formato de imagem------------ ---- ---------------------------------------------- -
if(isReturn() == falso)
{
var i = nova imagem (1,1);
i.src = reqURL + "firstVisit.aspx?"
i.onload = function() {LoadVoid();}
//Informações que entram na página
if(getCookieValue("GUID") == "noCookie"){return ;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + hora;
i.onload=function() {LoadVoid();}
}
outro
{
var i=nova imagem(1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + hora;
i.onload=function() {LoadVoid();}
}
} Finalmente foi chamado.
Você pode imprimir os parâmetros passados e dar uma olhada. Você poderá entender seu significado.
O resto é o processamento do lado do servidor. O processamento do lado do servidor é bastante simples, obtenha o valor da solicitação, verifique-o e salve-o no banco de dados. de acordo com seus próprios requisitos. Adicione uma frase e o endereço IP é obtido e salvo pelo servidor.
Ao usá-lo, lembre-se de colocá-lo no lado do servidor e, em seguida, use <javascript language="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script> Anexe o código completo http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html