Счётчик просмотров с AdBlock своими руками

Дата публикации: 01.08.2016

schyotchik-prosmotrov-s-adblock-svoimi-rukamiПриветствую вас, мои уважаемые подписчики и просто случайные посетители 🙂

Сегодня мы с вами косвенно поговорим о популярной нынче теме заработка в Интернете.

Косвенно, потому что мы не будем говорить о том, как заработать в Интернете, а о том, как увеличить доход от существующих сайтов и не лишиться его вовсе.

До сих пор не понимаете, какая связь между счётчиком просмотров с AdBlock и заработком на сайте?

Читайте об этом далее 🙂

Что такое AdBlock?

AdBlock — это плагин для веб-браузеров (Google Chrome, Opera, Mozilla Firefox и т.д.), который блокирует вывод контекстной рекламы на сайтах.

Таким образом, у данного продукта сформировалась как обширная армия его почитателей, так и чуть менее многочисленная армия хейтеров.

Как не сложно догадаться, к любителям AdBlock относится большая половина пользователей Интернет, которых раздражает реклама на сайтах. Соответственно, они с большим удовольствием устанавливают его в свои веб-браузеры.

Таким образом, немного подумав логически, становится ясно, кто же составляет массу ненавистников AdBlock.

Это сами владельцы сайтов, которые размещают на них рекламу с целью заработка, которого AdBlock их роскошно лишает.

Потому как в ситуации, когда пользователь не видит рекламу на сайте, владелец ресурса не получит денег ни за показ её, ни за клики. То есть, ни гроша…

Самое интересное в сложившейся ситуации с AdBlock то, что его фанатом и ненавистником может выступать один и тот же человек, который одновременно является как владельцем сайта, так и рядовым пользователем Интернет.

Потому как он ненавидит навязчивую рекламу на просматриваемых им сайтах, и одновременно терпит убытки от использования данного плагина пользователями его детища. Вот такая дилемма 🙂

Действительно ли AdBlock так полезен для пользователей?

polza-i-vred-adblock-dlya-polzovatelejЛично про себя я могу сказать,что я не являюсь сторонником использования AdBlock, т.к. он не только вредит моему заработку, но и лишает его людей, которые бескорыстно делятся ценной информацией на своих сайтах.

И только не надо меня и других блоггеров уличать в меркантильности. В конце концов, нам же нужно чем-то платить банально за хостинг и регистрацию доменного имени сайта, общая сумма которых составляет от 30 до 200$ в год.

Если говорить конкретно за меня, то почти за год существования данного проекта я заработал на контекстной рекламе около 20$, т.е. сайт идёт мне в убыток, причиной которого как раз и являются любители AdBlock и всего бесплатного.

Реклама — это единственный способ заработка на блогах (не считая платных курсов, семинаров и «методик», которыми лично я не промышляю), поэтому лишать их владельцев заслуженных денег — фактически сродни воровству.

Согласитесь, что нынешнее положение вещей, когда мы можем бесплатно просматривать интересную информацию, благодаря её авторов парой кликов на рекламе, намного приятнее, чем сразу платить деньги за просмотр текста или видео (даже не зная, понравится оно нам или нет).

Поэтому я и не использую AdBlock и прочее ПО, блокирующее рекламу. А также стараюсь всегда сделать парочку кликов на рекламных блоках сайтов в знак благодарности их владельцам за бесплатное предоставление интересного материала. К чему и вас призываю.

К тому же реклама, вопреки сформировавшемуся в обществе мнению о её бесполезности и навязчивости, может содержать весьма интересный материал о проводимых концертах, конференциях и прочих мероприятиях.

http://cccp-blog.com/wp-includes/images/banners/templatemonster/banner_content.jpg

Зачем нужен счётчик показов с AdBlock?

Ввиду сложившейся ситуации владельцы сайтов стараются всячески воспрепятствовать AdBlock отнимать у них заработок.

