Статьи

Обработка каналов Google Analytics в Zend Framework

(Эта статья была первоначально опубликована на eschrade.com )

Так что я был там, просматривая некоторые другие сайты (потому что я думаю, что дизайн моего сайта отстой. Спасибо, я). Одна из вещей, которую практически не делают блоги, — это продвижение определенного контента. Другими словами, выделите контент, который наиболее популярен за определенный период времени. Так что я подумал про себя, как бы я это сделал? Одним из вариантов будет иметь таблицу базы данных, которая может записывать каждый клик. Это, однако, скучно и требует изменений в моей схеме БД (зло!). Что я хочу сделать, так это взять мои самые популярные страницы прошлой недели и выделить их в верхней части веб-сайта. 

Тогда я понял, что я уже делаю это с Google Analytics .

Но как бы я это сделал? Оказывается, в вики Zend Framework уже есть предложение для службы Google Analytics GData . Это не в основной строке, но в хорошем рабочем состоянии, и вы можете сделать это из GetHub (дурная шутка намеренно). Поэтому я скачал его оттуда и поместил в свой каталог Blog / library, нарушая стандарт кодирования, который гласит, что только вещи в Zend Framework могут иметь псевдо-пространство имен Zend_. Ну что ж, это работает.

Способ, которым я это реализовал, — настроить его в качестве предварительного кэша . Это означает, что я использую очередь заданий Zend Server, чтобы запускать ее с интервалами периодов, например, один раз в день, а затем собирать результаты и кэшировать их в кеше с неограниченным сроком действия.

Этот код использует класс Task, который я построил ранее (перейдите к разделу «Doing it Cool-ly»).

class Admin_Task_GoogleAnalyticsPopular extends Esc_Queue_TaskAbstract
{
protected $_count;

protected function _execute(Zend_Application $app)
{
$this->_count = 0;
$options = $app->getOption('google');
$client = Zend_Gdata_ClientLogin::getHttpClient(
$options['username'],
$options['password'],
Zend_Gdata_Analytics::AUTH_SERVICE_NAME
);

$service = new Zend_Gdata_Analytics($client);

$query = $service->newDataQuery()
->setProfileId($options['analytics']['profileId'])
->addDimension(Zend_Gdata_Analytics_DataQuery::DIMENSION_PAGE_PATH)
->addMetric(Zend_Gdata_Analytics_DataQuery::METRIC_VISITS)
->setStartDate(date('Y-m-d', strtotime($options['analytics']['start'])))
->setEndDate(date('Y-m-d', strtotime($options['analytics']['end'])))
->setSort(Zend_Gdata_Analytics_DataQuery::METRIC_VISITS, true)
->setMaxResults($options['analytics']['count']);

$result = $service->getDataFeed($query);
$pages = array();
$manager = $app->getBootstrap()->getResource('cachemanager');

$pages = $manager->getCache('preview')->load('previewCacheArray');

if (is_array($pages)) {
foreach (array_keys($pages) as $key) {
if (strpos($key, 'analytics') == 0) {
unset($pages[$key]);
}
}
} else {
$pages = array();
}
$contentTbl = new Model_DbTable_Content();
foreach($result as $row){
$this->_count++;
$page = (string)$row->title;
$pre = Zend_Gdata_Analytics_DataQuery::DIMENSION_PAGE_PATH.'=/page/';
$id = substr($page, strlen($pre));
$content = $contentTbl->getContentByPage($id);
/* @var $content Model_Content */
if (!$content) continue;
$pages['analytics'.$this->_count] = array(
'title' => 'Popular: ' . $content->getTitle(),
'content' => $content->getContentSnip()
);

}

$manager->getCache('preview')->save($pages, 'previewCacheArray');

}
}

 

Вы можете заметить несколько вещей. Во-первых, у меня есть несколько опций, которые я извлекаю из своего класса Zend_Application. Вот копия этих опций.

google.username = "[email protected]"
google.password = "password"
google.analytics.profileId = xxxxxxxx
google.analytics.count = 2
google.analytics.start = "-1 week"
google.analytics.end = "now"

 

Количество это количество элементов для извлечения. Начало и конец установлены для strtotime (). Тем не менее, интересным, который я исключил (потому что я не знаю, является ли это угрозой безопасности), является profileId. Это индивидуальный идентификатор профиля веб-сайта, который однозначно идентифицирует отдельный сайт для вас. Это отличается от номера трекера, например UA-13220492-1. Чтобы узнать, какой идентификационный номер профиля используется в Google Analytics, перейдите на свой веб-сайт и наведите курсор на «Просмотр отчета». В URL вы увидите значение строки запроса для ключа «id». Это номер вашего профиля.

Так что же делает этот код? Прежде всего, он входит в Google, используя предоставленные вами учетные данные. После этого мы создаем новый класс обслуживания и создаем запрос. В запросе мне нужно установить хотя бы идентификатор профиля. Но я также могу указать желаемый тип результатов, показатели, время начала и окончания и некоторые другие вещи. После этого я получаю фид данных.

Код после этого — просто код, который я использую, чтобы сопоставить URL-адрес, который Google сообщает мне, со страницами в базе данных. Я удаляю все данные из массива, созданного с помощью Google Analytics (после foreach следует strpos), я перебираю результаты Google и добавляю контент, который хочу выделить, в массив. Милая. Готово.

Обратите внимание, что код для этого может измениться, поскольку он не является частью Zend Framework (пока). Или это может быть отклонено. Кто знает? Не я. Но до тех пор, кажется, это работает очень хорошо, когда вы хотите сделать контент доступным на основе данных Google Analytics.