Saya yakin teman-teman yang telah menggunakan Google Analytics memahami fungsi-fungsi canggihnya.
Karena kebutuhan pekerjaan, saya baru-baru ini mengunduh salinan kode urchin.js dan mempelajarinya. Karena hanya ada sedikit komentar dan penamaannya sulit dipahami. Saya mempelajarinya selama sebulan dan mencapai beberapa keberhasilan. Saya menulis ulang kode tersebut komentar untuk dibagikan kepada semua orang, kode identifikasi pengguna Google dihapus di sini /**//*.
=======
|--------Penulis Oleh BlackSoul---------|
|----------------2006.04.27--------------|
|[email protected] ------|
|----------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
========
*/
//Definisikan variabel global
var ur = ""; //Alamat sumber
var urp = new Array(); //Nama parameter sumber
var urpv = new Array(); //Nilai parameter sumber
var arrayCount = 0; //Jumlah parameter
pageOpen = new Date(); //Waktunya masuk ke halaman
var reqURL = " http://192.168.0.219/Analytics/ "; //Alamat halaman untuk menerima data
var GUID = Math.round(Math.random()*2147483647); //Nomor acak unik pengguna
var title = dokumen.title; //Judul halaman web
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); //Tetapkan waktu kedaluwarsa cookie dan batasi pengguna yang kembali
var rtu = "false"; //Menunjukkan apakah pengguna kembali mengunjungi pengguna
//Informasi fitur browser
var browser = Array baru();
/**//*
* peramban[0] jenis peramban
* peramban[1] versi peramban
* brower[2] Apakah browser java dihidupkan 1 hidup - 1 mati
* browser[3] versi flash browser
* peramban[4] sistem operasi peramban
* browser[5] resolusi browser
* browser[6] kedalaman warna browser
* peramban[7] bahasa peramban
* peramban[8] pengaya peramban
*/
var sEn=Array baru(); //Nama mesin pencari
var keyWord=new Array(); //Bentuk transmisi kata kunci
sEn[0]="google"; kata kunci[0]="q";
sEn[1]="yahoo"; kata kunci[1]="p";
sEn[2]="msn"; kata kunci[2]="q";
sEn[3]="aol"; kata kunci[3]="kueri";
sEn[4]="lycos"; kata kunci[4]="kueri";
sEn[5]="bertanya"; kata kunci[5]="q";
sEn[6]="altavista"; kata kunci[6]="q";
sEn[7]="pencarian"; kata kunci[7]="q";
sEn[8]="netscape"; kata kunci[8]="kueri";
sEn[9]="tautan bumi"; kata kunci[9]="q";
sEn[10]="cnn"; kata kunci[10]="kueri";
sEn[11]="terlihat pintar"; kata kunci[11]="kunci";
sEn[12]="tentang"; kata kunci[12]="istilah";
sEn[13]="menggembirakan"; kata kunci[13]="qkw";
sEn[14]="mama"; kata kunci[14]="kueri";
sEn[15]="semua web"; kata kunci[15]="q";
sEn[16]="gigablast"; kata kunci[16]="q";
sEn[17]="voila"; kata kunci[17]="kw";
sEn[18]="virgilio"; kata kunci[18]="qs";
sEn[19]="teoma"; kata kunci[19]="q";
sEn[20]="baidu"; kata kunci[20]="wd";
//data uji-----------///////////////////// / ////////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="host lokal"; kata kunci[21]="q";
Beberapa besaran global didefinisikan di sini, dengan upr dan urpv merupakan parameter dan referensi sumber. Misalnya, sumbernya adalah http://www.google.com/?p=BlackSoul&q=javascript , lalu urp[0]="p", urp[ 1]="q" sama dengan urpv[0]="BlackSoul",urpv[1]="javascript".
Namun pada transmisi akhir diteruskan ke server dalam bentuk pembatas.
GUID adalah nomor acak, begitulah cara Google melakukannya. Awalnya saya tidak tahu mengapa perlu menyimpan nomor acak, tetapi kemudian saya mengetahuinya setelah menganalisis data .
Berikut ini adalah fungsi pengolahannya:
//--------------------------------Bandingkan url, jika itu mesin pencari, simpan kata kuncinya--- ----- -----
fungsi getKeyword(url)
{
nama host var;
if(url.indexOf(".") == -1)
{nama host = url;}
kalau tidak
{nama host = url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(var i = 0; i < sEn.panjang; i++)
{
if(nama host == sEn[i])
{
for(var j = 0; j < urp.panjang; j++)
{
if(urp[j] == kata kunci[i])
{
kembalikan urpv[j];
}
}
}
}
kembali "";
}
//Konversi URL ke alamat dan parameter halaman serta nilai parameter parameter uri ke alamat halaman
fungsi gethn(uri)
{
if(!uri || uri == "") mengembalikan "";
kamu = kamu;
varsub;
//dengan parameter
if(ur.indexOf("?") != -1)
{
var url = ur.substring(0,ur.indexOf("?"));
var para = ur.substring(ur.indexOf("?")+1,ur.length);
while(para.panjang > 0)
{
if(para.indexOf("&") == -1)
{
urp[arrayCount] = para.substring(0,para.indexOf("="));
urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length);
merusak;
}
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);
jumlah array++;
}
kembalikan url;
}
kalau tidak
kembalikan kamu;
}
//-----------------------------------Mendapatkan nama domain---------- ------- -------------
fungsi getHostName(url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
kembalikan url;
}
//---------------------------------Dapatkan versi flash---------- ------- -----------
fungsi getFlash() {
var f="-1",n=navigator;
if (n.plugins && n.plugins.panjang) {
untuk (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];
merusak;
}
}
} else if (jendela.ActiveXObject) {
untuk (var ii=10;ii>=2;ii--) {
mencoba {
var fl=eval("ActiveXObject baru('ShockwaveFlash.ShockwaveFlash."+ii+"');");
jika (fl) { f=ii + '.0';
}
tangkapan(e) {}
}
}
jika(f == "-1")
kembali f;
kalau tidak
return f.substring(0,f.indexOf(".")+2);
}
//-----------Atur transmisi asinkron------------------ ------------------------------
fungsi buatXMLHttpRequest()
{
jika (jendela.XMLHttpRequest)
{
kembalikan XMLHttpRequest();
}
lain jika (jendela.ActiveXObject)
{
kembalikan ActiveXObject baru ("Microsoft.XMLHttp");
}
} Cara di atas dapat memperoleh beberapa informasi dasar. Namun masalah utamanya adalah menyetel cookie pengguna, menentukan kunjungan kembali, menentukan waktu kunjungan terakhir, dan menyetel GUID-nya. Setelah lama mencari di sini, saya tidak menemukan caranya Google melakukannya... Jadi saya pikir saya menemukan beberapa metode bodoh. Lihat kodenya:
//Informasi fitur peramban
fungsiBrowserInfo()
{
brower[0] = navigator.nama aplikasi;
brower[7] = navigator.bahasa;
if(browser[0] == "Netscape")
{
var browerInfo = navigator.userAgent;
brower[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
penjelajah[0] = penjelajah[1].substring(0,peramban[1].lastIndexOf("/"));
brower[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
brower[7] = navigator.bahasa;
}
else if(browser[0] == "Microsoft Internet Explorer")
{
browser[1] = navigator.userAgent.split(";")[1];
browser[7] = navigator.bahasa pengguna;
}
browser[2] = navigator.javaEnabled()?1:-1;
peramban[3] = getFlash();
peramban[4] = getOS();
if (layar mandiri) {
sr=layar.lebar+"x"+layar.tinggi;
sc=layar.kedalaman warna+"-bit";
}
else if (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.lebar+"x"+s.tinggi;
}
//Resolusi
peramban[5] = sr;
//Kedalaman warna
peramban[6] = sc;
//Daftar plugin
peramban[8] = getPlugin();
}
//--------Dapatkan alamat saat ini-------------------- - --------
fungsi getHref()
{
kembalikan dokumen.location.href;
}
//---------operasi cookie dimulai--------------------- --------------------------------------------------- ---------------------------------------------
set fungsiCookie(nama, nilai)
//Tetapkan nilai cookie
{
var expdate = Tanggal baru();
var argv = setCookie.argumen;
var argc = setCookie.argumen.panjang;
var kedaluwarsa = 15768000;
var jalur = (argc > 3) ?argv[3] : nol;
var domain = (argc > 4) ?argv[4] : nol;
var secure = (argc > 5) ? argv[5] : false
;
{
//Tetapkan waktu kedaluwarsa 24 jam
expdate.setTime(uexp);
document.cookie = nama + "=" + escape (nilai) +((kedaluwarsa == null) ? "" : ("; expired="+ expdate.toGMTString()))
+ ((jalur == null) ? "" : ("; jalur=" + jalur)) +((domain == null) ? "" : ("; domain=" + domain))
+ ((aman == benar) ? "; aman=" : "");
}
}
fungsi delCookie(nama)
//Hapus Kue
{
var exp = Tanggal baru();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (nama);
document.cookie = nama + "=" + cval + "; expired="+ exp.toGMTString();
}
//Dapatkan nilai Cookie
fungsi getCookie (nama f)
{
nama var,nilai;
var cookie = Objek baru();
var awal, tengah, akhir
;
while(awal < dokumen.cookie.panjang)
{
tengah = document.cookie.indexOf("=",awal);
akhir = dokumen.cookie.indexOf(";",awal);
if(akhir == -1)
{
end = dokumen.cookie.length;
}
if((tengah > akhir) || (tengah == -1))
{
nama = dokumen.cookie.substring(awal,akhir);
nilai = "";
}
kalau tidak
{
nama = document.cookie.substring(awal,tengah);
nilai = dokumen.cookie.substring(tengah+1,akhir);
}
jika(nama == namaf)
{
kembalikan unescape(nilai);
}
awal = akhir + 2;
}
}
//-----Dapatkan apakah cookie GUID ada---------------------------------- - ---------------
fungsi getCookieValue()
{
var panduan = getCookie("GUID");
jika(panduan != nol)
{
panduan pengembalian;
}
kalau tidak
{
kembalikan "tidak ada Kue";
}
}
//------Dapatkan cookie pengguna terdaftar---------------------- -----------------------
fungsi getRegUserCookie()
{
kembali ;
}
//--------------Operasi cookie selesai---------------- --------------------------------------------------- ------------------------------------------
//------ ---------------------Dapatkan sistem operasinya------------------------- - -
fungsi getOS()
{
var OSlist = Array baru();
var OSName = Array baru();
Daftar OS[0] = "Windows4.0"; Nama OS[0] = "Windows 95";
Daftar OS[1] = "Windows 98"; Nama OS[1] = "Windows 98";
Daftar OS[2] = "Windows NT 5.0"; Nama OS[2] = "Windows 2000";
Daftar OS[3] = "Windows NT 5.1"; Nama OS[3] = "Windows XP";
Daftar OS[4] = "Windows NT 5.2"; Nama OS[4] = "Windows Server 2003";
var ua = navigator.userAgent.split(";");
for(var i = 0; i < OSlist.panjang; i++)
{
if(ua[2] == daftar OS[i])
kembalikan NamaOS[i];
}
kembalikan ua[2];
}
//Dapatkan pluginnya
fungsi dapatkanPlugin()
{
var plugin = "";
var ua = navigator.userAgent.split(";");
if(ua.panjang < 4)
kembali "";
for(var i = 4; i < ua.panjang; i++)
{
plugin += ua[i] + ",";
}
return plugin.substring(0,plugin.length-2);
}
Satu hal yang perlu dijelaskan adalah fungsi GetResidentTime. Google menggunakan metode img.load untuk memuat halaman penerimaan dan pemrosesan informasi. Anda perlu mengkonfigurasi sisi server untuk mengkompilasi dan menjalankan file dengan akhiran .gif atau bentuk lain Anda memilih menggunakan aspx. Karena awalnya saya mempertimbangkan untuk menggunakan panggilan asinkron xmlHttp. Namun terkadang tidak dijalankan saat halaman keluar. Jadi kodenya adalah sebagai berikut: function GetResidentTime().
{
halamanTutup = Tanggal baru();
menit = (pageClose.getMinutes() - pageOpen.getMinutes());
jika(menit < 0)
{
menit = menit + 60;
}
detik = (pageClose.getSeconds() - pageOpen.getSeconds());
if(detik < 0){ detik += 60;}
waktu = (detik + (menit * 60));
//------Ubah di sini untuk menerima alamat tautan transmisi asinkron XML-------------- ---- -------------------
// var xmlHttp = buatXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + kunjungan pertama.aspx?" + StrPara(), false);
// xmlHttp.kirim(null);
//----------------Transmisi dalam bentuk gambar------------- ---- ------------------------------- -
jika(isReturn() == salah)
{
var i = Gambar baru(1,1);
i.src = reqURL + "firstVisit.aspx?" + StrPara() + "&GUID=" + GUID;
i.onload = function() {LoadVoid();}
//Informasi masuk ke halaman
if(getCookieValue("GUID") == "noCookie"){kembali ;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + waktu;
i.onload=fungsi() {LoadVoid();}
}
kalau tidak
{
var i=Gambar baru(1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + waktu;
i.onload=fungsi() {LoadVoid();}
}
} Akhirnya dipanggil. Saya menggunakan window.onunload = GetResidentTime
Anda dapat mencetak parameter yang dilewati dan melihatnya.
Selebihnya adalah pemrosesan sisi server. Pemrosesan sisi server sebenarnya cukup sederhana. Dapatkan nilai permintaan, verifikasi dan simpan ke dalam database. Sekarang kita memiliki data, analisis dapat ditangani oleh pengguna sesuai dengan kebutuhannya sendiri.. Tambahkan satu kalimat, alamat IP diperoleh dan disimpan oleh server.
Saat menggunakannya, ingatlah untuk meletakkannya di sisi server, lalu gunakan <javascript Language="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script> Lampirkan kode lengkap http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html