Верх страницы
Обложка к записи PHP: Получаем данные из Google Analytics
Время для прочтения: 0 мин. 14 сек.

PHP: Получаем данные из Google Analytics

Иногда требуется показать данные из Google Analytics анонимным пользователям. Например, соорудить красивую статистику как на хабре или вывести счётчик посещений для конкретной страницы.

Реализуется это не совсем очевидно. В официальной документации если и описано, то очень и очень расплывчато. Хорошо, что есть добрые люди на StackOverflow. Итак, решение.

  1. Идём в консоль API Google. Создаём новое приложение.
  2. В меню выбираем «services» и включаем «Analytics API».
  3. Идём в API Access, жмём «Create an OAuth 2.0 client ID»:
    • Вводим имя приложения, загружаем логотип, жмём «next».
    • Выбираем «Service account», «Create client ID».
    • Загружаем себе файл секретного ключа. Складываем, например, в libs/google/keys.
  4. Возвращаемся в «API Access». Появился блок «Service account».
  5. Берём оттуда «Email address», идём в админку аккаунта Google Analytics, добавляем email в качестве пользователя аккаунта.
  6. Сливаем последнюю версию Google API PHP client, складываем в проект содержимое src. Например, в libs/google.
  7. Пишем код.

<?php
require_once('libs/google/Google_Client.php');
require_once('libs/google/contrib/Google_AnalyticsService.php');
 
$client = new Google_Client();
$client->setApplicationName('My cool application');
 
$client->setAssertionCredentials(
  new Google_AssertionCredentials(
  // тот самый email, который мы добавляли в analytics
  '823387931764@developer.gserviceaccount.com',
  array('https://www.googleapis.com/auth/analytics.readonly'),
  // полный путь к загруженному секретному ключу
  file_get_contents('libs/google/keys/402d656da7be33b9b8dc96f80844fe9e72e0fc42-privatekey.p12')
));
 
// Client ID со страницы API Access
$client->setClientId('823387931764.apps.googleusercontent.com');
$client->setAccessType('offline_access');
 
$service = new Google_AnalyticsService($client);
 
// получаем количество уникальных посетителей конкретного профиля с 2009 года
$data = $service->data_ga->get(
  'ga:20342384', '2009-01-01', date('Y-m-d'), 'ga:visitors', array(
  'dimensions' => 'ga:pagePath',
  'filters' => 'ga:pagePath==/user/mihdan/',
));
 
print_r($data);
?>

В процессе работы с API очень полезны Google Analytics Query Explorer и полное описание API.

Ссылки

Сатья любезно предоставлена Александром Макаровым (Sam Dark)

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

11 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Егор
Егор
10 лет назад

ошибочки, поможете решить?

Fatal error: Uncaught exception ‘Google_AuthException’ with message ‘PHP 5.3.0 or higher is required to use service accounts.’ in /home/virtwww/###/http/libs/google/client/src/auth/Google_P12Signer.php:62 Stack trace: #0 /home/virtwww/###/http/libs/google/client/src/auth/Google_AssertionCredentials.php(99): Google_P12Signer->sign(‘eyJ0eXAiOiJKV1Q…’) #1 /home/virtwww/###/http/libs/google/client/src/auth/Google_AssertionCredentials.php(81): Google_AssertionCredentials->makeSignedJwt(Array) #2 /home/virtwww/###/http/libs/google/client/src/auth/Google_OAuth2.php(256): Google_AssertionCredentials->generateAssertion() #3 /home/virtwww/###/http/libs/google/client/src/auth/Google_OAuth2.php(210): Google_OAuth2->refreshTokenWithAssertion() #4 /home/virtwww/###/http/libs/google/client/src/service/Google_ServiceResource.php(167): Google_OAuth2->sign(Object(Google_HttpRequest)) #5 /home/virtwww/###/http/libs/google in /home/virtwww/###/http/libs/google/client/src/auth/Google_P12Signer.php on line 62

*** Сообщение запрещено к публикации. Не затрагивает тематику материала. Номер запроса 6164017e167e3e6557bf4bd0882659e8. Автомодератор cleantalk.org. ***

Егор
Егор
10 лет назад

Стормозил, уже обновил до 5.4, но работать по прежнему не захотело…

Егор
Егор
10 лет назад

по работе с токеном…
З.Ы. Михаил, кстати у Вас там лишняя запятая в конце 14 строки

Fatal error: Uncaught exception ‘Google_AuthException’ with message ‘Error refreshing the OAuth2 token, message: ‘{ «error» : «invalid_grant» }» in /home/virtwww/###/http/libs/google/client/src/auth/Google_OAuth2.php:280 Stack trace: #0 /home/virtwww/###/http/libs/google/client/src/auth/Google_OAuth2.php(257): Google_OAuth2->refreshTokenRequest(Array) #1 /home/virtwww/###/http/libs/google/client/src/auth/Google_OAuth2.php(210): Google_OAuth2->refreshTokenWithAssertion() #2 /home/virtwww/###/http/libs/google/client/src/service/Google_ServiceResource.php(167): Google_OAuth2->sign(Object(Google_HttpRequest)) #3 /home/virtwww/###/http/libs/google/client/src/contrib/Google_AnalyticsService.php(61): Google_ServiceResource->__call(‘get’, Array) #4 /home/virtwww/###/http/_test.php(34): Google_DataGaServiceResource->get(‘ga:3831355’, ‘2009-01-01’, ‘2013-05-15’, ‘ga:visitors’, Array) #5 {main} thrown in /home/virtwww/###/http/libs/google/client/src/auth/Google_OAuth2.php on line 280

Собственно почему хочу перейти на текущий клиент — с начала мая GAPI стал выдавать неточные данные (а поддержка у него совсем никакая, последний пост был в 12 году)

Miklushov Nikita
8 лет назад

Скачал последнюю библиотеку Google API

На строчке $client = new Google_Client();

Скрипт рушится. Хотя пути до библиотек верные.

mihdan
8 лет назад
Ответить на  Miklushov Nikita

Ну для начала включите отображение ошибок

mihdan
8 лет назад
Ответить на  Miklushov Nikita

Я ставлю себе скрипты через композер со всеми зависимостями — полет нормальный, только сегодня запилил еще один плагин под WordPress для аналитики

SIXTYONE
SIXTYONE
7 лет назад
Ответить на  mihdan

А можете научить добавлять аналитику и систему авторизации на сайт?

mihdan
7 лет назад
Ответить на  SIXTYONE

Что вы имеете ввиду под «научить»? Если сайт на WordPress, могу плагины качественные посоветовать. Если на чистом РНР — кодом каким помочь

Предыдущая запись

Давайте дружить
в Телеграме

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы