Один добрый хабрапользователь Andex написал на Хабре статью о том, как на свой сайт экспортировать статистику с Google.Analytics. Подробности читайте в соответствующем блоге. Все замечательно работает (на момент 30 ноября 2008 года), и хорошо выглядит даже дефолтовый набор отчетов, который автор делал для себя. Но есть один недостаток для меня, который я исправил.
Но обо всем по порядку. Для начала прочитайте статью Andex’а и «заведите» статистику на web-сервере.
Если во время установки что-то не заработало, читайте комментарии.
У меня возникла такая проблема: если сходу ошибиться с паролем, то система обратиться к гуглу с неправильным паролем столько раз, сколько отчетов экспортируется. В дефалтном варианте это 8 раз. После этого гугл естественно будет требовать от вас ввода каптчи, чтобы убедиться, что вы не подбираете пароли. А возвращать в этом случае он будет временный редирект (Temporary redirect). Его вы в логе и увидите, при этом stat.php будет вывалить нутисы про Undefined index’ы. В этом случае, надо подождать минут 20, а потом повторно запросить статистику, и все будет хорошо :)
Что меня не устроило в дефалтовых отчетах? Только то, что графики по посетителям и по посещениям были разделены. Вместо того, чтобы на одном графике сделать 3 кривых, было сделано 2 графика по 2 кривых (посетители + просмотры, посещения + просмотры).
Я решил это исправить. Но исправить так, чтобы ковырять готовый код по минимуму для простоты и быстроты решения, и для совместимости с потенциальными будущими апдейтами.
Итак, что нужно сделать? Нужно составить новый сводный отчет (*.csv), в котором будут храниться объединенные данные по посетителям, посещениям и просмотрам. И нужно сделать *settings.xml-файл, в котором будут настройки визуализации нового графика.
Генерацию сводного отчета я вынес в функцию. Она берет два отдельных отчета и составляет из них общий:
function makeFull($postfix = '') { $fvisits = fopen($GLOBALS["path"] . "visits$postfix.csv", 'r'); $fvisitors = fopen($GLOBALS["path"] . "visitors$postfix.csv", 'r'); $ffull = fopen($GLOBALS["path"] . "full$postfix.csv", 'w'); while (!feof($fvisits)) { $visits_line = explode(';', fgets($fvisits)); $visitors_line = explode(';', fgets($fvisitors)); if (count($visits_line) == 3 && count($visitors_line) == 3) { // новая строка = дата ; посетители ; посещения ; показы & \n $new_line = $visitors_line[0] . ';' . $visitors_line[1] . ';' . $visits_line[1] . ';' . $visitors_line[2]; fputs($ffull, $new_line); } } fclose($fvisits); fclose($fvisitors); fclose($ffull); }
Эту функцию надо поместить в stat.php (например в конец). Вызвать ее нужно 2 раза (отчет за все время и отчет за последние 3 месяца):
makeFull(); makeFull('_3');
Это нужно делать после генерации соответствующих отчетов, т.е. проще всего дописать в конце файла stat.php.
Далее из файлов visitors_3_settings.xml и visitors_settings.xml я сделал копии (full_3_settings.xml и full_settings.xml) и добавил в настройках графиков новый график-кривую (новую секцию <graph gid=»3″></graph>).
Осталось подредактировать index.php, чтобы новые графики отображались вместо старых. В index.php вместо кода первых четырех графиков появился следующий код:
<div id="visitors" align="center" style="padding-bottom:80px"> <strong>Для просмотра сожержимого, установите последнюю версию Adobe Flash Player</strong> </div> <script type="text/javascript"> // <![CDATA[ var so = new SWFObject("amline.swf", "amline_chart", "600", "350", "8", "#FFFFFF"); so.addVariable("path", "./amline/"); so.addVariable("settings_file", escape("full_settings.xml?<?php echo mktime();?>")); so.addVariable("data_file", escape("full.csv?<?php echo mktime();?>")); so.addVariable("preloader_color", "#BBBBBB"); so.write("visitors"); // ]]> </script> <div id="visitors_3" align="center" style="padding-bottom:80px"> <strong>Для просмотра сожержимого, установите последнюю версию Adobe Flash Player</strong> </div> <script type="text/javascript"> // <![CDATA[ var so = new SWFObject("amline.swf", "amline_chart", "600", "400", "8", "#FFFFFF"); so.addVariable("path", "./amline/"); so.addVariable("settings_file", escape("full_3_settings.xml?<?php echo mktime();?>")); so.addVariable("data_file", escape("full_3.csv?<?php echo mktime();?>")); so.addVariable("preloader_color", "#BBBBBB"); so.write("visitors_3"); // ]]> </script>
Вот и все. Теперь страница статистики (index.php) выглядит примерно так:
Скачка готовых файлов.
Мой мод вывода статистики затронул файлы из пакета statga от Andex’а. Изменения производились в версии statga 2.0.1. Не каснулись пакета только 2 новых файла: full_3_settings.xml и full_settings.xml. Их вы можете смело брать из моего пакета в любом случае. Как модернизировать файлы пакета statga для изменения визуализации написано выше. Так что, если Andex обновит версию, вы сможете внести правки вручную. Если нет, можно использовать готовые файлы версии 2.0.1:
Здравствуйте, Валерий. Спасибо за мод, как раз то, что искал. К сожалению, скачать не удается, т.к. «Документ не найден» :(
Да, ссылка была неправильная. Теперь правильная :)
Спасибо, работает :) Сразу вопрос. Можно ли исключить конкретную страну из данных о географии посетителей?
Можно. Для этого есть пользовательские отчеты в GA. Вам нужно составить отчет, ссылку на его экспорт вставить в скрипт. Чтобы разобраться во всем этом, надо как миним прочитать исходную статью на Хабре.
Даже не пришлось создавать отдельного пользовательского отчета. Всего лишь создать к существующему отчету расширенный сегмент, где исключить ненужную страну. После этого в stat.php в строку экспорта добавить значение сегмента, в моем случае «seg0=0».
А можно ли в строчку «Показатели посещаемости за три последних месяца» вставить адрес сайта?
Адрес сайта передается с ga и вроде файл настроек (full_3_settings.xml) поддерживает переменные.
Эта строчка определена в файле настроек (*_settings.xml). По-этому подставить ее туда легко, причем разными способами. Если делать это надо автоматически, то самый просто способ выдавать XML из php, а идентификатор сайта передавать параметром (?site=1). Вообще, вставить в эту строчку можно что угодно, а можно и просто убрать текст.
Если вы точно опишите, что из чего надо получить, я подскажу, как лучше сделать.
В логе записывется так
# —————————————-
xxx.ru
Обзор посетителей
…
Хочу чтобы на графике было написано “Показатели посещаемости для сайта xxx.ru за три последних месяца”
При этом подставлялось автоматом.
Лог нам не нужен.
При вставке графика на страницу, вы уже знаете, какой сайт надо показать. Значит, его идентификатор надо передать файлу настроек:
<script type="text/javascript">
// <![CDATA[
var so = new SWFObject("amline.swf", "ch_count", "500", "300", "8", "#FFFFFF");
so.addVariable("path", "./");
so.addVariable("chart_id", "ch_count");
so.addVariable("settings_file", escape("pair_settings.php?site=x"));
so.addVariable("data_file", escape("stat.php?1229353671"));
so.addVariable("preloader_color", "#BBBBBB");
so.write("count");
// ]]>
</script>
pair_settings.php выдает такой же XML, как в самом XML-файле pair_settings.xml. Но, в одном месте, а если точнее — в
<?php print $_GET[‘site’]; ?>
«На подобии», потому что передавать адрес сайта напрямую некрасиво, лучше использовать промежуточный массив вида: array(‘siteID’ => ‘http://site.com’, …)
Дело в том что хотелось бы чтобы адрес сайта показывал из того отчета что отдает GA, а не из какой то базы со списком сайтов.
Файл отчета имеет строгую структуру, именно ее требуется передать в диаграмму, нарушать ее нельзя. Так что передавать адрес сайта придется все равно через настройки, а вот каким путем — решайте сами. Я лишь повторю, что путей разных много.