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

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

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

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

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

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

Теперь нам предлагают скачать приватный ключ. Скачиваем и сохраняем его директорию проекта, но так, чтобы права за чтение были только у скрипта.
Пароль по-умолчанию на приватный ключ — notasecret

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

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

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.