Drupal → Пример работы с модулем Google Analytics API

25.01.2010

Модуль Google Analytics API предоставляет функции для получения данных с вашего Google Analytics аккаунта.

Пример получения пяти самых популярных страниц за последние 30 дней:

$request = array(
  '#dimensions'  => array('pagePath'),
  '#metrics'     => array('pageviews'),
  '#sort_metric' => array('-pageviews'),
  '#filter'      => 'pagePath=~^/blog/.*/\d+',
  '#start_date'  => date('Y-m-d', time() - 60*60*24*30),
  '#end_date'    => date('Y-m-d'),
  '#start_index' => 1,
  '#max_results' => 5,
);

try {
  $entries = google_analytics_api_report_data($request);
}
catch (Exception $e) {
  return $e->getMessage();
}

$stat = array();
foreach ($entries as $entry) {
  $dimensions = $entry->getDimensions();
  $metrics = $entry->getMetrics();
    
  $stat[] = array(
    'url' => $dimensions['pagePath'],
    'views' => $metrics['pageviews'],
  );
}

print_r($stat);

Результат:

Array (
  [0] => Array (
    [url] => /blog/javascript/36
    [views] => 106
  )
  [1] => Array (
    [url] => /blog/drupal/2
    [views] => 31
  )
  ...
)

#dimensions — размерность (не знаю как правильно перевести на русский язык), может принимать значения browser (браузеры посетителей), city (города посетителей), pagePath (url посещённых страниц), pageTitle (заголовки посещённых страниц) и т.д. Подробнее на странице документации.

#metrics — метрика, может принимать значения pageviews (число просмотров), timeOnPage (время проведённое на странице), visitors (число посетителей) и т.д. Подробнее.

#sort_metric — поле по которому будет производится сортировка, например pageviews (сортировка по возврастанию) или -pageviews (сортировка по убыванию). Подробнее.

#filter — фильтр, например pagePath=~^/blog/.*/\d+ означает получать только страницы с url удовлетворяющие регулярному выражению. Подробнее на странице документации или на странице с примерами.

#start_date — начальная дата в формате ГГГГ-ММ-ДД. Подробнее.

#end_date — конечная дата в формате ГГГГ-ММ-ДД. Подробнее.

#start_index — запись с которой получать статистику. Подробнее.

#max_results — число записей в статистике. Аналог LIMIT в MySQL. Подробнее.

Написанное актуально для
Google Analytics API 6.x-1.0-alpha1
Похожие записи

Комментарии

graceman9
01.10.2011, 00:04

Только начал изучать GA и путаюсь видя разницу в запросах и обработке ответов, например:
- префикс ga:pagePath
- GAFeed формат вместо $entry->getMetrics(); и т.п.
Правильно ли я понимаю что это нововведения?
использую модуль google_analytics_api

да, сейчас эта информацию уже не актуальна. с импользованием нового модуля Google Analytics Reports запрос выглядит как-то так:

$request = array(
  'metrics'     => array('ga:visitors'),
  'dimensions'  => array('ga:pagePath'),
  'sort_metric' => array('-ga:visitors'),
  'filter'      => 'ga:pagePath=~^/node/\d+',
  'start_date'  => strtotime('-30 days'),
  'max_results' => 5,
);

$data = google_analytics_api_report_data($request);

if ($data->error) {
  watchdog('popularposts', 'Сервер Google Analytics вернул ошибку: ' . $data->error, null, WATCHDOG_ERROR);
}
else {
  debug($data->results);
}

у гугла где-то даже была формочка с построителем таких запросов

graceman9
01.10.2011, 00:42

Ура!! Это помогло. Спасибо.
Если можно ещё большооой вопрос:
мне нужно сделать счетчик для каждой ноды, и я понимаю что _нужно_ кешировать, но не понимаю _что_. Есть ли стандартные велосипеды для этой задачи?

Также непонятно:
- делать один большой запрос и кешировать всё, раз в день, например ИЛИ делать запрос на каждую и кешировать "потихоньку"?
- как выбрать именно заданный путь?
- и какие основные ресурсы (сайты, форумы, группы) где отвечают на такие вопросы?

на d.org есть два модуля для этих целей, один регулярно синхронизирует счётчики GA с таблицей node_counter, другой как то с views интегрируется. посмотрите. хотя парц месяцев назад ни один у меня не заработал)

graceman9
02.10.2011, 21:45

Первый модуль ga_importer не стал использовать из-за статуса (beta4 + 14 установок).
Второй - ga_stats - только для 7ки.

Частично разобрался со своими вопросами:
- кешировать всё не стал, думаю пусть блок кеширует
- как фильтровать по заданному пути понял: вместо #filter или filter должно быть filters

Добавить комментарий