Google Analytics를 사용해 본 친구들은 그 강력한 기능을 이해하고 있다고 믿습니다.
작업상의 필요로 인해 최근에 urchin.js 코드 사본을 다운로드하여 연구했습니다. 설명이 거의 없고 이름도 이해하기 어렵기 때문입니다. 한 달간 연구한 끝에 코드를 다시 작성했습니다. 모든 사람과 공유할 댓글은 여기에서 삭제됩니다.
=====================================
|---------저자: 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 = 새로운 배열();
/**//*
* browser[0] 브라우저 유형
* browser[1] 브라우저 버전
* browser[2] 브라우저 java가 켜져 있는지 여부 1 on - 1 off
* browser[3] 브라우저 플래시 버전
* 브라우저[4] 브라우저 운영 체제
* 브라우저[5] 브라우저 해상도
* 브라우저[6] 브라우저 색상 깊이
* 브라우저[7] 브라우저 언어
* browser[8] 브라우저 플러그인
*/
var sEn=new Array(); //검색엔진의 이름
var keyWord=new Array(); //키워드 전송 형식
sEn[0]="구글"; keyWord[0]="q";
sEn[1]="야후"; keyWord[1]="p";
sEn[2]="msn"; 키워드[2]="q";
sEn[3]="aol"; keyWord[3]="쿼리";
sEn[4]="라이코스"; keyWord[4]="쿼리";
sEn[5]="물어보세요"; keyWord[5]="q";
sEn[6]="알타비스타"; keyWord[6]="q";
sEn[7]="검색"; keyWord[7]="q";
sEn[8]="넷스케이프"; keyWord[8]="쿼리";
sEn[9]="어스링크"; keyWord[9]="q";
sEn[10]="cnn"; keyWord[10]="쿼리";
sEn[11]="looksmart"; keyWord[11]="키";
sEn[12]="정보"; keyWord[12]="용어";
sEn[13]="흥분"; keyWord[13]="qkw";
sEn[14]="엄마"; keyWord[14]="쿼리";
sEn[15]="alltheweb"; 키워드[15]="q";
sEn[16]="기가블래스트"; keyWord[16]="q";
sEn[17]="짜잔"; keyWord[17]="kw";
sEn[18]="virgilio"; keyWord[18]="qs";
sEn[19]="테오마"; keyWord[19]="q";
sEn[20]="바이두"; keyWord[20]="wd";
//테스트 데이터-------------//////////////////// / ////////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost"; keyWord[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는 난수(random number)인데, 구글이 하는 방식이다. 처음에는 왜 난수를 저장해야 하는지 몰랐는데, 나중에 사용자의 고유성을 확인하기 위해 데이터를 분석해 보니 알게 됐다. .
다음은 함수 처리입니다.
//--------------------------------URL 비교, 검색엔진인 경우 키워드 저장--- ----- -----
함수 getKeyword(url)
{
var 호스트 이름;
if(url.indexOf(".") == -1)
{호스트 이름 = URL;}
또 다른
{호스트 이름 = url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(var i = 0; i < sEn.length; i++)
{
if(호스트 이름 == sEn[i])
{
for(var j = 0; j < urp.length; j++)
{
if(urp[j] == 키워드[i])
{
urpv[j]를 반환합니다.
}
}
}
}
반품 "";
}
//URL을 주소로, 페이지 매개변수로, 매개변수 값 매개변수 uri를 페이지 주소로 변환합니다.
함수 gethn(uri)
{
if(!uri || uri == "") return "";
당신 = 우리;
varsub;
//매개변수 포함
if(ur.indexOf("?") != -1)
{
var url = ur.substring(0,ur.indexOf("?"));
var para = ur.substring(ur.indexOf("?")+1,ur.length);
while(para.length > 0)
{
if(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);
배열카운트++;
}
반환 URL;
}
또 다른
당신을 돌려 보내십시오;
}
//----------도메인 이름 얻기---------- ------- ---------------
함수 getHostName(url)
{
url = url.substring(url.indexOf('://')+3,url.length);
url = url.substring(0,url.indexOf("/"));
반환 URL;
}
//----------플래시 버전 받기---------- ------- -------------
함수 getFlash() {
var f="-1",n=네비게이터;
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('충격파 플래시')[1];
부서지다;
}
}
} else if (window.ActiveXObject) {
(var ii=10;ii>=2;ii--) {
노력하다 {
var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
if (fl) { f=ii + '.0' };
}
잡기(e) {}
}
}
if(f == "-1")
f를 반환;
또 다른
return f.substring(0,f.indexOf(".")+2);
}
//---------------비동기 전송 설정------ ------------------
함수 createXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
새로운 XMLHttpRequest()를 반환합니다.
}
그렇지 않은 경우(window.ActiveXObject)
{
새로운 ActiveXObject("Microsoft.XMLHttp")를 반환합니다.
}
} 위의 방법은 몇 가지 기본 정보를 얻을 수 있지만 핵심 문제는 사용자 쿠키 설정, 재방문 확인, 마지막 방문 시간 확인 및 GUID 설정하는 것입니다. Google이 합니다... 그래서 저는 몇 가지 어리석은 방법을 생각해 냈습니다. 코드를 참조하세요.
//브라우저 기능 정보
함수브라우저정보()
{
브라우저[0] = navigator.appName;
brower[7] = navigator.언어;
if(brower[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.언어;
}
else if(brower[0] == "Microsoft Internet Explorer")
{
brower[1] = navigator.userAgent.split(";")[1];
brower[7] = navigator.userLanguage;
}
brower[2] = navigator.javaEnabled()?1:-1;
브라우저[3] = getFlash();
브라우저[4] = getOS();
if (self.screen) {
sr=화면.너비+"x"+화면.높이;
sc=screen.colorDepth+"-비트";
}
그렇지 않은 경우(self.java)
{
var j=java.awt.Toolkit.getDefaultToolkit();
var s=j.getScreenSize();
sr=s.너비+"x"+s.높이;
}
//해결
브라우저[5] = sr;
//색심도
브라우저[6] = sc;
//플러그인 목록
브라우저[8] = getPlugin();
}
//------------현재 주소 가져오기--------- - --------
함수 getHref()
{
document.location.href를 반환합니다.
}
//------------쿠키 작업 시작--------- ------------------------------------- -------------------
함수 setCookie(이름, 값)
//쿠키 값 설정
{
var expdate = new Date();
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var 만료 = 15768000;
var 경로 = (argc > 3) argv[3] : null;
var 도메인 = (argc > 4) argv[4] : null;
var secure = (argc > 5) ? argv[5] : false
;
{
//만료시간을 24시간으로 설정
expdate.setTime(uexp);
document.cookie = 이름 + "=" + 이스케이프 (값) +((expires == null) ? "" : ("; 만료="+ expdate.toGMTString()))
+ ((경로 == null) ? "" : ("; path=" + 경로)) +((도메인 == null) ? "" : ("; domain=" + 도메인))
+ ((secure == true) ? "; secure=" : "");
}
}
함수 delCookie(이름)
//쿠키 삭제
{
var exp = 새로운 날짜();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(이름);
document.cookie = 이름 + "=" + cval + "; 만료="+ exp.toGMTString();
}
//쿠키 값을 가져옵니다.
함수 getCookie(fname)
{
변수 이름, 값;
var 쿠키 = 새로운 객체();
var 시작, 중간, 끝
= 0;
while(시작 < document.cookie.length)
{
middle = document.cookie.indexOf("=",beginning);
end = document.cookie.indexOf(";",beginning);
if(end == -1)
{
끝 = document.cookie.length;
}
if((중간 > 끝) || (중간 == -1))
{
이름 = document.cookie.substring(시작,끝);
값 = "";
}
또 다른
{
이름 = document.cookie.substring(시작,중간);
value = document.cookie.substring(middle+1,end);
}
if(이름 == f이름)
{
이스케이프 해제(값)을 반환합니다.
}
시작 = 끝 + 2;
}
}
//------GUID의 쿠키가 존재하는지 확인하기---------------------- - ---------------
함수 getCookieValue()
{
var guid = getCookie("GUID");
if(안내 != null)
{
반환 가이드;
}
또 다른
{
"noCookie"를 반환합니다.
}
}
//---------등록된 사용자 쿠키 가져오기--------- ----------
함수 getRegUserCookie()
{
반품 ;
}
//----------------쿠키 작업 완료---------------- ------------------------------------- ----------------
//------ --------운영 체제 받기------------ - -
함수 getOS()
{
var OSlist = new Array();
var OSName = 새로운 배열();
OSlist[0] = "Windows4.0"; OSName[0] = "윈도우 95";
OSlist[1] = "윈도우 98"; OSName[1] = "윈도우 98";
OSlist[2] = "윈도우 NT 5.0"; OSName[2] = "윈도우 2000";
OSlist[3] = "윈도우 NT 5.1"; OSName[3] = "윈도우 XP";
OSlist[4] = "윈도우 NT 5.2"; OSName[4] = "윈도우 서버 2003";
var ua = navigator.userAgent.split(";");
for(var i = 0; i < OSlist.length; i++)
{
if(ua[2] == OSlist[i])
OS이름[i]를 반환합니다.
}
ua[2]를 반환합니다;
}
//플러그인 얻기
함수 getPlugin()
{
var 플러그인 = "";
var ua = navigator.userAgent.split(";");
if(ua.length < 4)
반품 "";
for(var i = 4; i < ua.length; i++)
{
플러그인 += ua[i] + ",";
}
반환 플러그인.하위 문자열(0,플러그인.길이-2);
}
설명해야 할 것 중 하나는 GetResidentTime 함수입니다. Google은 정보를 수신하고 처리하는 페이지를 로드하기 위해 img.load 메소드를 사용합니다. 접미사가 .gif 또는 기타 형식인 파일을 컴파일하고 실행하려면 서버 측을 구성해야 합니다. aspx 사용을 선택합니다. 원래는 xmlHttp 비동기 호출을 사용하려고 했으나 때로는 페이지가 종료될 때 실행되지 않기 때문에 코드는 다음과 같습니다.
{
pageClose = 새로운 날짜();
분 = (pageClose.getMinutes() - pageOpen.getMinutes());
if(분 < 0)
{
분 = 분 + 60;
}
초 = (pageClose.getSeconds() - pageOpen.getSeconds());
if(초 < 0){초 += 60;}
시간 = (초 + (분 * 60));
//---------링크 주소 XML 비동기 전송을 수신하도록 여기를 수정합니다--------------- ---- ------
// var xmlHttp = createXMLHttpRequest();
// xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false);
// xmlHttp.send(null);
//------------------사진 형태로 전송------------- ---- --------------------------------- -
if(isReturn() == 거짓)
{
var i = new Image(1,1);
i.src = reqURL + "firstVisit.aspx?" + StrPara() + "&GUID=" + GUID;
i.onload = function() {LoadVoid();}
//페이지에 들어가는 정보
if(getCookieValue("GUID") == "쿠키 없음"){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 언어="javascript" type="text/javascript" src=server address+path+"statistics.js"> </script>를 사용하여 전체 코드를 첨부해주세요. http://blacksoul.cnblogs.com/archive/2006/05/19/404563.html