アクセス解析でリファラ取得(久々のアクセス解析ネタ)

2006/12/02 | アクセス解析

久々のアクセス解析ネタ。といっても目的はアクセス解析ソフトではない。
自分のサイトを訪れてくれる人がどういったキーワードで検索してきたか調べて、動的にコンテンツを入れ替える手法を実現することが目的。
いまやアクセス解析といえばGoogle Analytics。普通にアクセス解析するならこれにまさるものはないだろう。なんといってももともと商用利用されていたものをGoogleが買収して無償で提供しているのだから。しかし超多機能なためどこから手をつけていいのか迷うのは事実だ。
あと一般によく使われているのは忍。ウェブを見て小さい手裏剣のアイコンがくるくるまわっているのを見たことがある人も多いだろう。こちらはもっとお手軽で初心者でも使いやすい。
余談はさておき、これらのアクセス解析ツールはJavaScriptのコードを埋め込んで解析を実施する。これによりリファラ(ウェブサイトの参照元)取得を実現できるからだ。リファラを取得できるということは、検索で使用されたキーワードを取得できるということになる。
JavaScriptでは以下のコードでリファラを取得できる。

var ref=document.referrer;

これをPHPに渡せばよい。具体的にはこんな感じ。

<script type="text/javascript">
document.write("<script type=’text¥/javascript’ src=’logging.js?ref=" + document.referrer + "’><¥/script>");
</script>

何をやっているかというと、JavaScriptからJavaScriptを呼び出すコードを書いている。しかし実際呼び出しているlogging.jsは単なるJavaScriptではなくPHPで記述することになる(拡張子jsでphpが動作するように設定しておく必要あり)。ここは拡張子phpのファイルを呼び出してもいい。要はphpで必要な処理をしてJavaScriptを出力しておくようなコードを書くわけだ(ちなみに忍はここで広告を表示するJavaScriptを書いている)。

結局上記のコードでは$_GET[‘ref’]にリファラが入ることになるが、このままでは実はNG。php内で処理する際には勝手にキーワードが日本語に変換されているからだ。一見便利そうだが、後で処理に手間取ることになる。
よって検索結果のURLのごとく%AB%6C・・・といったURLのまま取得したいわけだが、JavaScriptからphpに渡す際にエンコードして渡せばいい。
具体的には、document.referrerで渡しているところを以下のように、
escape(document.referrer)
として渡せばよい(escapeはJavaScriptのURLエンコード関数)。なおここでエンコードしたからといって、うっかり受け取り側のphpプログラムでデコードしてはいけない。元の木阿弥だ。受け取ったリファラのURLから必要な部分のみ取り出して、そこだけをデコードする。これでキーワードの取得が容易になる(はず)。

いつかはアクセス解析プログラムに手を出したい(暇になれば・・・)。

アクセス解析プログラムを作る(その2)

2006/04/30 | アクセス解析

(その1)で作ったJavaScriptから呼び出されるanalyze.jsはこんな感じ。ここでJavaScriptで取得できうるすべてのデータを次のJavaScriptに渡す。もちろん呼び出し元のuserやtypeも次へ引き渡す。引渡し先は純粋なJavaScriptではなくプログラム。

var argObject=new Object;
argObject[‘url’]=escape(window.location);
argObject[‘ref’]=escape(document.referrer);
argObject[‘os’]=window.navigator.platform;
argObject[‘appname’]=window.navigator.appName;
argObject[‘appversion’]=window.navigator.appVersion;
argObject[‘useragent’]=window.navigator.userAgent;
argObject[‘color’]=window.screen.colorDepth;
argObject[‘screen’]=window.screen.width + ‘x’ + window.screen.height;
argObject[‘cookie’]=window.navigator.cookieEnabled;
var argString=”;
for(key in argObject){
argString=argString + key + ‘=’ + argObject[key] + ‘&';
}
if(typeof(user)==’undefined’){
document.write(‘Setup Error’);
}else if(!user.match(/^[a-z0-9]+$/)){
document.write(‘Setup Error’);
}else if(typeof(type)==’undefined’){
document.write(‘Setup Error’);
}else if(!type.match(/^[0-9]$/)){
document.write(‘Setup Error’);
}else{
document.write("<script type=’text/javascript’ src=background.js?user=" + user + "&type=" + type + "&" + argString +"’></script>");
}

アクセス解析プログラムを作る(その1)

2006/04/29 | アクセス解析

車輪の再発明は極力避けるつもりであったけど、諸般の事情で自作することにした。ここでメモを残す。
以下がアクセス解析をしたいページに埋め込むJavaScriptのソース。

<script type="text/javascript">
var user=’username';
var type=’1′;
</script>
<script type="text/javascript" src="analyze.js"></script>

ここでuserには、なんらかのユーザ名などを埋め込むと仮定。typeも同様(オプション項目みたいな感じでプログラムに渡したい変数があれば・・・)。
ただしこれではJavaScriptが有効になっているブラウザでしか読み込むことができないので別途<noscript>タグで囲まれたプログラムの埋め込みは必要。これについては別内容として検討。

また別のプログラム(和製)

2006/04/28 | アクセス解析

また別のアクセス解析プログラムを見つけたのでメモ。
これは和製で結構本格的な予感。
http://fmono.sub.jp/
現在後継バージョンを作成中なのだとか。
デザイン的にも大変美しいので、普通の人が普通にアクセス解析をする場合はこれで十分対応可能。
ただ調べてみたところログはデータベース管理ではなく、ファイルで管理している模様。バージョンアップというのはDB対応か。
これはなかなかいけそうだ。勉強させてもらうことにしよう。

すぐれものかも「apricot.php」

2006/04/27 | アクセス解析

なかなかよさげなアクセス解析プログラムを見つけた。
http://www.lovpop.net/apricot/
ウェブにのってたサンプル画面を見ただけなのだが、必要なものはわりとそろっているような感じ。追加したい項目は所詮解析が必要な部分なので、このスクリプトで検出できなくても問題なし。
なによりファイル1個だけしかないから、スクリプトに目を通しやすい!。きっとこれは使えるはず!。まずはこれで各種項目の検出方法を探っていこうと思う。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net