Я считаю, что друзья, которые использовали Google Analytics, понимают его мощные функции.
В связи с необходимостью работы я недавно скачал копию кода urchin.js и изучил ее, поскольку комментариев мало, а название сложно понять. Я учился месяц и добился некоторых успехов, переписал код. комментарии, которыми можно поделиться со всеми. Здесь удален идентификационный код пользователя Google /**//*.
====================================
|--------Автор BlackSoul---------|
|----------------27.04.2006--------------|
|[email protected] ------|
|----------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
=====================================
*/
//Определение глобальных переменных
var ur = ""; //Адрес источника
var urp = new Array(); // Имя параметра источника
var urpv = new Array(); //Исходное значение параметра
var arrayCount = 0 //Количество параметров;
pageOpen = новая дата(); //Время входа на страницу
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 //Устанавливаем срок действия cookie и ограничиваем возвращаемых пользователей);
var rtu = "false"; // Указывает, возвращается ли пользователь, чтобы посетить пользователя
// Информация о функциях браузера
вар браузер = новый массив ();
/**//*
* браузер[0] тип браузера
* браузер[1] версия браузера
* браузер[2] Включен ли Java браузера 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"; ключевое слово[2]="q";
sEn[3]="aol"; ключевое слово[3]="запрос";
sEn[4]="lycos"; ключевое слово[4]="запрос";
sEn[5]="спросить"; ключевое слово[5]="q";
sEn[6]="альтависта"; ключевое слово[6]="q";
sEn[7]="поиск"; ключевое слово[7]="q";
sEn[8]="netscape"; ключевое слово[8]="запрос";
sEn[9]="earthlink"; ключевое слово[9]="q";
sEn[10]="cnn"; ключевое слово[10]="запрос";
sEn[11]="выглядит умно"; keyWord[11]="ключ";
sEn[12]="о"; ключевое слово[12]="термины";
sEn[13]="возбуждать"; ключевое слово[13]="qkw";
sEn[14]="мама"; ключевое слово[14]="запрос";
sEn[15]="alltheweb"; ключевое слово[15]="q";
sEn[16]="гигабласт"; ключевое слово[16]="q";
sEn[17]="вуаля"; ключевое слово[17]="kw";
sEn[18]="virgilio"; ключевое слово[18]="qs";
sEn[19]="теома"; ключевое слово[19]="q";
sEn[20]="baidu"; ключевое слово[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-адреса, если это поисковая система, сохраните ключевое слово --- ----- -----
функция getKeyword (url)
{
вар имя хоста;
если(url.indexOf(".") == -1)
{имя хоста = URL;}
еще
{имя хоста = url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(var i = 0; i <sEn.length; i++)
{
если (имя хоста == sEn[i])
{
for(var j = 0; j <urp.length; j++)
{
if(urp[j] == ключевое слово[i])
{
вернуть урпв[j];
}
}
}
}
возвращаться "";
}
//Преобразуем URL-адрес в адрес и параметры страницы, а значение параметра uri параметра в адрес страницы
функция gethn(uri)
{
if(!uri || uri == "") return "";
ур = ури;
варсуб;
//с параметрами
if(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 = para.substring(para.indexOf("&")+1,para.length);
массивCount++;
}
обратный URL;
}
еще
вернуть тебя;
}
//----------------------------------Получение доменного имени---------- ------- ----------------------------
функция getHostName (url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
обратный URL;
}
//----------------------------------Получить флеш-версию---------- ------- --------------------------
функция getFlash() {
вар f="-1",n=navigator;
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];
перерыв;
}
}
} Еще если (window.ActiveXObject) {
for (var ii=10;ii>=2;ii--) {
пытаться {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
если (fl) {f=ii + '.0';
}
поймать(е) {}
}
}
если (е == "-1")
вернуть f;
еще
return f.substring(0,f.indexOf(".")+2);
}
//--------------------------Установим асинхронную передачу------------------ ------------------
функция createXMLHttpRequest()
{
если (окно.XMLHttpRequest)
{
вернуть новый XMLHttpRequest();
}
иначе, если (window.ActiveXObject)
{
вернуть новый ActiveXObject("Microsoft.XMLHttp");
}
} Вышеупомянутый метод может получить некоторую базовую информацию, но ключевым моментом является установка файлов cookie пользователя, определение повторных посещений, определение времени последнего посещения и установка его GUID. После долгого поиска здесь я не нашел, как это сделать. Google делает это... Вот я и подумал, что придумал несколько глупых методов. Посмотрите код:
//Информация о функциях браузера
функцияИнформацияБраузера()
{
браузер[0] = navigator.appName;
браузер[7] = navigator.language;
if(браузер[0] == "Netscape")
{
вар browerInfo = navigator.userAgent;
brower[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length);
браузер[0] = браузер[1].substring(0,браузер[1].lastIndexOf("/"));
браузер[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
браузер[7] = navigator.language;
}
иначе if(браузер[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+"-bit";
}
иначе, если (self.java)
{
вар j=java.awt.Toolkit.getDefaultToolkit();
вар s=j.getScreenSize();
sr=s.width+"x"+s.height;
}
//Разрешение
браузер [5] = ср;
//Глубина цвета
броузер[6] = sc;
//Список плагинов
браузер[8] = getPlugin();
}
//-----------------------Получение текущего адреса-------------------- - --------
функция getHref()
{
вернуть document.location.href;
}
//-----------------------начинается операция cookie--------------------- -------------------------------------------------- ---------------------------------------------
функция setCookie(name, ценить)
//Устанавливаем значение cookie
{
вар expdate = новая дата ();
вар argv = setCookie.arguments;
вар argc = setCookie.arguments.length;
вар истекает = 15768000;
вар путь = (argc > 3)?
вар домен = (argc > 4) ? argv[4]: ноль;
var secure = (argc > 5) ? argv[5]: false,
если (истекает! = null)
{
//Установим срок действия 24 часа
expdate.setTime(uexp);
document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
+ ((путь == null) ? "" : ("; path=" + путь)) +((домен == null) ? "" : ("; домен=" + домен))
+ ((secure == true) ? "; secure=" : "");
}
}
функция delCookie(имя)
//Удалить куки
{
вар exp = новая дата ();
exp.setTime (exp.getTime() - 1);
вар cval = getCookie (имя);
document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();
}
//Получаем значение Cookie
функция getCookie(fname)
{
имя переменной, значение;
вар cookie = новый объект ();
начало вар, середина, конец;
начало = 0;
в то время как (начало < document.cookie.length)
{
средний = document.cookie.indexOf("=",beginning);
конец = document.cookie.indexOf(";",beginning
if(end == -1)
{
конец = document.cookie.length;
}
if((середина > конец) || (середина == -1))
{
имя = document.cookie.substring(начало,конец);
значение = "";
}
еще
{
имя = document.cookie.substring(начало,середина);
значение = document.cookie.substring(middle+1,end);
}
если (имя == имя)
{
вернуть unescape (значение);
}
начало = конец + 2;
}
}
//-----Узнаем, существует ли файл cookie с GUID ---------------------------------- - ---------------
функция getCookieValue()
{
var guid = getCookie("GUID");
если (руководство! = ноль)
{
обратная направляющая;
}
еще
{
вернуть «noCookie»;
}
}
//---------------------Получить cookie зарегистрированного пользователя---------------------- -----------------------
функция getRegUserCookie()
{
возвращаться ;
}
//-----------------------------Операция cookie завершена---------------- -------------------------------------------------- -----------------------------------------
//------ ---------------------Получить операционную систему------------------------- - -
функция getOS()
{
вар OSlist = новый массив ();
вар 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(";");
for(var я = 0; я <OSlist.length; я++)
{
если(ua[2] == OSlist[i])
вернуть OSName[i];
}
вернуть ua[2];
}
//Получаем плагин
функция getPlugin()
{
вар плагин = "";
var ua = navigator.userAgent.split(";");
если(ua.длина < 4)
возвращаться "";
for(var я = 4; я <ua.length; я++)
{
плагин += ua[i] + ",";
}
вернуть плагин.подстроку(0,plugin.length-2);
}
Одна вещь, которую необходимо объяснить, — это функция GetResidentTime. Google использует метод img.load для загрузки страницы получения и обработки информации. Вам необходимо настроить серверную часть для компиляции и запуска файлов с суффиксом .gif или других ваших форм. выберите использование aspx. Потому что изначально я рассматривал возможность использования асинхронного вызова xmlHttp, но иногда он не выполняется при выходе из страницы, поэтому код выглядит следующим образом: функция GetResidentTime().
{
pageClose = новая дата();
минуты = (pageClose.getMinutes() - pageOpen.getMinutes());
если(минут <0)
{
минуты = минуты + 60;
}
секунды = (pageClose.getSeconds() - pageOpen.getSeconds());
if(секунды < 0){секунды += 60;}
время = (секунды + (минуты * 60));
//---------------------Измените здесь, чтобы получить асинхронную передачу XML-адреса ссылки-------------- ---- -------------------
// вар xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
// xmlHttp.send(null);
//-------------------------------Передача в виде изображения------------- ---- ---------------------------------------------- -
если (isReturn() == ложь)
{
вар я = новое изображение (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();}
}
еще
{
вар я = новое изображение (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