В списке анти-AdBlock мероприятий значатся следующие:

  1. При попытке просмотра контента сайта пользователями с включённым AdBlock последним вместо содержимого ресурса показывается сообщение об отключении AdBlock или добавлении его в White-list (список сайтов, на которых AdBlock не будет блокировать рекламные блоки).
  2. Подмена блоков контекстной рекламы баннерами партнёрских программ либо других рекламных сетей, которые не скрывает AdBlock. В первую очередь, это касается баннеров Google Adsense и Yandex Direct, которые AdBlock блокирует особенно хорошо.
  3. Различные действия, включающие 10-секундный просмотр рекламного ролика вместо контента, а также методы «шоковой терапии» в виде редиректов на другие сайты, на которых может быть не только действительно навязчивая и вредоносная реклама, но и различные вирусные и шпионские скрипты.

Я конечно понимаю раздражение владельцев сайтов, теряющих деньги из-за AdBlock, и ваше желание поскорее использовать что-то из перечисленного выше, но не спешите. Не всё так просто.

Перед применением AdBlock-стратегий вы должны понимать, что данные меры сильно отразятся, в первую очередь, на поведенческих факторов вашего ресурса, к которым относятся процент отказов и количество просмотренных одним пользователем страниц.

Естественно, что они сильно снизятся из-за редиректов и пользователей, раздражённых сообщениями об отключении AdBlock или внесением сайта в White-list AdBlock.

kak-ustanovit-adblockК тому же, многие посетители, которым AdBlock устанавливали друзья/родственники/коллеги могут и не знать, как осуществляются требуемые вами действия. В итоге, им ничего не остаётся, как уйти с такого сайта и не появляться на нём впредь.

Всё это в перспективе приведёт к понижению позиций вашего сайта в поисковых выдачах вплоть до полного исключения. Если первое грозит вам снижением посещаемости, то второе — это фактически смерть ресурса.

Так что к анти-AdBlock стратегии нужно прибегать максимально взвешенно, всё хорошенько обдумав и осознавая все последствия данного мероприятия.

Как раз для этого и необходим счётчик просмотров сайта пользователями с включённым AdBlock, который покажет вам сколько на вашем сайте таких посетителей.

Следовательно, он поможет вам в принятии судьбоносного для вашего сайта и заработка на нём решения.

Как установить счётчик просмотров с AdBlock на сайт?

Поскольку к заработку с помощью контекстной рекламы прибегают не только блоггеры, но и владельцы других типов сайтов, то необходимо учитывать специфику создания данных ресурсов.

Если ваш сайт создан на основе CMS — вам повезло 🙂

Практически под каждый движок (OpenCart, Joomla, WordPress), независимо от типа сайта, созданного на его базе, существует готовый набор плагинов, среди которых обязательно можно найти как счётчик просмотров с AdBlock, так и инструменты для реализации анти-AdBlock стратегии.

В данном случае всё, что вам потребуется — это скачать подходящее ПО и установить его на свой сайт. В качестве шпаргалки можете воспользоваться статьями по установке модулей/плагинов на различные CMS, которые вы можете найти на данном блоге.

Если же вы избрали другой способ создания сайта, то это не повод отчаиваться, т.к. предлагаемый мною далее вариант счётчика просмотров с AdBlock является универсальным и его можно устанавливать на абсолютно любую платформу.

Главное — иметь доступ к сайту по FTP, а остальное — дело техники 🙂

Универсальный счётчик просмотров с AdBlock своими руками — предыстория

Поскольку данный сайт разработан на базе CMS WordPress, то естественно, первое, что пришло мне в голову — это воспользоваться готовыми плагинами.

Покопавшись в Интернете, я обнаружил два более-менее подходящих для моих задач решения:

1. Ad Blocking Detector — https://wordpress.org/plugins/ad-blocking-detector/

2. BlockAlyzer — Adblock counter — https://es-co.wordpress.org/plugins/blockalyzer-adblock-counter/

