
Katsu Don at Donburi Ya / CanadaPenguin
ある時、少年は思いました。
「一番美味しいどんぶりって何だろう?」
少年はリュックを手に取り、旅に出るのであった・・・・・
そんな訳で、今回はアクセス解析・サイト分析などに有用な「クリックカウントを取る方法の一つ」をメモしておきます。
ワードサラダなのか!?と言わんばかり意味不明な文章でスタートしましたが、それはそれ、これはこれ、ということで。
方法1:リンク先をプログラムにしてリダイレクトを行う
簡単に思いつく方法はこれですが、カウントを取るリンクを増やす度にプログラム書き換える(データを追加する)必要がある、というのはいただけない。
という事で、もうちょっとスマートな方法を模索。
方法2:aタグのhrefはそのままに、onclickイベントで同期処理を行う
今の所これが現実的にやりやすい方法かな、と思います。
例えば、
<a href="hoge.html" onclick="Clickcount.set('hoge');">hogeへのリンク</a>
とやって、javascript(jQuery使用)側で、
var Clickcount = {
set : function(id){
$.ajax({
type: "GET",
url: "clickcount.php",
data: "id="+id,
async: false
});
return true;
}
};
とかやってあげる。
async=false が肝。
これで同期通信となり、ajaxの利点である非同期通信をやめちゃう。
そうすることでPHP側の処理が終わってからjavascriptの処理が続行することになります。
clickcount.php側では、
<?php
// jQueryのajaxの場合、X-Requested-WithにもれなくXMLHttpRequestが入っているので、これとHTTP_HOSTで不正アクセスを弾く
if($_SERVER['HTTP_X_REQUESTED_WITH']!='XMLHttpRequest' || $_SERVER['HTTP_HOST']!='www.chin3.net'){
die('Illegal access.');
}
// 以下の例では、渡されたidの値を元にCSVファイル(idとカウントのカンマ区切り)のカウントを増やすという超単純処理。
$data = file("clickcount.log");
$flag = 0;
for($i=0; $i<count($data); $i++){
$data[$i] = preg_replace('/\r|\n/', '', $data[$i]);
$row = explode(',', $data[$i]);
if($row[0]==$_GET['id']){
$data[$i] = $row[0].','.++$row[1];
$flag = 1;
}
}
if($flag==0){
// 存在しないidなので追加する
$data[] = $_GET['id'].',1';
}
file_put_contents("clickcount.log", implode("\n", $data));
なんてやってあげると、後はカウントを取りたいaタグにonclickを追加するだけです。
サンプル
まあ、上記の例だと単純なカウント数しか取れないので、日ごと月ごとにlogファイルを変えるとかすれば、もう少し実用的になるかと思います。
そして少年は思いました。
「カツ丼や親子丼とかメジャーなどんぶりは確かに凄い。凄いが、もうちょっと油麩丼が注目されても良いんじゃないだろうか?」
今日もどんぶりは旨かった・・・・・(完)