2009.09.22
Yoshi 開発

自作アクセス解析 Vol.2 [php/javascript アクセス情報取得]

シリーズ化して書こうと思っている自作アクセス解析の今回は2回目になります。

前回はJavaScriptとPHPで取得できるクライアント情報について書きましたが、今回はJavaScriptで取得したものをPHPに非同期で渡して取得値がどのように変わるのかをやってみようと思います。

まず始めに、埋め込むスクリプトを決めてみましょう。

<head>
<script type=”text/javascript” src=”https://{解析専用サーバードメイン}/analysis.js”></script>
</head>

上記のように、スクリプトタグを一つだけ埋め込むことにします。
参照先は、検索エンジンの仕様変更に対応できるように解析専用サーバーを指定します。

これで埋め込むサイトはどこのレンタルサーバーでも自宅サーバーでも、解析専用サーバーのドメインさえ解決できれば取得することが可能になります。

では指定している[analysis.js]の中身を見てみましょう。

document.write(‘<script type=”text/javascript” src=”https://{解析専用サーバードメイン}/analysis.php”></script>’);

実際にはもっと、色々と必要なコードがあるのですが、重要部分はこの一行になります。
phpをjsになりすまして指定しています、では最初からこの一行書けばいいんじゃないか?と思われるかと思いますが、これから行うPHPで取得できるクライアント情報を見ていただければ理由がわかると思います。

それではjsになりすましたphpから取得できる値を表示してみたいと思います。

例:Googleから「ビットスター」と検索しビットスターのWEBサイトのトップ(index.html)を表示

ホスト名 bitstar.jp
ポート番号 2295
リクエストページ /analysis.php
ページを見ている人のIPアドレス 例:133.242.17.62
ページを見ている人のホスト名 例:localhost
言語 ja,en-us
ユーザーエージェント Mozilla/5.0~
リファラ https://bitstar.jp/

基本的には取れていて、問題無いように思えるのですが、あれ?と思うところがあります。
Googleから飛んできているはずなのに、リファラがGoogleになっていません。
よくよく考えればその通りなのですが、このPHPにアクセスしているのはビットスターのWEBサイトのトップ(index.html)なのです。
ですからリファラが取得したいものとは異なります。

もう一点気になるのが、リクエストページです。
アクセスされているページを表示するので、情報としては間違っていないのですがこれも欲しいデータとは異なります。
欲しいデータはスクリプトを埋め込んでいるページの名称ですので、[analysis.php]なんて必要ありません。

あれ?それってどっかで取得していたような・・。
そうです!欲しい値が取れなかったリファラがまさにそれなのです。
ですからリクエストページはリファラから取得することにします。

さて、リファラはどうしましょう・・。
PHPではどうやっても取得することができそうもありません。

というわけで、jsを一枚挟んでGETで渡しましょう。
ここで一枚挟む事にやっと意味が出てきます。

analysis.js

try{
// 取得データ
var __bit_referrer = document.referrer;
var __bit_referrer_domains = __bit_referrer.split(“/”);
var __bit_referrer_domain = “”;
if(__bit_referrer_domains.length > 1) __bit_referrer_domain = __bit_referrer_domains[2];
var __bit_referrer_param = “”;
var __bit_search_key = “”;

// 検索エンジン設定
var __bit_engins = [
{name:’www.google.co.jp’,search:’q’},
{name:’search.yahoo.co.jp’,search:’p’},
{name:’www.bing.com’,search:’q’},
{name:’search.livedoor.com’,search:’q’},
{name:’localhost’,search:’q’}
];

// パラメーター取得
if(__bit_referrer.indexOf(“?”) != -1){
__bit_referrer_param = __bit_referrer.slice(__bit_referrer.indexOf(“?”));
}

if(__bit_referrer_param.length > 1){
// GET情報配列化
var __bit_get = new Object();
var __bit__ret = __bit_referrer_param.substr(1).split(“&”);
for(var i = 0; i < __bit__ret.length; i++) {
var r = __bit__ret[i].split(“=”);
__bit_get[r[0]] = r[1];
}

// 検索エンジンによるキーワード取得
for(__bit_i=0;__bit_i<__bit_engins.length;__bit_i++){
if(__bit_referrer_domain == __bit_engins[__bit_i][‘name’]){
if(__bit_get[__bit_engins[__bit_i][‘search’]] != null){
__bit_search_key = __bit_get[__bit_engins[__bit_i][‘search’]];
break;
}
}
}
}
document.write(‘<script type=”text/javascript” src=”https://{解析専用サーバードメイン}/analysis.php?d=’+__bit_referrer_domain+’&q=’+__bit_search_key+'”></script>’);
}catch(e){}

これで取得できなかったリファラのドメインとキーワードをPHPで取得することが可能になります。

では何が取得することができるようになったのかまとめてみましょう。

・ページ閲覧者のIPアドレス
・ページ閲覧者のHOST名
・どのブラウザを使っているのか。
・どのページにアクセスしているのか。
・どこから来たのか。
・どんなキーワードで来たのか。

これだけあれば、だいたい欲しいものは取れていると思います。
後はPHP側でDBに登録したりする事で、自由に見せることができます。

次回は、下記のように取得したデータをFlexでグラフを表示させるのとページランクの事(取得方法など)をやりたいと思います。


ではまた次回!

Yoshi

一覧に戻る