http://cccp-blog.com/wp-includes/images/banners/partner_web_studio/banner_728x90.gif

Первый отпугнул меня кучей настроек и созданием шорткодов, с которыми непонятно что делать. В общем, от него я отказался.

BlockAlyzer по сравнению с предыдущим кандидатом обладает достаточно простым интерфейсом, но лично мне он показывал какую-то ерунду.

За 3 дня работы плагина он показал мне 86 просмотров страниц, 0 просмотров с включённым AdBlock (хотя я специально установил его для тестирования) и 3 уникальных пользователя, что не соответствует данным из Google Analytics и LiveInternet.

В итоге,  я тоже от него отказался.

Но, по счастливой случайности в Интернете я наткнулся на статью Thomas Maier, который является разработчиком плагина BlockAlyzer, за которую ему большое спасибо.

В ней он описал способ создания универсального счётчика просмотров сайта с включённым AdBlock, которым я с вами охотно поделюсь далее.

Надеюсь, Томас не обидится, т.к., во-первых, не у всех русскоязычных пользователей всё хорошо с английским, а, во-вторых, код счётчика с небольшими изменениями (если верить статье по ссылке выше) он сам позаимствовал у Jayd Saucedo.

Так что, думаю, никто не обидится, если я донесу их разработки до пользователей Рунета 🙂

Тем более, что я тоже сделал небольшой вклад в общее дело, о чём вы узнаете позже.

Универсальный счётчик просмотров с AdBlock от Jayd Saucedo

Обзор разработок я решил начать с оригинальной, на которой будут основываться все последующие.

В данном варианте счётчик просмотров сайта пользователями с включённым AdBlock состоит из двух файлов со скриптами, подсчитывающими суммарное количество просмотров страниц сайта и сколько из них было с включённым AdBlock.

Скрипт JavaScript adblocks.js:

var ads = "google-block";
var php_url = "";

function createXMLHttpRequest(){
 try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
 try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
 try { return new XMLHttpRequest(); } catch(e) {}
 alert("XMLHttpRequest not supported");
 return null;
}
function recordBlock(b){
 xmlPost = createXMLHttpRequest();
 xmlPost.open( "GET", php_url+"adblocks.php?b="+b, true );
 xmlPost.setRequestHeader("X-Requested-With", "XMLHttpRequest");
 xmlPost.send( null );
}
onload=function(){

if (document.getElementsByClassName == undefined) {
 document.getElementsByClassName = function(className)
 {
 var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
 var allElements = document.getElementsByTagName("*");
 var results = [];

var element;
 for (var i = 0; (element = allElements[i]) != null; i++) {
 var elementClass = element.className;
 if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
 results.push(element);
 }

return results;
 }
 }

blocked = 0;
 var ad_nodes = document.getElementsByClassName(ads);
 for(i in ad_nodes){

 if (ad_nodes[i].offsetHeight == 0){
 blocked = 1;
 }
 }

 recordBlock(blocked);
}

Скрипт PHP adbclocks.php:


<?php

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest"){
 $blocked = $_GET['b'] == 1 ? 1 : 0;

 $file = explode('-',file_get_contents('adblocks.txt'));
 $impressions = $file[0];
 $blocks = $file[1];

 $impressions++;
 $blocks += $blocked;

 file_put_contents('adblocks.txt', $impressions.'-'.$blocks);
}

Идея работы счётчика весьма проста: JavaScript-скрипт проверяет размер блока, в котором находится рекламный баннер.

Если высота блока равна 0, то блок не загрузился, следовательно, AdBlock при просмотре данной страницы пользователем был включен.

Если же высота рекламного блока отлична от 0, то блок загрузился, значит, AdBlock был выключен.

После этого JavaScript отправляет HTTP-запрос к серверу, который разбирается на сервере PHP-скриптом.

После разбора запроса создаётся файл (если его до этого не было) под названием adblocks.txt, который будет выполнять роль логов счётчика AdBlock.

