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 //Web ページのタイトル;
var uexp = pageOpen.getTime() + (1000 * 60 * 60 * 24 * 30); // Cookie の有効期限を設定し、返されるユーザーを制限します。
var rtu = "false" //ユーザーが再びユーザーにアクセスするかどうかを示します
//ブラウザ機能情報;
var brower = 新しい Array();
/**//*
* ブラウザ[0] ブラウザの種類
* ブラウザ[1] ブラウザのバージョン
*brower[2] ブラウザ Java がオンになっているかどうか 1 オン - 1 オフ
* ブラウザ[3] ブラウザのフラッシュ版
* ブラウザ[4] ブラウザ オペレーティング システム
* ブラウザ[5] ブラウザ解像度
* ブラウザ[6] ブラウザの色深度
* ブラウザ[7] ブラウザ言語
* browser[8] ブラウザプラグイン
*/
var sEn=new Array(); //検索エンジンの名前
var keyWord=new Array(); //キーワード送信フォーム
sEn[0]="グーグル";
sEn[1]="yahoo";
sEn[2]="msn"; キーワード[2]="q";
sEn[3]="aol"; キーワード[3]="クエリ";
sEn[4]="lycos"; keyWord[4]="クエリ";
sEn[5]="質問";
sEn[6]="アルタビスタ"; キーワード[6]="q";
sEn[7]="検索";
sEn[8] = "ネットスケープ"; キーワード[8] = "クエリ";
sEn[9]="アースリンク";
sEn[10]="cnn"; キーワード[10]="クエリ";
sEn[11]="スマートに見える"; keyWord[11]="キー";
sEn[12]="概要";
sEn[13]="興奮";
sEn[14]="マンマ"; keyWord[14]="クエリ";
sEn[15]="ウェブ全体";
sEn[16]="ギガブラスト";
sEn[17]="出来上がり"; キーワード[17]="kw";
sEn[18]="ヴァージリオ";
sEn[19]="テオマ";
sEn[20]="百度"; キーワード[20]="wd";
//テストデータ--------------------------//////////////////// / ////////////----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="ローカルホスト";
ここでは、いくつかのグローバル数量が定義されています。ここで、 upr と urpv はソース パラメータおよび参照です。たとえば、ソースはhttp://www.google.com/?p=BlackSoul&q=javascriptで、 urp[0]="p" です。 urp[1]="q" は urpv[0]="BlackSoul",urpv[1]="javascript" に対応します。
ただし、最終的な送信では、区切り文字の形式でサーバーに渡されます。
GUID は乱数であり、最初はなぜ乱数を保存する必要があるのか分かりませんでしたが、データを分析してからユーザーの一意性を確認するためにそれを理解しました。 。
関数の処理は次のとおりです。
//--------------------------------URL を比較し、検索エンジンの場合はキーワードを保存します--- ----- -----
関数getキーワード(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] == keyWord[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,sublength);
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を返します;
}
//---------------------------------Flash バージョンを入手する---------- ------------------------
関数 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) {
for (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() を返します。
}
else if (window.ActiveXObject)
{
return new ActiveXObject("Microsoft.XMLHttp");
}
上記のメソッドは、いくつかの基本的な情報を取得できますが、重要な問題は、ユーザーの Cookie を設定し、再訪問を決定し、最終訪問時間を決定し、その GUID を設定する方法です。 Googleはそれをやります...そこで私はいくつかの愚かな方法を思いついたと思いました。コードを参照してください。
//ブラウザの機能情報
functionBrowserInfo()
{
ブラウザ[0] = ナビゲータ.アプリ名;
ブラウザ[7] = ナビゲータ.言語;
if(ブラウザ[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);
ブラウザ[7] = ナビゲータ.言語;
}
else if(ブラウザ[0] == "Microsoft Internet Explorer")
{
brower[1] = navigator.userAgent.split(";")[1];
ブラウザ[7] = navigator.userLanguage;
}
ブラウザ[2] = navigator.javaEnabled()?1:-1;
ブラウザ[3] = getFlash();
ブラウザ[4] = getOS();
if (self.screen) {
sr=画面の幅+「x」+画面の高さ;
sc=screen.colorDepth+"-bit";
}
else if (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 を返します。
}
//--------------------------Cookie 操作の開始---------- -------------------------------------------------- --------------------------------------
function setCookie(name,価値)
//クッキーの値を設定する
{
var expdate = 新しい日付();
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var の期限切れ = 15768000;
var パス = (argc > 3) : null;
var ドメイン = (argc > 4) : null;
var secure = (argc > 5) ? argv[5] : false
;
{
//有効期限を24時間に設定
expdate.setTime(uexp);
document.cookie = 名前 + "= + エスケープ (値) +((expires == null) ? "" : (";expires="+ expdate.toGMTString()))
+ ((パス == null) ? "" : ("; パス=" + パス)) +((ドメイン == null) ? "" : ("; ドメイン=" + ドメイン))
+ ((secure == true) ? "; secure=" : "");
}
関数
delCookie(名前)
//クッキーを削除
{
var exp = 新しい日付();
exp.setTime (exp.getTime() - 1);
var cval = getCookie (名前);
document.cookie = name + "=" + cval + ";expires="+ exp.toGMTString();
}
//Cookieの値を取得する
関数 getCookie(fname)
{
変数名、値;
var クッキー = 新しいオブジェクト();
var 開始、中間、終了
= 0;
while(始まり < document.cookie.length)
{
中央 = document.cookie.indexOf("=,始まり);
end = document.cookie.indexOf(";",begining);
if(end == -1)
{
終了 = document.cookie.length;
}
if((中央 > 最後) || (中央 == -1))
{
名前 = document.cookie.substring(始まり,終わり);
値 = "";
}
それ以外
{
名前 = document.cookie.substring(begin,middle);
値 = document.cookie.substring(middle+1,end);
}
if(名前 == fname)
{
unescape(値)を返します。
}
始まり = 終わり + 2;
}
}
//-----GUIDのCookieが存在するかどうかを取得----------------------- - ---------------
関数 getCookieValue()
{
var guid = getCookie("GUID");
if(guid != null)
{
リターンガイド;
}
それ以外
{
「noCookie」を返します。
}
}
//----------登録ユーザーのCookieを取得--------------------- -----------------------
関数 getRegUserCookie()
{
戻る ;
}
//----------------------------Cookie 操作が完了しました---------------- -------------------------------------------------- ------------------------------------------
//------ ------------------------オペレーティング システムを入手する-------------------------- - -
関数getOS()
{
var OSlist = 新しい Array();
var OSName = 新しい配列();
OSlist[0] = "Windows4.0"; OS名[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 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] + ",";
}
plugin.substring(0,plugin.length-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() == false)
{
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