ฉันเชื่อว่าเพื่อน ๆ ที่เคยใช้ Google Analytics เข้าใจถึงฟังก์ชันอันทรงพลังของมัน
เนื่องจากความต้องการในการทำงาน ฉันเพิ่งดาวน์โหลดสำเนาของโค้ด urchin.js และศึกษามัน เนื่องจากมีความคิดเห็นน้อยและการตั้งชื่อนั้นยากที่จะเข้าใจ ฉันศึกษามาเป็นเวลาหนึ่งเดือนและประสบความสำเร็จในการเขียนโค้ดใหม่ ความคิดเห็นที่จะแบ่งปันกับทุกคน รหัสประจำตัวผู้ใช้ของ Google ถูกลบที่นี่ /**//*
-
|--------ผู้เขียนโดย BlackSoul---------|
|----------------2006.04.27--------------|
|[email protected] ------|
|----------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
-
*/
//กำหนดตัวแปรส่วนกลาง
var ur = ""; // ที่อยู่ต้นทาง
var urp = new Array(); //ชื่อพารามิเตอร์ซอร์ส
var urpv = new Array(); //ค่าพารามิเตอร์ต้นทาง
var arrayCount = 0; //จำนวนพารามิเตอร์
pageOpen = new Date(); //เวลาเข้าเพจ
var reqURL = " http://192.168.0.219/Analytics/ "; // ที่อยู่หน้าเพื่อรับข้อมูล
var GUID = Math.round(Math.random()*2147483647); // หมายเลขสุ่มเฉพาะของผู้ใช้
var title = document.title; // ชื่อหน้าเว็บ
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); // ตั้งเวลาหมดอายุของคุกกี้และจำกัดจำนวนผู้ใช้ที่กลับมา
var rtu = "false"; //ระบุว่าผู้ใช้กลับมาเยี่ยมชมผู้ใช้หรือไม่
// ข้อมูลคุณลักษณะของเบราว์เซอร์
var brower = อาร์เรย์ใหม่ ();
-
* เบราว์เซอร์[0] ประเภทเบราว์เซอร์
* เบราว์เซอร์ [1] เวอร์ชันเบราว์เซอร์
* เบราว์เซอร์ [2] ไม่ว่าเบราว์เซอร์จาวาจะเปิดอยู่หรือไม่ 1 เปิด - 1 ปิด
* เบราว์เซอร์ [3] เวอร์ชันแฟลชของเบราว์เซอร์
* เบราว์เซอร์ [4] ระบบปฏิบัติการเบราว์เซอร์
* เบราว์เซอร์ [5] ความละเอียดของเบราว์เซอร์
* เบราว์เซอร์ [6] ความลึกของสีของเบราว์เซอร์
* เบราว์เซอร์ [7] ภาษาของเบราว์เซอร์
* เบราว์เซอร์ปลั๊กอินเบราว์เซอร์ [8]
-
var sEn=new Array(); //ชื่อของเครื่องมือค้นหา
var keyWord=new Array(); //แบบฟอร์มการส่งคำสำคัญ
sEn[0]="google"; คีย์เวิร์ด[0]="q";
sEn[1]="yahoo"; คีย์เวิร์ด[1]="p";
sEn[2]="msn"; keyWord[2]="q";
sEn[3]="aol"; keyWord[3]="แบบสอบถาม";
sEn[4]="lycos"; keyWord[4]="แบบสอบถาม";
sEn[5]="ถาม"; keyWord[5]="q";
sEn[6]="altavista"; คีย์เวิร์ด[6]="q";
sEn[7]="ค้นหา"; keyWord[7]="q";
sEn[8]="netscape"; keyWord[8]="แบบสอบถาม";
sEn[9]="earthlink"; คีย์เวิร์ด[9]="q";
sEn[10]="cnn"; keyWord[10]="แบบสอบถาม";
sEn[11]="looksmart"; คีย์เวิร์ด[11]="คีย์";
sEn[12]="เกี่ยวกับ"; keyWord[12]="เงื่อนไข";
sEn[13]="ตื่นเต้น"; keyWord[13]="qkw";
sEn[14]="mamma"; keyWord[14]="แบบสอบถาม";
sEn[15]="ทุกเว็บ";
sEn[16]="gigablast"; keyWord[16]="q";
sEn[17]="voila"; คีย์เวิร์ด[17]="กิโลวัตต์";
sEn[18]="virgilio"; keyWord[18]="qs";
sEn[19]="teoma"; คีย์เวิร์ด[19]="q";
sEn[20]="baidu"; keyWord[20]="wd";
//ทดสอบข้อมูล--------------------------///////////////////// /////////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost"; คีย์เวิร์ด[21]="q";
ปริมาณทั่วโลกบางส่วนได้รับการกำหนดไว้ที่นี่ โดยที่ upr และ urpv เป็นพารามิเตอร์แหล่งที่มาและการอ้างอิง ตัวอย่างเช่น แหล่งที่มาคือ http://www.google.com/?p=BlackSoul&q=javascript จากนั้น urp[0]="p", urp[ 1]="q" สอดคล้องกับ urpv[0]="BlackSoul",urpv[1]="javascript"
แต่ในการส่งข้อมูลขั้นสุดท้ายจะถูกส่งไปยังเซิร์ฟเวอร์ในรูปแบบของตัวคั่น
GUID เป็นตัวเลขสุ่ม ซึ่งเป็นวิธีที่ Google ทำ ฉันไม่รู้ว่าทำไมจึงต้องบันทึกตัวเลขสุ่มในตอนแรก แต่ภายหลังฉันพบมันหลังจากวิเคราะห์ข้อมูลแล้ว เพื่อตรวจสอบเอกลักษณ์ของผู้ใช้ .
ต่อไปนี้คือการประมวลผลฟังก์ชัน:
//-------------------------------- เปรียบเทียบ url ถ้าเป็น search engine ให้บันทึก keyword --- ----- -----
ฟังก์ชั่น getKeyword (URL)
-
ชื่อโฮสต์ var;
ถ้า(url.indexOf(".") == -1)
{ชื่อโฮสต์ = URL;}
อื่น
{ชื่อโฮสต์ = url.substring(url.indexOf("."),url.lastIndexOf("."));}
สำหรับ (var i = 0; i < sEn.length; i++)
-
ถ้า (ชื่อโฮสต์ == sEn [i])
-
สำหรับ (var j = 0; j < urp.length; j++)
-
ถ้า(urp[j] == คีย์เวิร์ด[i])
-
กลับ urpv[j];
-
-
-
-
กลับ "";
-
//แปลง URL เป็นที่อยู่และพารามิเตอร์ของหน้า และค่าพารามิเตอร์ พารามิเตอร์ uri เป็นที่อยู่ของหน้า
ฟังก์ชั่น gethn (uri)
-
if(!uri || uri == "") กลับ "";
คุณ = ยูริ;
วาร์ซับ;
//พร้อมพารามิเตอร์
ถ้า(ur.indexOf("?") != -1)
-
var url = ur.substring(0,ur.indexOf("?"));
var para = ur.substring(ur.indexOf("?")+1,ur.length);
ในขณะที่ (para.length > 0)
-
ถ้า(para.indexOf("&") == -1)
-
urp[arrayCount] = para.substring(0,para.indexOf("="));
urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length);
หยุดพัก;
-
ย่อย = para.substring(0,para.indexOf("&"));
urp[arrayCount] = sub.substring(0,sub.indexOf("="));
urpv[arrayCount] = sub.substring(sub.indexOf("=")+1,sub.length);
พารา = para.substring(para.indexOf("&")+1,para.length);
อาร์เรย์นับ++;
-
URL ส่งคืน;
-
อื่น
ส่งคืนคุณ;
}
//-------------------------------------- รับชื่อโดเมน ---------- ------- --------------------------------
ฟังก์ชั่น getHostName (url)
-
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
URL ส่งคืน;
}
//--------------------------------- รับเวอร์ชันแฟลช ---------- ------- --------------------------
ฟังก์ชั่น getFlash() {
var f="-1",n=เนวิเกเตอร์;
ถ้า (n.plugins && n.plugins.length) {
สำหรับ (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];
หยุดพัก;
-
-
} อื่นถ้า (window.ActiveXObject) {
สำหรับ (var ii=10;ii>=2;ii--) {
พยายาม {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
ถ้า (ชั้น) { f=ii + '.0';
-
จับ (จ) {}
-
-
ถ้า(ฉ == "-1")
กลับฉ;
อื่น
กลับ f.substring(0,f.indexOf(".")+2);
}
//-------------------------------------------- ตั้งค่าการส่งข้อมูลแบบอะซิงโครนัส ------------------- ------------------
ฟังก์ชั่น createXMLHttpRequest()
-
ถ้า (window.XMLHttpRequest)
-
กลับ XMLHttpRequest ใหม่ ();
-
อย่างอื่นถ้า (window.ActiveXObject)
-
กลับ ActiveXObject ใหม่ ("Microsoft.XMLHttp");
-
} วิธีการข้างต้นสามารถรับข้อมูลพื้นฐานบางอย่างได้ แต่ปัญหาสำคัญคือการตั้งค่าคุกกี้ของผู้ใช้ กำหนดการเข้าชมที่กลับมา กำหนดเวลาเข้าชมครั้งล่าสุด และตั้งค่า GUID หลังจากดูที่นี่มาเป็นเวลานาน ฉันก็ไม่รู้ว่าทำอย่างไร Google ทำมัน... ฉันคิดว่าฉันคิดวิธีโง่ ๆ ขึ้นมา ดูรหัส:
// ข้อมูลคุณลักษณะของเบราว์เซอร์
ฟังก์ชั่นBrowserInfo()
-
เบราว์เซอร์ [0] = navigator.appName;
เบราว์เซอร์[7] = navigator.ภาษา;
ถ้า (เบราว์เซอร์ [0] == "Netscape")
-
var browerInfo = navigator.userAgent;
เบราว์เซอร์[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
เบราว์เซอร์[0] = เบราว์เซอร์[1].substring(0,เบราว์เซอร์[1].lastIndexOf("/"));
เบราว์เซอร์[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
เบราว์เซอร์[7] = navigator.ภาษา;
-
อย่างอื่นถ้า (เบราว์เซอร์ [0] == "Microsoft Internet Explorer")
-
เบราว์เซอร์[1] = navigator.userAgent.split(";")[1];
เบราว์เซอร์ [7] = navigator.userLanguage;
-
เบราว์เซอร์[2] = navigator.javaEnabled()?1:-1;
เบราว์เซอร์[3] = getFlash();
เบราว์เซอร์[4] = getOS();
ถ้า (self.screen) {
sr=screen.width+"x"+screen.height;
sc=screen.colorDepth+"-บิต";
-
อย่างอื่นถ้า (self.java)
-
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.width+"x"+s.height;
-
//ปณิธาน
เบราว์เซอร์[5] = sr;
//ความลึกของสี
เบราว์เซอร์[6] = sc;
//รายการปลั๊กอิน
เบราว์เซอร์[8] = getPlugin();
}
//-------------------------------------- รับที่อยู่ปัจจุบัน -------------------- - --------
ฟังก์ชัน getHref()
-
กลับ document.location.href;
}
//-------------------------------------- การทำงานของคุกกี้เริ่มต้นขึ้น ----------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------
ฟังก์ชั่น setCookie (ชื่อ, ค่า)
//ตั้งค่าคุกกี้
-
var expdate = วันที่ใหม่ ();
var argv = setCookie.อาร์กิวเมนต์;
var argc = setCookie.arguments.length;
var หมดอายุ = 15768000;
var path = (argc > 3) ? argv[3] : null;
โดเมน var = (argc > 4) ? argv[4] : null;
var Secure = (argc > 5) ? argv[5] : false;
if(หมดอายุ!=null)
-
//ตั้งเวลาหมดอายุ 24 ชั่วโมง
expdate.setTime(uexp);
document.cookie = name + "=" + Escape (ค่า) +((หมดอายุ == null) ? "" : ("; หมดอายุ = "+ expdate.toGMTString()))
+ ((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; โดเมน=" + โดเมน))
+ ((ปลอดภัย == จริง) ? "; ปลอดภัย=" : "");
-
}
ฟังก์ชั่น delCookie (ชื่อ)
// ลบคุกกี้
-
var exp = วันที่ใหม่ ();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (ชื่อ);
document.cookie = ชื่อ + "=" + cval + "; หมดอายุ = "+ exp.toGMTString();
-
//รับค่าของคุกกี้
ฟังก์ชั่น getCookie (fname)
-
ชื่อ var ค่า;
คุกกี้ var = วัตถุใหม่ ();
var เริ่มต้น, กลาง, สิ้นสุด;
จุดเริ่มต้น = 0;
ในขณะที่ (เริ่มต้น < document.cookie.length)
-
กลาง = document.cookie.indexOf("=",เริ่มต้น);
end = document.cookie.indexOf(";",beginning);
ถ้า(end == -1)
-
ปลาย = document.cookie.length;
-
ถ้า ((กลาง > ปลาย) || (กลาง == -1))
-
name = document.cookie.substring (เริ่มต้น, สิ้นสุด);
ค่า = "";
-
อื่น
-
name = document.cookie.substring (เริ่มต้น, กลาง);
ค่า = document.cookie.substring (กลาง + 1, ปลาย);
-
ถ้า (ชื่อ == fname)
-
กลับ unescape (ค่า);
-
เริ่มต้น = สิ้นสุด + 2;
-
}
//-----ตรวจสอบว่ามีคุกกี้ของ GUID อยู่หรือไม่---------------------------------- - ---------------
ฟังก์ชั่น getCookieValue()
-
var guid = getCookie("GUID");
ถ้า (guid != null)
-
คู่มือการส่งคืน;
-
อื่น
-
กลับ "noCookie";
-
}
//------------------------ รับคุกกี้ผู้ใช้ที่ลงทะเบียน ---------------------- -----------------------
ฟังก์ชั่น getRegUserCookie()
-
กลับ ;
-
//--------------------------------- การดำเนินการคุกกี้เสร็จสมบูรณ์---------------- -------------------------------------------------- -------------------------------------------------- -----------------------------------------------
//------ --------------------- รับระบบปฏิบัติการ --------------------- - -
ฟังก์ชั่น getOS()
-
var OSlist = อาร์เรย์ใหม่ ();
var OSName = อาร์เรย์ใหม่ ();
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(";");
สำหรับ (var i = 0; i < OSlist.length; i++)
-
ถ้า (ua [2] == OSlist [i])
กลับ OSName [i];
-
กลับ ua[2];
}
//รับปลั๊กอิน
ฟังก์ชั่น getPlugin()
-
ปลั๊กอิน var = "";
var ua = navigator.userAgent.split(";");
ถ้า(ua.length < 4)
กลับ "";
สำหรับ (var i = 4; i < ua.length; i++)
-
ปลั๊กอิน += ua[i] + ",";
-
กลับ Plugin.substring (0, Plugin.length-2);
-
สิ่งหนึ่งที่ต้องอธิบายคือฟังก์ชัน GetResidentTime Google ใช้วิธีการ img.load เพื่อโหลดหน้าการรับและประมวลผลข้อมูล คุณต้องกำหนดค่าฝั่งเซิร์ฟเวอร์เพื่อคอมไพล์และเรียกใช้ไฟล์ด้วยส่วนต่อท้าย .gif หรือรูปแบบอื่น ๆ ของคุณ เลือกใช้ aspx เพราะเดิมทีผมถือว่าใช้ xmlHttp การเรียกแบบอะซิงโครนัส แต่บางครั้งก็ไม่ถูกดำเนินการเมื่อออกจากเพจ ดังนั้นจึงละทิ้งโค้ดดังนี้: ฟังก์ชัน GetResidentTime()
-
pageClose = วันที่ใหม่ ();
นาที = (pageClose.getMinutes() - pageOpen.getMinutes());
ถ้า(นาที < 0)
-
นาที = นาที + 60;
-
วินาที = (pageClose.getSeconds() - pageOpen.getSeconds());
ถ้า (วินาที < 0) { วินาที += 60;}
เวลา = (วินาที + (นาที * 60));
//---------------------แก้ไขที่นี่เพื่อรับที่อยู่ลิงก์ การส่งข้อมูลแบบอะซิงโครนัส XML------------------ ---- -------------------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
// xmlHttp.send(null);
//---------------------------------- การส่งในรูปแบบภาพ------------- ---- -------------------------------------------------- - -
ถ้า(isReturn() == เท็จ)
-
var i = รูปภาพใหม่ (1,1);
i.src = reqURL + "firstVisit.aspx?" + StrPara() + "&GUID=" + GUID;
i.onload = function() {LoadVoid();}
//ข้อมูลเข้าสู่หน้า
if(getCookieValue("GUID") == "noCookie"){return ;}
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + เวลา;
i.onload=function() {LoadVoid();}
-
อื่น
{
var i=รูปภาพใหม่ (1,1);
i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + เวลา;
i.onload=function() {LoadVoid();}
-
} ในที่สุดมันก็ถูกเรียก ฉันใช้ window.onunload = GetResidentTime
คุณสามารถพิมพ์พารามิเตอร์ที่ส่งผ่านและดูได้ คุณควรจะเข้าใจความหมายได้
ส่วนที่เหลือเป็นการประมวลผลฝั่งเซิร์ฟเวอร์ จริง ๆ แล้วการประมวลผลฝั่งเซิร์ฟเวอร์นั้นค่อนข้างง่าย ตรวจสอบและบันทึกลงในฐานข้อมูล ตอนนี้เรามีข้อมูลแล้ว ผู้ใช้สามารถจัดการการวิเคราะห์ได้ ตามความต้องการของเขาเอง .. เพิ่มหนึ่งประโยค เซิร์ฟเวอร์จะได้รับและบันทึกที่อยู่ IP
เมื่อใช้งาน อย่าลืมวางไว้ที่ฝั่งเซิร์ฟเวอร์ จากนั้นใช้ <javascript language="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script> แนบโค้ดที่สมบูรณ์ http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html