В него будут записываться данные в следующем формате:


0-0

Первая цифра — это общее число просмотров страниц сайта, а вторая — это число просмотров с включённым AdBlock.

Если файл логов уже был, то при каждом обращении к сайту количество просмотров будет из него прочитано и увеличено на 1 в зависимости от включённого AdBlock у клиентов.

Исходя из принципа работы данного счётчика, ваши рекламные баннеры на сайте должны находиться внутри пустых контейнеров с общим css-классом, по размеру которого и будет определяться наличие включённого AdBlock в браузерах ваших посетителей.

Например:


<div class="google-adv">

<!--Рекламный блок-->

</div>

Как вы понимаете, контейнер может быть не только в виде div-элемента, но иметь и другой тип на ваше усмотрение (span, table и др.).

Теперь поговорим о процессе установки данного варианте счётчика к себе на сайт.

1. Скопируйте оба файла скриптов на сайт через FTP-соединение (например, с помощью FileZilla). Можете разместить их как в отдельном каталоге, так и в корневой директории сайта.

2. В файле adblocks.js в первой строке присвойте переменной ads значение класса контейнеров, в которых располагается рекламный блок, прописав название класса между кавычек.

3. В файле adblocks.js на второй строке переменной php_url пропишите значение пути к файлу adblocks.php без указания имени файла. Т.е. при копировании файла в корневую директорию сайта запись должна быть в формате:


var php_url = "http://имя_сайта/";

4. По умолчанию файл логов будет называться adblocks.txt. Вы можете поменять его имя, а также прописать ему другой путь (по умолчанию предполагается, что он будет находиться в одной директории с adblocks.php).

Для этого нужно в файле adblocks.php поменять встречающиеся строки «adblocks.txt» поменять на свои значения, дописав при необходимости полный или относительный путь к этому файлу.

5. Подключите файл adblock.js перед закрывающим тегом </head> в заголовке сайта, прописав следующее:


<script type="text/javascript" src="путь_к_скрипту/adblocks.js"></script>

Если вы скопировали файл в корневую директорию сайта, то в качестве значения атрибута src нужно прописать «http://имя_сайта/adblocks.js».

Для этого, кстати, можете воспользоваться функциями API вашего движка. Например, если у вас, как и у меня, сайт на WordPress, то подключать файл можно следующим способом:


<script type="text/javascript" src="<?php echo get_site_url(); ?>/adblocks.js"</script>

Если вы всё сделали правильно, то после очередного визита на сайт вами или другими пользователями значение счётчика в adblocks.txt увеличится на 1.

Просмотреть файл логов можно как скачав файл на компьютер, так и открыв его в браузере, прописав путь к нему в формате «http://имя_сайта/…/adblocks.txt».

Также хочу сказать сказать, что данный вариант счётчика фиксирует не только наличие включённого AdBlock на компьютерах пользователей вашего сайта, но и другого ПО, целью которого является блокировка рекламных баннеров (AdBlock Plus, антивирусные программы и др.).

В частности, его работу я тестировал на компьютере с включённым Kaspersky Internet Security. Счётчик со своей задачей справился, количество просмотров сайта пользователем с блокирующим ПО было увеличено на 1.

Универсальный счётчик просмотров с AdBlock от Thomas Maier

Разработчик данного варианта счётчика решил использовать другой метод определения включённого AdBlock на компьютерах пользователей сайта.

Вместо проверки размера контейнера рекламного блока Thomas предлагает разместить на сайте файл с «подозрительным» именем (в названии файла должны быть слова «block», «adv», «advertisement» и т.д.), который AdBlock должен заблокировать.

А затем проверять, загрузился ли этот файл или нет.

В качестве файла может выступать какой-то графический файл.

Thomas предлагает использовать файл banner.gif размером 1х1 и прозрачным фоном (видимо для минимизации размера и занимаемого дискового пространства), обёрнутый в контейнер с уникальным идентификатором, размер которого будет потом проверяться.

