Статистика на сайте, вторая попытка
Евгений, 29 февраля 2008
На основе опыта использования и учитывая комментарии я доработал скрипт описанный в статье Отображение данных Google Analytics на сайте основной целью при доработке было упрощение использования. В этой статье я немного повторюсь с описанием скрипта сделав его более информативным чем предыдущее, возвращаться к этой теме на сайте я не собираюсь, а сообщить об ошибках и внести предложения можно на странице проекта в Google Code, там же можно скачать архив с исходниками.
Получение данных Google Analytics
К сожалению, для Google Analytics нет документированного API, поэтому информацию можно получить только экспериментальным путем или рассматривая соответствующие разработки. Я остановился на втором, за основу были взяты API Джо Тана для плагина WordPress Reports, и Google Analytics API для CakePHP. Второе не подходит в качестве базового решения поскольку требует CakePHP знакомиться с которым пока желания нет, да и ставить фреймворк из-за простенького скрипта захочется не всем. В API от Джо я значительно упростил часть работающую непосредственно с GA, убрал лишние запросы и парсинг, которому в элементе отвечающем за загрузку делать нечего.
Обратите внимание, что для авторизации требуются логин и пароль Google аккаунта, хранить на хостинге данные основного аккаунта не всегда целесообразно и безопасно, возможно стоит создать аккаунт специально для таких целей и открыть на нем доступ к отчетам сайта.
Параметры запроса
id — идентификатор сайта.
fmt — формат загружаемого отчета, 0 - PDF, 1 - XML, 2 - CSV, 3 - TSV.
pdr — интервал времени, в формате Ymd-Ymd, пример pdr=20080128-20080227.
rpt — имя отчета, пример rpt=BrowsersReport.
trows — запрашиваемое количество строк.
Другие параметры можно подсмотреть в адресной строке и ссылках в меню экспорт, на странице с необходимым отчетом.
Получение данных FeedBurner
В отличие от Google Analytics у FeedBurner есть документированный API — это значительно упрощает нашу задачу, тем более, что Awareness API не требует авторизации, единственный нюанс: нужно активировать Awareness API в панели управления FeedBurner.
Подготовка отчетов
Отчеты определяются в виде классов потомков абстрактного класса Report, при этом нужно определить метод required сообщающий загрузчику какие данные и с какого сервиса загружать, и метод create подготавливающий данные для отображения на сайте.
Самый простой способ получить необходимые данных из XML это использовать функцию SimpleXMLElement->xpath(). Загрузку файла и выборки упрощает класс xml при создании объекта нужно указать имя файла из директории data, вся работа по выборке данных возлагается на метод parse($xpath, $callbackFunction = ''). Параметр $xpath должен содержать описание необходимых данных на языке XPath, $callbackFunction имя функции вызываемой для каждого полученного элемента, чтобы получить данные требуемого формата, например, для удаления лишних пробелов.
Отображение данных
Пользователь должен сам выбирать как отображать полученные отчеты, поэтому подключение модулей экспорта максимально упрощено и для начала реализовано два модуля на основе amCharts и Google Chart т.е. с флешем и без. Изображения Google Chart загружаются и хранятся на сервере, чтобы избежать модификации страницы статистики каждый день, хотя это возможно и не оптимальный вариант.
Результаты работы можно посмотреть на примере страницы со статистикой этого сайта, и на представленном ниже графике отображающем ту же статистику с помощью Google Chart. Обратите внимание на столь любимый всеми отчет о ссылающихся блоггерах (или как его назвать даже не знаю). Только вот блоггеров выявлять все равно придется просматривая статистику GA и добавляя в referrаls.xml новые URL.


