Работая над одним крупным проектом (который очень скоро Вы увидите в портфолио), передо мной была поставлена задача «подкрутить» к проекту автономную статистику Piwik. Т.е. Нужно было на персональных страницах пользователей, зарегистрированных в системе, поставить полноценный движок статистики, который предоставлял бы им исчерпывающую информацию о посещениях этих страниц. Мой коллега, перебрав кучу подобных движков остановился на Piwik и я его полностью поддержал: выбор был действительно хорош и очень грамотно написан, еще и Open Source!
Основными прелестями системы является (с точки зрения программиста):
- Высокая производительность;
- Развитая модульная система;
- Симпатичный, ненавязчивый интерфейс;
- Rest-сервисы;
Много рассказывать не буду: лучше один раз увидеть…
Установка данной системы на сайт очень проста:
- Скопируйте Piwik в Ваш проект, напр., public_html/stats
- Удалите файл config.ini с папки config
- Пройдите по адресу yoursite/stats
- Запустится автоматический установщик — вбейте все нужные параматры
- Все, система установлена
Постановка задачи
Итак,
что требовалось написать? При создании аккаунта пользователя нужно было
автоматически завести аккаунт в Piwik + добавить "сайт" для подсчета
статистики и назначить права доступа созданного пользователя для
созданного сайта. Кроме того, в аккаунте нужно было показать краткий
отчет за текщий день и за последний месяц.
Решение
Решение
пришло не сразу, но покопавшись в исходниках системы и немного
погуглив, решение нашлось. Бросалась в глаза поддержка Rest технологии,
которая давала возможности для доступа к API отдельных модулей и
получать от них внятные ответы.
После проб и ошибок, решил ситуацию написанием собственной модели для управления Piwik с помощью Rest технологии.
Вот исходный код модели, думаю многим, кто заинтересовался, готовый код придется по-вкусу.
Итак, пройдемся по методам данного класса и разъясним немного ситуацию. Перед тем как использовать данный класс необходимо сначала показать ему адрес в Интернете, по которому работает наш Piwik. Например, example.com/stats/.
Не забудьте также, вместо звездочек в моем классе ввести реальный логин и пароль суперпользователя, которые Вы выбрали при установке (конечно, можно получить подобную информацию другим путем: вытащить из конфига статистики).
Метод addSite
Параметры: $siteName - имя сайта, $urls - строка или массив адресов, по которым вести мониторинг для данного сайта. Метод заводит сайт Piwik и возвращает его идентификатор.
Метод updateSite
Нужно передать идентификатор созданного сайта и параметры, которые надо поменять. Результат: объект Zend_Rest_Client_Result.
Метод deleteSite
Метод очень простой. Нужно передать в него идентификатор удаляемого сайта. В результате получите объект Zend_Rest_Client_Result.
Метод addUser
Заводит нового пользователя в системе. Передайте в метод логин, пароль, почтовый адрес и адрес сайта, за который ответственный пользователь и получите в ответ объект Zend_Rest_Client_Result
Метод updateUser
Меняет параметры уже созданного пользователя. Нужно обязательно передать логин, а остальные по желанию. Ответ тот же.
Метод setUserAccess
Устанавливает права доступа конкретного пользователя. Логин, право доступа ('view','admin') и идентификатор сайта, для которого нужно установить доступ. Ответы без изменений.
Метод deleteUser
Удаляет пользователя из системы. Укажите только логин удаляемого пользователя.
Метод getSummary
Очень интересный метод. Возвращает объект Zend_Rest_Client_Result с статистическими показателями за определенный период от указанного дня. В результате Вы можете показать статистику пользователю в его аккаунте и предложить перейти в Piwik для получения более детального отчета (кстати, для этих вещей есть возможность автоматической логинизации пользователя, но задача это тривиальная и хорошо расписана в разделе FAQ Piwik'а).
Работа всего класса заключается в посылке Piwik'у REST запросов, которые передают необходимые параметры и дают возможность получить информацию. Эта система статистики мне очень понравилась, но она, ИМХО, еще немного сыровата, но уже довольно приличная.
P.S. Обратите внимание, что пароль во всех методах передается у меня в виде md5 хеша!