В данном подходе способ определения AdBlock такой же, как и у предыдущего варианта счётчика.

Также можно использовать js-файл с переменной, значение которой потом будет проверяться.

Последний вариант Томас использовал в своём варианте универсального счётчика просмотров сайта с включённым AdBlock. Таким образом, его решение состоит из 3 файлов.

Файл advertisement.js, который специально имеет такое «подозрительное» название для блокировки его с помощью AdBlock:


var adblockJsFile = true;

Файл adblocks.js, содержимое которое отличается от аналогичного файла предыдущего варианта лишь характером проверки включённого AdBlock:


var php_url = "";

function adblockCreateXMLHttpRequest(){
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {}
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
try {
return new XMLHttpRequest();
} catch(e) {}
alert("XMLHttpRequest not supported");
return null;
}

function adblockRecordBlock(b){
xmlPost = adblockCreateXMLHttpRequest();
xmlPost.open( "GET", php_url+"adblocks.php?b="+b, true );
xmlPost.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xmlPost.send( null );
}

onload=function(){
blocked = 0;
if ( typeof adblockJsFile == 'undefined' ) {
blocked = 1;
}

adblockRecordBlock(blocked);
}

И PHP-файл adblocks.php:


<?php

error_reporting(E_ALL);

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest") {
$blocked = $_GET['b'] == 1 ? 1 : 0;

if (file_exists('adblocks.txt') && $file = explode('-', file_get_contents('adblocks.txt'))) {
$impressions = $file[0];
$blocks = $file[1];

$impressions++;
$blocks += $blocked;
$percentage = round((($blocks / $impressions) * 100), 2);
$reset = trim($file[3]);

file_put_contents('adblocks.txt', $impressions . '-' . $blocks . ' - (' . $percentage . '%) - ' . $reset);
} else {
$reset = sprintf('started: %s', date('Y/m/d G:i'));
$percentage = round((($blocked / 1) * 100), 2);
file_put_contents('adblocks.txt', 1 . '-' . $blocked . ' - (' . $percentage . '%) - ' . $reset);
}
}

Томас, как вы можете заметить, также решил немного модернизировать PHP-скрипт, который формирует логи счётчика AdBlock, добавив в него дату создания файла, она же дата начала отсчёта, и процентное значение просмотров сайта с AdBlock от общего числа просмотров.

Таким образом, запись в файле логов будет иметь следующий вид:


62-15 - (24.59%) - started: 2016/07/23 17:49

Порядок установки данного варианта счётчика будет слегка отличаться от предыдущего варианта. Я напишу только отличия в процедурах установки. Если на каком-то конкретном шаге будет что-то неясно — за объяснениями обращайтесь к процедуре установки счётчика от Jayd Saucedo.

1. Скопируйте все три файла скриптов (advertisement.js, adblock.js, adblocks.php) на сайт через FTP-соединение

2. В файле adblocks.js переменной php_url пропишите значение пути к файлу adblocks.php без указания имени файла.

3. При желании, пропишите в файле adblocks.php своё имя файла логов и путь к нему по той же процедуре, что и для предыдущего варианта варианта счётчика просмотров с AdBlock.

4. Подключите файл advertisement.js перед закрывающим тегом </head> в заголовке сайта. Если ваш сайт, как и мой, разработан на базе CMS WordPress, то вам необходимо будет искать данный тег в header.php, который доступен в редакторе кода в админке по адресу «Внешний вид — Редактор».

5. Подключите файл adblock.js перед закрывающим тегом </body> в самом конце сайта. В WordPress ищите его в footer.php.

По мнению Томаса, данный способ определения AdBlock является более универсальным, чем оборачивание рекламных баннеров в контейнеры с одинаковыми классами.

Поэтому он может подойти людям, которые не могут просто так обернуть рекламные блоки в контейнеры или их высота никогда не будет равна 0 ввиду различных css-свойств.

Должен сказать, что достаточно спорное утверждение 🙂

