أعتقد أن الأصدقاء الذين استخدموا Google Analytics يفهمون وظائفه القوية.
نظرًا لاحتياجات العمل، قمت مؤخرًا بتنزيل نسخة من كود urchin.js ودراستها نظرًا لوجود عدد قليل من التعليقات وصعوبة فهم التسمية، وقد حققت بعض النجاح وأعدت كتابة الكود يتم حذف التعليقات لمشاركتها مع الجميع هنا.
=====================================================================
|--------المؤلف بواسطة BlackSoul---------|
|----------------2006.04.27-------------|
|[email protected] ------|
|----------------س: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 = new Array();
/**//*
* المتصفح[0] نوع المتصفح
* المتصفح[1] إصدار المتصفح
* المتصفح [2] ما إذا كان متصفح جافا قيد التشغيل 1 تشغيل - 1 إيقاف
* المتصفح[3] نسخة المتصفح فلاش
* المتصفح[4] نظام تشغيل المتصفح
* المتصفح[5] دقة المتصفح
* المتصفح[6] عمق ألوان المتصفح
* المتصفح[7] لغة المتصفح
* المتصفح [8] البرنامج الإضافي للمتصفح
*/
var sEn=new Array(); // اسم محرك البحث
var keyWord=new Array(); // نموذج نقل الكلمة الرئيسية
sEn[0]="google";
sEn[1]="yahoo";
sEn[2]="msn"; keyWord[2]="q";
sEn[3]="aol"; keyWord[3]="query";
sEn[4]="lycos";
sEn[5]="ask";
sEn[6]="altavista";
sEn[7]="search";
sEn[8]="netscape";
sEn[9]="earthlink";
sEn[10]="cnn";
sEn[11]="looksmart";
sEn[12]="about"; keyWord[12]="terms";
sEn[13]="excite";
sEn[14]="mamma";
sEn[15]="alltheweb";
sEn[16]="gigablast";
sEn[17]="voila"; keyWord[17]="kw";
sEn[18]="فيرجيليو";
sEn[19]="teoma";
sEn[20]="baidu";
// بيانات الاختبار ---------------------------//////////////////// / ////////////---------/-/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost";
يتم تعريف بعض الكميات العالمية هنا، حيث يكون 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، إذا كان محرك بحث، فاحفظ الكلمة الرئيسية --- ----- -----
وظيفة getKeyword(url)
{
اسم المضيف فار؛
إذا (url.indexOf(".") == -1)
{اسم المضيف = URL؛}
آخر
{اسم المضيف = url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(var i = 0; i < sEn.length; i++)
{
إذا (اسم المضيف == سين [i])
{
for(var j = 0; j < urp.length; j++)
{
إذا (urp[j] == الكلمة الرئيسية[i])
{
إرجاع urpv[j];
}
}
}
}
يعود ""؛
}
// تحويل عنوان URL إلى العنوان ومعلمات الصفحة ومعلمة قيمة المعلمة uri إلى عنوان الصفحة
دالة جيتن (أوري)
{
if(!uri || uri == "") return "";
أور = أوري;
فارسوب.
// مع المعلمات
إذا (ur.indexOf("؟") != -1)
{
var url = ur.substring(0,ur.indexOf("؟"));
var para = ur.substring(ur.indexOf("؟")+1,ur.length);
بينما (طول الفقرة > 0)
{
إذا (para.indexOf("&") == -1)
{
urp[arrayCount] = para.substring(0,para.indexOf("="));
urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length);
استراحة؛
}
sub = 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);
arrayCount++;
}
عنوان URL للإرجاع؛
}
آخر
إرجاع أور؛
}
//----------------------------------الحصول على اسم المجال---------- ------- ----------------------------
وظيفة getHostName(url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
عنوان URL للإرجاع؛
}
//---------------------------------احصل على نسخة الفلاش---------- ------- --------------------------
وظيفة الحصول على فلاش () {
فار f = "-1"، n = الملاح؛
إذا (n.plugins && n.plugins.length) {
for (var ii=0;ii<n.plugins.length;ii++) {
إذا (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+"');");
إذا (fl) { f=ii + '.0'؛
}
قبض (ه) {}
}
}
إذا (و == "-1")
العودة و؛
آخر
return f.substring(0,f.indexOf(".")+2);
}
//--------------------------تعيين الإرسال غير المتزامن------------------ ------------------
الدالة createXMLHttpRequest()
{
إذا (window.XMLHttpRequest)
{
إرجاع XMLHttpRequest() جديد;
}
وإلا إذا (window.ActiveXObject)
{
إرجاع ActiveXObject الجديد("Microsoft.XMLHttp");
}
} يمكن للطريقة المذكورة أعلاه الحصول على بعض المعلومات الأساسية، لكن المشكلة الأساسية هي تعيين ملفات تعريف الارتباط للمستخدم، وتحديد الزيارات المرتجعة، وتحديد وقت الزيارة الأخيرة، وتعيين المعرف الفريد العمومي (GUID) الخاص بها، بعد البحث هنا لفترة طويلة، لم أعرف كيفية القيام بذلك جوجل تفعل ذلك... لذلك اعتقدت أنني توصلت إلى بعض الطرق الغبية، انظر الكود:
// معلومات ميزات المتصفح
معلومات المتصفح ()
{
brower[0] = navigator.appName;
brower[7] = navigator.language;
إذا (متصفح[0] == "نتسكيب")
{
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.language;
}
وإلا إذا (brower[0] == "Microsoft Internet Explorer")
{
brower[1] = navigator.userAgent.split(";")[1];
brower[7] = navigator.userLanguage;
}
brower[2] = navigator.javaEnabled()?1:-1;
brower[3] = getFlash();
المتصفح[4] = getOS();
إذا (الشاشة الذاتية) {
sr=screen.width+"x"+screen.height;
sc=screen.colorDepth+"-bit";
}
وإلا إذا (self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.width+"x"+s.height;
}
//دقة
brower[5] = sr;
// عمق اللون
brower[6] = sc;
// قائمة المكونات الإضافية
brower[8] = getPlugin();
}
//-----------------------احصل على العنوان الحالي-------------------- - --------
الدالة getHref()
{
إرجاع document.location.href;
}
//-----------------------تبدأ عملية ملف تعريف الارتباط--------------------- -------------------------------------------------- ---------------------------------------------
وظيفة setCookie(name, قيمة)
// قم بتعيين قيمة ملف تعريف الارتباط
{
var expdate = new Date();
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
تنتهي صلاحية فار = 15768000؛
مسار فار = (argc > 3) ?
مجال فار = (argc > 4) ?
فار آمن = (argc > 5)
?
{
// اضبط وقت انتهاء الصلاحية على 24 ساعة
expdate.setTime(uexp);
document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; تنتهي = "+ expdate.toGMTString()))
+ ((المسار == فارغ) ? "" : ("; المسار == + المسار)) +((المجال == فارغ) ? "" : ("; المجال = = المجال))
+ ((آمن == صحيح) ? "; Secure=" : "");
}
}
الدالة delCookie(الاسم)
//حذف ملف تعريف الارتباط
{
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = getCookie(name);
document.cookie = name + "=" + cval + "; انتهاء الصلاحية = "+ exp.toGMTString();
}
// احصل على قيمة ملف تعريف الارتباط
الدالة getCookie(fname)
{
اسم فار، القيمة؛
var cookies = new Object();
بداية فار، منتصف،
نهاية = 0؛
بينما (البداية < document.cookie.length)
{
middle = document.cookie.indexOf("=",beginning);
النهاية = document.cookie.indexOf(";",beginning)
;
{
النهاية = document.cookie.length;
}
إذا ((الأوسط > النهاية) || (الأوسط == -1))
{
name = document.cookie.substring(beginning,end);
القيمة = ""؛
}
آخر
{
name = document.cookie.substring(beginning,middle);
value = document.cookie.substring(middle+1,end);
}
إذا (الاسم == اسم)
{
إرجاع unscape(value);
}
البداية = النهاية + 2؛
}
}
//-----احصل على ما إذا كان ملف تعريف الارتباط للمعرف الفريد العمومي (GUID) موجودًا----------------------------------- - ---------------
الدالة getCookieValue()
{
var guid = getCookie("GUID");
إذا (المرشد!= فارغة)
{
دليل العودة؛
}
آخر
{
إرجاع "noCookie";
}
}
//---------------------احصل على ملف تعريف ارتباط المستخدم المسجل---------------------- -----------------------
الدالة getRegUserCookie()
{
يعود ؛
}
//-----------------------------اكتملت عملية ملف تعريف الارتباط---------------- -------------------------------------------------- ------------------------------------------
//----- ---------------------الحصول على نظام التشغيل------------------------- - -
الدالة getOS()
{
var OSlist = 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++)
{
إذا (ua[2] == OSlist[i])
إرجاع OSName[i];
}
إرجاع تعميم الوصول إلى الخدمات[2]؛
}
// احصل على المكون الإضافي
وظيفة getPlugin ()
{
فار البرنامج المساعد = "";
var ua = navigator.userAgent.split(";");
إذا (ua. length <4)
يعود ""؛
for(var i = 4; i < ua.length; i++)
{
البرنامج المساعد += ua[i] + ""،"؛
}
إرجاع plugin.substring(0,plugin.length-2);
}
الشيء الوحيد الذي يحتاج إلى شرح هو وظيفة GetResidentTime. تستخدم Google طريقة img.load لتحميل صفحة تلقي المعلومات ومعالجتها، وتحتاج إلى تكوين جانب الخادم لتجميع الملفات وتشغيلها باستخدام اللاحقة .gif أو النماذج الأخرى اختر استخدام aspx. لأنني فكرت في الأصل في استخدام استدعاء غير متزامن لـ xmlHttp، لكن في بعض الأحيان لا يتم تنفيذه عند خروج الصفحة، لذلك يتم التخلي عنه كما يلي: الدالة GetResidentTime().
{
pageClose = new Date();
Minutes = (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 = new Image(1,1);
i.src = reqURL + "firstVisit.aspx؟"
i.onload = function() {LoadVoid();}
// المعلومات التي تدخل الصفحة
إذا (getCookieValue("GUID") == "noCookie"){return ;}
i.src = reqURL + "pageView.gif؟" + pageView() + "&st=" + time;
i.onload=function() {LoadVoid();}
}
آخر
{
فار i=صورة جديدة(1,1);
i.src = reqURL + "pageView.gif؟" + pageView() + "&st=" + time;
i.onload=function() {LoadVoid();}
}
} تم استدعاؤه أخيرًا
يمكنك طباعة المعلمات التي تم تمريرها وإلقاء نظرة عليها، ويجب أن تكون قادرًا على فهم معناها.
والباقي هو المعالجة من جانب الخادم، وهي في الواقع بسيطة للغاية. احصل على قيمة الطلب، وتحقق منها، واحفظها في قاعدة البيانات. الآن بعد أن حصلنا على البيانات، يمكن للمستخدم التعامل معها حسب متطلباته الخاصة.. أضف جملة واحدة، يتم الحصول على عنوان IP وحفظه بواسطة الخادم.
عند استخدامه، تذكر وضعه على جانب الخادم، ثم استخدم <javascript language="javascript" type="text/javascript" src=server title+path+"statistics.js"> </script> قم بإرفاق الكود الكامل http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html