Установка
Распаковать содержимое архива с примером скрипта в корневую директорию сайта.
Из папки integration скопировать файл WPSiteStats.php в директорию плагинов WordPress или папку DrupalSiteStats в папку модулей Drupal, активировать соответствующий плагин или модуль в CMS (в Drupal после активации модуля нужно включить фильтр Drupal Site Stats в настройках форматов).
Создать страницу с названием "Статистика", запретить для нее комментарии, задать необходимый url, пример с кодом страницы есть в папке docs, не забудьте удостовериться, что html код страницы не искажен визуальным редактором WordPress или не вырезается фильтрами Drupal. Выглядит он примерно так:
<div class="ssStatsPage">
<!--ssTemplate swfObject-->
<!--ssTemplate styles-->
<!--ssTemplate amChart type=line name=visitors width=560 height=400-->
<!--ssTemplate amChart type=line name=subscribers width=560 height=400-->
<!--ssTemplate amChart type=pie name=country width=560 height=400-->
<!--ssTemplate amChart type=pie name=city width=560 height=400-->
<!--ssTemplate amChart type=pie name=browsers width=560 height=400-->
<h3 class="ssLikeChartsHeader">Ссылающиеся блоггеры</h3>
<!--ssFile refsList-->
</div>
Конфигурационные файлы как нетрудно догадаться находятся в директории config, файлы GoogleAnalytics.php и FeedBurner.php содержат настройки соответствующих сервисов, наиболее важные из которых это ваши логин, пароль и профиль сайта в GoogleAnalytics и uri ленты в FeedBurner, config.php общие настройки скрипта из которых наиболее важная это список задействованных отчетов, если вы решите создать новый отчет то не забудьте добавить его имя в этот список иначе он не будет обрабатываться.
Чтобы загрузить и подготовить данные для отображения нужно запустить файл site-name/ss/public/ss.php, а чтобы не беспокоиться об этом каждый день нужно запускать его с помощью cron или заменяющих его сервисов.
Шаблоны
Для упрощения встраивания графиков в страницы можно использовать шаблоны, которые хранятся в папке templates. Вставить шаблон в страницу можно с помощью тега <!--ssTemplate templateName variable1=value1 variable2=value2--> где templateName имя шаблона, а variable1 и variable1 переменные которые можно использовать в файле шаблона взяв их имя в фигурные скобки {variable1}. Вставить в страницу файл из папки public/data (для отчетов в виде html) можно с помощью тега <!--ssFile fileName--> расширения html подставляется автоматически. В папке templates есть готовые шаблоны для вставки графиков amCharts.
Для обработки шаблонов используется функция ssIntegratorContentFilter, вы можете достаточно легко создать плагин упрощающий интеграцию графиков для вашей CMS, в качестве примера возьмите уже готовые плагины для WordPress и Drupal (не забудьте сообщить о своем плагине мне, чтобы я добавил его в скрипт, если, конечно, вы не против).

