Данный механизм определения включённого AdBlock Томас положил в основу своего плагина BlockAlyzer, об опыте общения с которым я и писал ранее.

Поэтому о точности данного подхода можно поспорить.

К тому же, лично у меня на компьютере, вариант счётчика AdBlock от Tomas Maier никак не прореагировал на блокировку рекламного блока с помощью Kaspersky Internet Security, что ставит универсальность данного решения под сомнение.

Скорее всего дело было в том, что Касперский не блокирует js-файл, не считая его название «подозрительным», как AdBlock.

Кроме того, если ваш сайт основан на CMS WordPress и каким-то образом у вас имеется установленный плагин BlockAlyzer, то перед установкой данного варианта счётчика просмотров с AdBlock обязательно удалите его!

Иначе вы будете вынуждены потратить немало времени, выясняя причину неисправности предлагаемого мною кода, как это было со мной 🙂

Вообще, если при использовании любого из приведённых вариантов счётчика, после правильной установки количество цифр просмотров в файле лога не меняется — откройте Инструменты Разработчика вашего браузера и обратите внимание на ошибки во вкладке «Console (Консоль)».

oshibki-pri-ustanovke-schyotchika-adblock-na-sajtО том, что такое Инструменты разработчика, как их включить и использовать вы можете прочитать в статье о самостоятельном изменении интерфейса сайта.

Возвращаясь к критике данного варианта счётчика с AdBlock от Thomas Maier, следует сказать, что он сильно проигрывает разработке Jayd Saucedo в точности определения итоговой цифры просмотров сайта с включённым AdBlock.

Но идея расширенной статистики, которая присутствует у Томаса, лично мне понравилась, поэтому я решил её развить.

И вот, что у меня из этого получилось…

Универсальный счётчик просмотров с AdBlock от Pashaster

Для своего варианта счётчика просмотров сайта с AdBlock я решил взять самое лучшее из двух предыдущих наработок: универсальность определения блокираторов рекламных блоков в браузерах пользователей и расширенную статистику по просмотрам сайта.

В итоге, мой вариант счётчика, как и решение от Jayd Saucedo, состоит из файлов adblocks.php и adblocks.js.

При этом, adblocks.js я взял без изменений, т.к. мои правки не касались механизма определения включённого AdBlock.

А вот adblocks.php  серьёзно переработал, чтобы сделать вывод статистики в логе просмотров сайта в следующем виде:

219-74 - (33.79%) - started: 26.07.2016
257-78 - (30.35%) - started: 25.07.2016
112-63 - (56.25%) - started: 24.07.2016

Total: 588-215 - (36.56%)

Я решил, помимо суммарного числа просмотров сайта с включённым AdBlock и без него, сделать ещё и запись показаний по дням для большей детализации.

Возможно, необходимость данной модифицикации чисто субъективна, но она позволяет из счётчика, который банально выдаёт количество просмотров сайта, сделать полноценный инструмент аналитики для дальнейшего формирования отчётов.

К примеру, записи подобного формата помогают лично мне составлять подлинную картину просмотров, без учёта дней, когда я проводил тестирование, преднамеренно увеличивая количество показов сайта с включённым AdBlock.

Также для хранения имени файла логов я решил завести отдельную переменную, чтобы не бегать по коду и не прописывать вместо «adblocks.txt» своё значение в каждом случае его использования.

Для этого, если вы захотите изменить имя файла логов или путь к нему, вам достаточно будет всего лишь задать своё значение переменной $file_path в самом начале файла.

Вот, собственно, говоря, код файла adblocks.php, фрагменты из которого вы смело можете использовать при решении своих аналогичных задач:


<php

error_reporting(E_ALL);
$file_path = 'adblock_log';

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest") {
$blocked = $_GET['b'] == 1 ? 1 : 0;

