Роман Теличко

Заметки веб-разработчика/админа

PHP. Достаём данные из Google Analytics через API используя Service Account

// | 10674 просмотров | 3 комментария

Сегодня я хотел бы поделиться знаниями по извлечении данных из Google Analytics, используя их API v3 на стороне сервера (server-side), т.е. без участия браузера пользователя.
Самое странное, что в Сети в основном описаны все примеры с использованием эмуляции браузера и аккаунта пользователя (пара email+пароль). Мы так делать не будем, т.к. это глупо и не красиво 🙂
Приступим.

Прежде всего идём к Консоль Google и там в левом выпадающем меню создаём новый проект (если у вас его ещё нет).
Google APIs Console: Create Project

После создания проекта мы получаем страницу All Services, где передвигаем ползунок из положения Off в положение On для Analytics API.
Сразу обращаю ваше внимание на то, что Google даёт нам только 50000 запросов в день к этому API. А это значит, если у вас будет обращений больше этого числа, то обязательно стоит подумать о кэшировании результатов.
Google APIs Console: All Services

Теперь переходи на вкладку API Access и нажимаем там на большую синюю кнопку Create an OAuth 2.0 client ID….
Заполняем и нажимаем кнопку Next
Google APIs Console: Create Client ID

В следующем окне выбираем тип приложения (Application type) — Service account. Он не имеет опций настройки. И нажимаем Create Client ID.
Google APIs Console: Create Client ID (2)

Теперь нам предлагают скачать приватный ключ. Скачиваем и сохраняем его директорию проекта, но так, чтобы права за чтение были только у скрипта.
Пароль по-умолчанию на приватный ключ — notasecret
Google APIs Console: Public-Private Key Pair Generated

Теперь скачиваем Google API PHP Client.
Извлекаем и забираем только папку src, всё остальное опционально.

Далее берём мой код и подставляем в него свои значения для констант CLIENT_ID и SERVICE_EMAIL из Консоли Google на странице API Access в блоке Service account.
Значением KEY_FILE_PATH будет путь к файлу приватного ключа.
Google APIs Console: Service Account

setApplicationName( 'Analytics' );

$client->setClientId( CLIENT_ID );
$client->setAccessType( 'offline_access');  

$client->setAssertionCredentials(
    new Google_AssertionCredentials(
        SERVICE_EMAIL,
        array( ANALYTICS_SCOPE ),
        file_get_contents( KEY_FILE_PATH )
        )
    );

$client->setUseObjects( true );
    //   if associative arrays should be returned (default behavior).
    //    if objects should be returned by the service classes.

///////////////////////////////////////////////////////////////////////////////

// create service
$service = new Google_AnalyticsService( $client );

///////////////////////////////////////////////////////////////////////////////

// get data
$results = $service->data_ga->get(
    'ga:XXXXXXX',
    '2013-01-01',
    '2013-01-22',
    'ga:visits',
    array(
        'dimensions'    => 'ga:source,ga:date',
        'sort'          => 'ga:date,-ga:visits',
        'filters'       => 'ga:visits>100',
        'max-results'   => '100'
        )
    );
    
// you can use Google Analytics Query Explorer 2: https://ga-dev-tools.appspot.com/explorer/
    
///////////////////////////////////////////////////////////////////////////////

// $results

///////////////////////////////////////////////////////////////////////////////

И ещё одно, без которого ничего работать не будет 🙂
Идём в Google Analytics, переходим в Администратор → Управление аккаунтами и добавляем пользователя с электронным адресом, что в SERVICE_EMAIL (с правами пользователя).

Для построения запросов я рекомендую использовать Google Analytics Query Explorer 2.

  • Антон

    Все четко и понятно. Статья на 5+. Заработало с пол пинка, СПАСИБО автору!

  • Neolot

    Спасибо за статью, здорово помогло разобраться

  • kolesoxxx

    Огромный респект, я мучался с браузерной версией аналитики, а так все гораздо проще, спасибо за пост