Счётчик кликов на AJAX + PHP

27.01.2010

Счётчик кликов на AJAX + PHP

В общем понадобилось мне сделать такую штуку #8211; повесить на доры баннер и определить его CTR. Т.к. количество уников я уже знал, ибо стоял piwik, мне нужно было определить, сколько кликают на баннер. Это можно было легко определить, после клика на баннер будет идти переход на страницу, где тоже стоит счетчик, но у меня была немного другая задача #8211; перехода не должно было быть.

То есть все должно было быть на JS + запись кол-ва кликов на определенный блок

div class=banner/div

Решение начал реализовывать на AJAX, потому что ничего умнее мне в голову не пришло. Итак, собственно само решение:

Создаём отдельный JS либо вставляем в HTML следующий код

script type=text/javascript

function doclick() {

var http_request = false;

if (window.XMLHttpRequest) { // Mozilla, Safari, …

http_request = new XMLHttpRequest();

if (http_request.overrideMimeType) {

http_request.overrideMimeType(‘text/xml’);}

}

else if (window.ActiveXObject) { // IE

try {http_request = new ActiveXObject(Msxml2.XMLHTTP);}

catch (e) {

try {http_request = new ActiveXObject(Microsoft.XMLHTTP);}

catch (e) {}

}

}

if (!http_request) {return false;}

http_request.onreadystatechange = function() { alertContents(http_request); };

http_request.open(‘GET’, ‘http://your-domain/click.php?go=yes‘, true);

http_request.send();

function alertContents(http_request) {

if (http_request.readyState == 4) {

if (http_request.status == 200) {

document.GetElementById(‘flag‘).innerHTML = bDone!/b;

}

}

}

}

/script

Суть проста #8211; создается функция doclick(), при вызове которой идет запрос на страницу http://your-domain/click.php?go=yes. В случае удачного ответа устанавливается определенное значение для блока с id=flag. Ну это по желанию. Если не нужно узнавать ответа запроса, просто удалите функцию alertContents().

Далее, создаём простейший обработчик на PHP. Ничего сложного, код в пару строк

?php

if ($_GET[‘go’]==’yes’){

$file = fopen(‘clicks.txt’,’a+’);

fwrite($file,$_SERVER[‘REMOTE_ADDR’]. — .date(H:i:s).\n);

fclose($file);

}

?

Всё. На папку, где находится файл clicks.txt ставим права 777 и радуемся #8211; каждый клик по баннеру будет записываться в этот файлик в формате:

74.120.13.132 #8211; 06:50:47

75.66.200.239 #8211; 06:51:01

75.66.200.239 #8211; 06:51:04

50.14.224.29 #8211; 07:33:21

50.14.224.29 #8211; 07:33:24

74.177.171.179 #8211; 07:37:36

Этого вполне хватит, чтобы палить клики, и, главное, без перехода на страницу. Всё происходит в фоновом режиме. Но всё таки советую поставить какое то событие, после клика. Иначе если юзер кликнет и ничего не произойдет #8211; он подумает, что не правильно кликнул или что то не работает и будет кликать повторно. Я вообще сделал так:

    function alertContents(http_request) {

if (http_request.readyState == 4) {

if (http_request.status == 200) {

alert(‘Hello!’);

}

}

}

Ну и всё. Юзер кликнул, увидел сообщение, закрыл и пошел дальше.

Теперь самое решение на html:

a href=#click onclick=doclick()img src=button.png //a

[…]

div id=flag/div

Итог: юзер кликает на картинку button.png, совершается событие onclick, вызывающее функцию doclick(), та в свою очередь вызывает файл на сервере, он записываетв файл IP и дату клика, возвращает http 200и функция устанавливает флаг (либо выходит алерт). Во так

Ну и в догонку, как просчитать CTR, если кто то тоже захочет поэкспериментировать #8211; Кол-во показов / Кол-во кликов * 100%. Показы берём из счетчика, клики #8211; колво строк в нашем файле. Узнать частотность кликов можно, поделив 100 на полученный CTR.

Ну все это сделано для анализа каких то экспериментов.

Возможно кому то помог