//проверяем, есть ли файл для записи логов
if (file_exists($file_path))
{
//если файл логов есть - считываем его в массив
$file = file($file_path);
$file_content = array();

//перебираем массив строк файла и формируем новый массив
//для записи изменённых строк в файл
for ($i = 0; $i < count($file); $i++)
{
//данные из первой строки разбираем
if($i == 0 && $strs = explode('-', $file[$i]))
{
$reset = trim($strs[3]);
$reset_strs = explode(' ', $reset);

//проверяем, за какое число последняя запись в файле
if(!empty($reset_strs) && date('d.m.Y') > $reset_strs[1])
{
//если последняя запись - вчерашняя, создаём новую запись для сегодняшнего числа
$reset = sprintf('started: %s', date('d.m.Y'));
$percentage = round((($blocked / 1) * 100), 2);

$file_content[$i] = 1 . '-' . $blocked . ' - (' . $percentage . '%) - ' . $reset;
$file_content[$i+1] = $file[$i];

$counter = 1;
}
else
{
//если сегодняшняя запись уже есть - просто увеличиваем количество просмотров
$views = $strs[0] + 1;
$block_views = $strs[1] + $blocked;
$percentage = round((($block_views / $views) * 100), 2);

$reset = sprintf('started: %s', date('d.m.Y'));

$file_content[$i] = $views . '-' . $block_views . ' - (' . $percentage . '%) - ' . $reset;

$counter= 0;
}
}
elseif ($i == count($file)-1 && $total_strs = explode(' ', $file[$i]))
{
//для последней записи в файле, отвечающей за суммарное количество просмотров,
//увеличиваем количество просмотров
if($total_strs[0] == 'Total:' && !empty($total_strs[1]))
{
$strs3 = explode('-', $total_strs[1]);

$views = $strs3[0] + 1;
$block_views = $strs3[1] + $blocked;
$percentage = round((($block_views / $views) * 100), 2);

$file_content[$i + $counter] = 'Total: ' . $views . '-' . $block_views . ' - (' . $percentage . '%)';
}
}
elseif(!empty($strs)) $file_content[$i + $counter] = $file[$i]; //все остальные записи из лога переносим в итоговый массив
}

//если наш файл логов не пустой
if(!empty($file_content))
{
$log_file = fopen($file_path, 'r+'); //открываем существующий файл логов для записи и чтения
ftruncate($log_file, 0); //очищаем его

//заносим в файл построчно записи с учётом изменения количества записей и информации о просмотрах
foreach($file_content as $str_id => $string)
{
if ($str_id != count($file_content) -1) $string = trim($string) . PHP_EOL;
fwrite($log_file, $string);
}

//закрываем файл и удаляем массивы для освобождения ресурсов на сервере
fclose($log_file);
unset($file_content, $file);
}
}
else
{
//если файл логов не был найден, то создаём его и
//записываем в него данные о первом просмотре за сегодня
$reset = sprintf('started: %s', date('d.m.Y'));
$percentage = round((($blocked / 1) * 100), 2);

file_put_contents($file_path, 1 . '-' . $blocked . ' - (' . $percentage . '%) - ' . $reset . PHP_EOL . PHP_EOL . 'Total: 1-0 - (0%)');
}
}

Процесс установки моего варианта универсального счётчика просмотров с AdBlock такой же, как и для решения от Jayd Saucedo.

Поэтому, если вы хотите воспользоваться моим вариантом счётчика, то вам необходимо будет установить оригинальный по инструкциям, изложенным ранее, а затем всего лишь ввести в файл adblocks.php код, приведённый выше.

Таким образом, в итоге у нас получился универсальный счётчик просмотров с AdBlock, который не привязан к какой-либо платформе или способу создания сайта, а также позволяет получить развёрнутые сведения о количестве просмотров сайта как с включённым AdBlock и прочим блокирующим рекламный контент ПО, так и без него.

Что касается дальнейших действий — как уже и говорилось, после сбора статистики об использовании пользователями сайта AdBlock, необходимо будет избрать комплекс анти-AdBlock мер.