Денис Судилковский 29 февраля, 2008 14:18 #
Супер! Когда-то сам пытался разобраться с этим вопросом, но моих знаний РНР не хватило. Сейчас вроде все более-мение ясно стало (:
skif_s 2 марта, 2008 9:04 #
В архиве, который я скачал ошибка в main.php.
require_once SS_PATH . 'config/config.php';А SS_PATH там определяется только в этом самом config.php.skif_s 2 марта, 2008 9:07 #
Тэг code не работает что-ли...? вот строчка, а то у меня там непонятно
10 | require_once SS_PATH . 'config/config.php';
Короче константа SS_PATH к этому времени ещё не определена.
skif_s 2 марта, 2008 9:15 #
опа.. я парю ))) извиняюсь. Там вообще непонятно где defs.php подключается к main.php
Евгений 2 марта, 2008 12:13 #
Запускать нужно файл
public/ss.php(так сделано, чтобы можно было через браузер запускать), там же подключаетсяdefs.php.Я сразу не обратил внимания, но это не очень удачное решение.
Исправил, можно скачать в архиве, или отсюда, если возможность запуска через браузер не требуется файл
public/ss.phpлучше удалить и запускать через cron скриптmain.phpDimox 2 марта, 2008 18:52 #
Почему-то не создаются xml-файлы в папке /ss/public/data/
Евгений 2 марта, 2008 20:00 #
Возможно, на хостинге отключен SimpleXML (–disable-simplexml).
Ошибки выдает?
skif_s 2 марта, 2008 20:09 #
У меня вот выдает такие варнинги в кол-ве 8 штук
Warning: Invalid argument supplied for foreach() in /home2/***/public_html/ga/report/report.php on line 22
Dimox 2 марта, 2008 20:15 #
Нигде никаких ошибок не выдает. Пробовал ставить на папку 777, тоже не помогло. Я использую выделенный сервер, посмотрел сейчас в панели - не нашел ничего, касающегося SimpleXML.
Евгений 2 марта, 2008 23:06 #
Завтра добавлю проверку ошибок где только можно и запись результатов в лог файлы, тогда можно будет попробовать определить, в чем проблема.
Евгений 5 марта, 2008 0:55 #
Чтобы помочь тем, у кого скрипт работать отказывался, вчера добавил подробный лог ошибок, получилось очень уж подробно, за один запуск скрипта почти 10 метров лога со всеми логинами, паролями, куками и прочими подробностями, подумал немного и решил, что такой вариант устроит не всех, пришлось отложить решение проблемы на сегодня.
Сегодня пошел более простым путем и добавил проверку на ошибки в наиболее вероятных местах ошибки и запись в лог соответствующего сообщения, обновиться скрипт можно отсюда.
У кого скрипт и так работает обновлять ничего не нужно, принцип "работает не трожь" никто еще не отменял :) (просто кроме лога никаких изменений нет)
Dimox 5 марта, 2008 2:25 #
Обновил. В логе пишет следующее:
PHP Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /home/.../ss/functions.php on line 37
Аноним 5 марта, 2008 14:24 #
СТАТЬЯ ТУПА СДУТА С САЙТА ГУГЛА
Dimox 5 марта, 2008 14:32 #
Аноним, ты дебил, если не понимаешь элементарных вещей =)
skif_s 5 марта, 2008 14:37 #
М-да, почему-то не удивляюсь, почему автор - аноним.
Евгений 5 марта, 2008 15:42 #
Аноним, писать заглавными — дурной тон...
особенно не подумав :)
Dimox, это значит скрипт запущен под php4, попробуйте запустить под php5.
Эдуард 6 марта, 2008 11:42 #
Сам некоторое время назад, думал о том, как вывести гуглевую статистику на своем блоге, но руки так и не дошли.
Автор молодец, описал все простым и доступным образом.
Прочитал, отредактировал файлы FeedBurner.php и GoogleAnalytics.php, пришлось только лишь, включить на хостинге SimpleXML.so и настроить cron и все заработало.
Автору благодарность!
skif_s 6 марта, 2008 11:49 #
С гугловской странички все время почему-то скачивается битый архив (
Евгений 6 марта, 2008 12:05 #
Только что проверил, перед закачкой архив без ошибок, а когда скачиваешь с гугла уже с ошибкой, при этом он нормально распаковывается если проигнорировать ошибку, сейчас постараюсь разобраться почему так получается.
Евгений 6 марта, 2008 12:09 #
Сейчас скачал FlasGet-ом, получил целый архив, видимо битый у меня в качалке FF закешировался.
skif_s 6 марта, 2008 12:16 #
Да, сейчас целый скачался.. странно, до этого два три раза битый был.
kostya 6 марта, 2008 12:37 #
Спасибо, очень нужный скрипт, но пока не получается у меня его запустить на своем сайте.. :(
- на четверке скрипт не пойдет?
Евгений 6 марта, 2008 12:46 #
skif_s, ничего странного, я обновил его.
kostya, на четверке не пойдет.
ilyuha 16 марта, 2008 3:04 #
А статистика будет работать с движком Textpattern?
Евгений 16 марта, 2008 3:17 #
С любым движком будет, просто для Drupal и WP есть готовые плагины для подключения, для других CMS нужно либо написать такой плагин (предельно простой, разобраться можно по исходникам этих двух, вся его работа сводиться к обработке содержимого поста с помощь уже готовой функции), либо обходиться без шаблонов, что значительно менее удобно.
Если будете делать плагин для Textpattern, напишите потом мне, поставим на него ссылку или добавим на страничку скрипта со ссылкой на вас.
Станислав 30 марта, 2008 17:57 #
В архиве с Гугла код в файлах не закрыт через ?>
Закрыл вручную, данные стали качаться, но на страничке статистики пишет, что в них ошибка.
Евгений 30 марта, 2008 18:33 #
В файлах содержащих только php использовать
?>не рекомендуется. К примеру, в руководстве по оформлению кода Zend Framework первая же строка о том что использование?>в файлах содержащих исключительно php запрещено.Скорее всего проблема в чем-то другом, смотрите логи в папке
logs, если найдете ошибки не упомянутые в на странице Troubleshooting, пишите сюда, постараюсь помочь.Станислав 30 марта, 2008 19:14 #
Евгений, спасибо за оперативный ответ! Но без закрытия кода через ?> у меня пишется 500-ая ошибка, при закрытии через ?> работает. После закачки всех файлов на сервер и открытии через браузер /ss/public/ss.php пишет, что данные сохранены:
[30-Mar-2008 19:38:03 MSD] Данные сохранены в файл domain.ru/ss/data/BrowsersReport.xml
domain.ru/ss/data/GeoCountry.xml
domain.ru/ss/data/GeoCity.xml
domain.ruAllSourcesReport.xml
Ошибки: при этой процедуре в /ss/logs/error.log возникает куча PHP Notice Undefined index на curl.php on line 198 и там же line 198 и также много других нотификаций на Undefined offset.
Из Warning-ов ругается на set_time_limit() main.php on line 19 и на невозможность открытия FeedBurner.php.
Fatal error только на Failed opening required FeedBurner.php, но он мне и не нужен. Весь лог тут не привожу, там под сотню строк.
Так как сайт написан без cms, то данные вставляю напрямик в html-код как написано вот здесь: http://designformasters.info/stuff/google-analytics-stats/static.txt
При этом во флеше сообщается "Error in data file". Я не специалист в коде, но по указанной ссылке есть откуда, вроде, берутся данные, например - /ss/public/data/browsers.xml, но на сервере после закачки данных эта папка пуста. Все данные, как и сообщил при закачке ss.php, остаются в папке /ss/data/. На всякий случай присвоил права 777 для /ss/public/data/ но там после закачки данных так и осталось пусто.
Станислав 30 марта, 2008 21:26 #
Кроме того ещё одна ошибка: PHP Fatal error: Cannot clone object of class SimpleXMLElement due to 'zend.ze1_compatibility_mode' in /home/users/username/domen.ru/ss/report/report.php on line 13
Это не совсем аналог того, что уже написано в Troubleshooting.
В phpinfo:
Simplexml support enabled
Revision $Revision: 1.151.2.22.2.35 $
Schema support enabled
Local Value: zend.ze1_compatibility_mode On
Master Value: zend.ze1_compatibility_mode On
Евгений 30 марта, 2008 21:42 #
Отчет FeedBurner создается по умолчанию и соответственно требуется для него конфиг, отключить можно в файле
config/config.php, так:на будущее это учту.
Warning-ги можно убрать закомментировав
error_reporting(E_ALL)вmain.phpили скачать ss_v0.2 так еще некоторые исправления есть, но не очень значительные.Jevgen 4 апреля, 2008 8:15 #
У меня выдаёт : Fatal error: Call to undefined function curl_init() in D:\wamp\www\ss\service\transport\curl.php on line 21
версия -ss_v0.2
Jevgen 4 апреля, 2008 8:24 #
Понял. Простите. Wamp падонак
Станислав 4 апреля, 2008 13:12 #
Большое спасибо Евгению, ошибка с 'zend.ze1_compatibility_mode' устранена, теперь все работает! Ещё здесь не указано - при создании отдельного юзера в GA ему необходимо дать не просто права на просмотр, а административные, тогда статистику качает.
Евгений 4 апреля, 2008 13:23 #
У меня работает без этого, достаточно прав на просмотр.
Виктор 7 мая, 2008 15:59 #
Уважаемый Евгений, у меня именно такая ситуация о которой Вы писали (http://designformasters.info/posts/google-analycs-stats/#comment-2922) - т.е. в файлах xml в папке /ss/data/ содержится текст "An Error Has Been Detected...".
Я использую Ваш архив - и практически (кроме данных доступа в файле /ss/config/GoogleAnalytics.php и переименовывания файлов /ss/config/GoogleAnalytics-sample.php и /ss/config/FeedBurner-sample.php) ничего не менял.
Подскажите пожалуйста: что нужно проверить? Где прописывается указанный Вами параметр "rpt"?
Евгений 9 мая, 2008 11:05 #
Виктор, я скоро выложу значительно доработанный скрипт, если там проблема сохраниться, тогда будем разбираться.
Виктор 12 мая, 2008 19:58 #
Благодарю.
Буду ждать.