<rmcreative>

RSS

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

30 апреля 2013

Иногда требуется показать данные из 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. Пишем код.
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
    '[email protected]',
    array('https://www.googleapis.com/auth/analytics.readonly'),
    // полный путь к загруженному секретному ключу
    file_get_contents('libs/google/keys/761774d73f0e-privatekey.p12'),
));
 
// Client ID со страницы API Access
$client->setClientId('13901308-vb17daf1ka19.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/samdark/',
));
 
print_r($data);

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

Комментарии RSS

  1. №7863
    Роман
    Роман 30 апр. 2013 г., 9:22:02

    Проще использовать библиотеку GAPI, о ней кстати тоже на StackOverflow упоминают. Работает безотказно, несмотря на то, что библиотека не развивается.

  2. №7864
    Dmitry
    Dmitry 30 апр. 2013 г., 11:18:41

    Отлично. Недавно как раз пришлось разбираться со всем этим. Но у меня ситуация такая, что необходимо брать информацию из профиля пользователя. При этом нужно было, чтобы он один раз авторизовался и дал добро на доступ к этим данным. Для этого использую: https://developers.google.com/accounts/docs/OAuth2WebServer#offline .

    Может кому-то пригодится.

  3. №8155
    Dmitry
    Dmitry 13 июля 2013 г., 0:10:58

    Делаю все как у тебя, но вываливается ошибка Google_AuthException: Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }' in C:\wamp\www\des\src\auth\Google_OAuth2.php on line 288 не подскажешь что делать?

  4. №8159
    Sam
    Sam 15 июля 2013 г., 3:22:44

    Dmitry, у меня вариант без OAuth.

  5. №8162
    Dmitry
    Dmitry 15 июля 2013 г., 8:02:36

    Sam , а это что тогда?

    Идём в API Access, жмём «Create an OAuth 2.0 client ID»:

    P.S. Уже все заработало =)

  6. №8163
    Sam
    Sam 15 июля 2013 г., 13:43:58

    Dmitry, а это там так вкладка называется. Там помимо настроек OAuth ещё и Service account, который и используется.

  7. №8423
    zloyded
    zloyded 30 сент. 2013 г., 18:32:13

    Неподскажете решение? Uncaught exception 'Google_AuthException' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'' in /www/angry/www/system/lib/google/src/auth/Google_OAuth2.php:288

  8. №8447
    Ирина
    Ирина 16 окт. 2013 г., 10:44:42

    Люди, объясните, пожалуйста, чайнику, для чего нужны (или не нужны) файлы analytics.php? У меня сайт на Джумла 1.5, сегодня хостер прислал письмо, что у меня на сайте вирусов полно, стала разбираться - почти в каждой папке лежит такой файл. Убираю все вручную. Может кто подскажет?

  9. №8908
    Павел
    Павел 25 марта 2014 г., 17:33:05

    Есть идеи по поводу вот такой ошибки?

    Google_IO_Exception Problem with the SSL CA cert (path? access rights?)

    Ошибка указывает на строки:

    $response = curl_exec($curl); /* response = "" */ if ($response === false) { throw new Google_IO_Exception(curl_error($curl)); }

    Пробовал отключать проверку безопасности curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false) - не помогло..

  10. №9045
    Андрей
    Андрей 04 июня 2014 г., 6:36:41

    Спасибо Александр! и за решение и за Yii =)

  11. №9510
    Максим
    Максим 26 дек. 2014 г., 9:32:38

    По пункту N6: На code.google.com последней версии библиотеки нет (только устаревшие), актуальный репозиторий на GitHub

  12. №9676
    Максим
    Максим 10 марта 2015 г., 9:51:06

    Выдает ошибку синтаксическую в строке 15 privatekey.p12'), )); PHP Parse error: syntax error, unexpected ';' in /home/u/ulovisto/API/public_html/index.php on line 14 [Tue Mar 10 09:47:22 2015] [error] PHP Parse error: syntax error, unexpected ')' in /home/u/ulovisto/API/public_html/index.php on line 15 [Tue Mar 10 09:49:51 2015] [error] [client 95.66.182.68] PHP Parse error: syntax error, unexpected ')' in /home/u/ulovisto/API/public_html/index.php on line 15

    Как решить?

  13. №9677
    Sam
    Sam 10 марта 2015 г., 11:56:13

    Вы пытаетесь подключить ключик как PHP-файл?

  14. №9685
    Максим
    Максим 11 марта 2015 г., 16:20:15

    Запрос настроили. Сейчас думаем как запихнуть массив из GA в нормальные таблицы и графики... есть опыт или мысли. Будем благодарны за помощь

  15. №9693
    sergey
    sergey 17 марта 2015 г., 11:24:36

    Подскажите в из-за ошибка ? The Google PHP API library needs the openssl PHP extension

  16. №9695
    sergey
    sergey 17 марта 2015 г., 16:37:38

    С ошибкой, котору описал выше, справился. Она появлялась на локальном сервере. На сайте её нет. Но возникла другая ошибка. file_exists(): open_basedir restriction in effect. File(/tmp/Google_Client/ad/ad41610b13f338f946b8e9e744ec68f0.lock) is not within the allowed path(s): Как решить???

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.