Поэтому в течении месяца я буду собирать и обрабатывать статистические данные, после чего поделюсь с вами развёрнутым списком мероприятий по борьбе с «жадными» посетителями, а также, на чём именно я решил остановиться.

Надеюсь, материал был вам полезен. Ещё раз хочется выразить благодарность Jayd Saucedo и Thomas Maier за их труд и примеры кода, которыми они безвозмездно поделились (за пару моих кликов на их рекламках, естественно).

Пишите ваши мнения и отзывы в комментариях — мне интересно любое ваше мнение.

В качестве благодарности мне за перевод статей и предоставленную информацию принимаются репосты записи в социальные сети кнопочками под статьёй и подписки на обновления.

Мелочь — а мне будет приятно 🙂

Понравилась статья? Поделись с друзьями:
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
7 голосов, в среднем: 5 из 5

Похожие темы

5 комментариев к статье "Счётчик просмотров с AdBlock своими руками"

  1. Андрей

    Здравствуйте, Pashaster.
    Есть подозрение, что в «Универсальный счётчик просмотров с AdBlock от Jayd Saucedo», а соответственно, и в Вашем счётчике нет необходимости выделять все баннеры с рекламой на сайте в контейнеры с одним классом, а достаточно это сделать для одного баннера. Если на разных страницах сайта используются не одинаковые баннеры, то это необходимо сделать для одного баннера каждой страницы. Таким образом, если хотя бы один баннер не показан, то считаем, что установлен AdBlock.
    Хотя, возможно, это может снизить точность счётчика.

    1. Pashaster Автор

      Доброго времени суток!

      Да, ваше предположение абсолютно верно. Более того, при доработке и тестировании модуля я поступил именно описанным Вами способом — обернул в div со специфичным названием класса только рекламный блок из сайдбара, т.к. не увидел необходимости проделывать это со всеми баннерами. Видимо, просто забыл упомянуть об этом в статье. Так что спасибо Вам большое, что описали данный нюанс — думаю, кому-то из читателей данная информация будет полезна.

      По поводу точности измерения количества просмотров с включённым AdBlock — чисто теоретически, да, число просмотров может занизиться, если по каким-то причинам блок вдруг не заблокируется. Другие авторы упоминали, что такое возможно при указании баннеру имени, которое не будет восприниматься AdBlock как запрещённое, что приведёт к отображению рекламки. Также блокировки можно избежать путём присвоения элементу с баннером класса или css-id с «валидным» именем.

      Но, лично я, скажу честно, поленился заниматься такими экспериментами 🙂 Если у Вас или у других посетителей появится реальная информация о связи между именами баннера а также элементов, в которых он расположен, с разрешением их показа AdBlock, то просьба поделиться с остальными.

      Либо, возможно, вы встретите другие способы обойти AdBlock. Думаю, что данная информация также будет очень интересной общественности.

  2. And

    Идея интересная, но протестировав первый вариант скрипта, увидел, что счетчик почти ничего не считает. На сайте во много раз больше просмотров от того что показывает счетчик. Так же сам пытался с разных устройств много открывать/перезагружать страниц и счетчик это вообще не учел никак. Так же на сайте 1500 посетителей в сутки, а счетчик показывает кот наплакал. Я что-то не то сделал или счетчик не очень хороший?

  3. And

    Так же добавлю, что тестировал скрипт на Андроиде, где нет адблока и все остальные рекламы всегда показываются, но скрипт показал, что на андроиде есть адблок, а его нет!!! Так что скрипт далеко не идеальный. Скрипт решил скачать оригинальный от разработчика и он так показал. Надо искать другие варианты.

    1. Pashaster Автор

      Попробуйте мой конечный вариант, который я сделал, скомбинировав предыдущие. Если что-то не получится — пишите. У меня в своё время работал и более-менее похожие цифры просмотров показывал. А с оригинальными у меня тоже какие-то проблемы наблюдались.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *