Pull to refresh

Создание сводной таблицы посещаемости нескольких сайтов с помощью Яндекс.Метрики

Reading time 3 min
Views 7.6K
Была задача — создать систему учёта посетителей для пары десятков сайтов. Сайты принадлежат игровым объединениям (кланам) одного игрового сообщества. Так сказать, нужна сводная таблица, в которой сразу будет видно какой сайт более популярен. Заказчик одобрил подсчёт уникальных посетителей.

Так как у заказчика не было никакой цельной идеи — что и как, то мне можно было делать всё что угодно (техзадания не было тоже). Написал систему учёта (PHP, MySQL). Уникальные хосты идентифицировались по IP, записи в кукисах и записи в DOM-хранилище. По сути это был эксперимент, который не был доведён до конца. Новый вариант системы учёта должен был использовать счётчики какой-либо готовой системы, таких как Яндекс.Метрика, Google Analytics, LiveInternet и подобных. Выбрал Яндекс, ибо там есть API и толковая справка. Пример использования подглядел на хабре. Для работы с API метрики нужен OAuth-токен. Описывать процедуру его получения не буду, всё есть в справке.

Немного конкретики.
Сначала получаем список счётчиков: api-metrika.yandex.ru/counters.json?oauth_token=000000000000000000000000000000&pretty=1 Токен, само собой, у каждого разработчика уникальный.
Далее получаем для каждого счётчика из полученного списка количество посетителей за отчётный период, скажем, январь 2013 года: api-metrika.yandex.ru/stat/traffic/summary.json?id=12345678&oauth_token=000000000000000000000000000000&pretty=1&date1=20130101&date2=20130131&group=month&per_page=1 Где id=12345678 это номер счётчика Яндекс.Метрики.
Полученные данные показываем в сводной таблице.

Казалось бы, что задача выполнена, но не тут-то было! Нашлись зловредные элементы, которым захотелось показатели исказить. Эти недобросовестные товарищи обращаются на биржу трафика и покупают переходы на какой-либо сайт из группы, или сразу на несколько. Трафик такой пользы сайту не приносит, люди, работающие на этих биржах не останутся на сайте в более чем в 99% случаев. Ещё такой момент, что в настройках биржи трафика может быть такой пункт — «не передавать реферер». В таком случае переходы на сайт выглядят как будто на сайт попали с помощью закладки в браузере. Я придумал три варианта решения проблемы, но пока ни один в работу не сдан, не могу выбрать лучший.
  1. Считать визиты, которые продлились более 30 секунд.
  2. Считать визиты, в которых было посещение двух и более страниц.
  3. Создать у каждого счётчика метрики цель — посещение двух страниц и считать сколько раз цель была достигнута при заданном времени визита, к примеру, более 30 секунд. Гибрид первых двух вариантов.

Для первых двух вариантов получаем данные так: api-metrika.yandex.ru/stat/traffic/deepness.json?id=12345678&oauth_token=000000000000000000000000000000&pretty=1&date1=20130101&date2=20130131&group=month&per_page=1 Потом складываем визиты, при которых посещалось более одной страницы (объект имеет свойство name равное 1, 2, 3… 14, 15+, по числу просмотренных страниц). Либо складываем визиты в которых name равен нужному времени визита (name имеет значения «0 — 10 сек.», «11 — 30 сек.» и так далее до «10 — 30 мин.», «более 30 мин.»). Третий вариант это подсчёт целевых визитов, для него надо узнать id цели (goal_id) для каждого счётчика: api-metrika.yandex.ru/counter/12345678/goals.json?pretty=1&oauth_token=000000000000000000000000000000 И далее, как в первом варианте, складываем нужные данные (например, более 30 секунд на сессию).
Эти способы мне не нравятся. Всё-таки хочу считать, не визиты, а посетителей. Есть ещё способ, в котором нужно добавить в яваскрипт код счётчиков метрики пару строчек. Изменение кода повлияет на систему учёта. Посетитель будет учитываться не сразу, а через заданное время. То есть, если до срабатывания таймера пользователь покинул сайт, то его визит не будет учтён (свойство defer и метод hit). Вариант тоже не очень удобный — менять счётчики на куче сайтов, следить потом, чтоб счётчики не поменяли снова (у каждого сайта свой владелец). Неудобно. Администрация метрики обещала создать инструмент для отсеивания «ботов», но когда это будет сделано неизвестно.

В итоге мы получили почти работающую систему. Сам склоняюсь к использованию третьего, комбинированного способа учёта визитов. Посмотрим, что скажет заказчик…

Может быть кто-то из прочитавших эту статью уже боролся с «накрутками» и победил их? Было бы очень интересно узнать как.

Помощь по метрике http://help.yandex.ru/metrika
Помощь по API метрики http://api.yandex.ru/metrika
Tags:
Hubs:
+10
Comments 1
Comments Comments 1

Articles