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)

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

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

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

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

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

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

      • SIXTYONE

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

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

  • Егор

    по работе с токеном…
    З.Ы. Михаил, кстати у Вас там лишняя запятая в конце 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 году)

  • Егор

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

  • Егор

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

    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. ***