В этой статье рассмотрим, как в PHP можно получить доступ к информации Google аналитики, используя API, которую она предоставляет, и сервисный аккаунт. В качестве API будем использовать Analytics Reporting 4 версии.

Настройка Google Analytics для работы с ней по API

Если на сайте для сбора статистики пользователей используется Google Analytics (GA), то воспользоваться данными, предоставляемыми этим сервисом, вы можете не только в веб-интерфейсе посредством отчетов, но и по API.

Что это значит? А это значит, что необходимые данные из GA мы можем получать программно, а затем, например, использовать их на сайте или в веб-приложении.

Какие задачи с помощью Google Analytics API можно решить на сайте?

  1. Вывести на странице её количество просмотров. Если эту задачу реализовать классическим способом, то нам в этом случае потребуется создавать таблицы в базе данных, писать логику на php и т.д.
  2. Отобразить на сайте самые популярные статьи (страницы) за последнюю неделю или другой период на сайте.

С помощью GA можно решить не только эти задачи на сайте, но и множество других. Но в этой статье остановимся на рассмотрении только этих двух.

Но перед тем, как перейти к практической части сначала рассмотрим, как включить Google Analytics API и принципы работы с ним на PHP.

Подготовка к работе с Google API

Перед началом работы с четвертой версии Analytics Reporting API необходимо выполнить следующие основные шаги.

1. Включить Google Analytics Reporting API.

Для этого нужно открыть страницу «API и сервисы Google». В поле поиска ввести «Google Analytics Reporting API», перейти на страницу данного API и включить его.

Поиск Google Analytics Reporting API

2. Создать сервисный аккаунт.

Для этого необходимо открыть страницу «Сервисные аккаунты».

Если проект уже есть, то нажимаем на кнопку «Выбрать» и выбираем существующий проект. Если проекта нет, то создаём новый.

После этого создаём сервисный аккаунт в только что созданном или выбранном проекте. Для этого нажимаем на кнопку «Создать сервисный аккаунт».

Создание сервисного аккаунта в Google IAM

Вводим название сервисного аккаунта и нажимаем на кнопку «Создать». На странице «Права доступа для сервисного аккаунта (необязательно)» нажимаем на кнопку «Продолжить».

Затем создаём новый ключ. Для этого нажимаем на кнопку «Создать ключ». В качестве типа ключа выбираем значение «JSON» и нажимаем на кнопку «Создать». Нажимаем на кнопку «Готово».

Сгенерированный ключ будет загружен на ваш компьютер, он нам понадобится позже.

В конце этого шага скопируем в буфер обмена адрес электронной почты сервисного аккаунта, он нам нужен будет для выполнения следующего действия.

3. Добавить в Google Analytics сервисный аккаунт.

Для этого необходимо перейти в Google Analytics и нажать на кнопку «Администратор».

Панель администратора в Google Analytics

После этого в открывшейся странице нажать на «Управление доступом» в разделе «Аккаунт». Затем нажать на значок «Плюс» и выбрать пункт «Добавить пользователей». В открывшуюся форму вставить из буфера обмена адрес электронной почты сервисного аккаунта и отметить в качестве разрешений только опцию «Просмотр и анализ». Нажать на кнопку «Добавить».

Теперь этот пользователь будет иметь доступ к аналитике через API.

Установка клиентской библиотеки для PHP

Клиентскую библиотеку Google API для PHP можно загрузить вручную или получить при помощи Composer.

Для обычной установки скачайте архив, распакуйте и загрузите его на сервер, например, в каталог ga.

Для установки библиотеки с помощью Composer введите следующую команду:

composer require google/apiclient:^2.0

После установки Google API для PHP загрузите в эту же папку JSON файл, который мы получили на этапе создания сервисного аккаунта.

Защитим доступ к этой папке и вложенным в неё файлам. Если вы используете веб-сервер Apache, то для этого создадим в этой папке файл .htaccess со следующим содержимым:

# line below if for Apache 2.4
<ifModule mod_authz_core.c>
    Require all denied
</ifModule>

# line below if for Apache 2.2
<ifModule !mod_authz_core.c>
    deny from all
    Satisfy All
</ifModule>

# section for Apache 2.2 and 2.4
IndexIgnore *

Примеры использования данных из Google Analytics на сайте

Пример №1. Использования Google API для получения самого популярного контента на сайте.

В этом примере разберём как используя Google Analytics Reporting API можно получить 7 самых просматриваемых страниц за последние 7 дней на сайте.

Для этого создадим файл top_pages.php со следующим кодом:

<?php

require_once __DIR__ . '/vendor/autoload.php';

$analytics = initializeAnalytics();
$response = getReport($analytics);
printResults($response);

function initializeAnalytics()
{

  // здесь нужно указать имя JSON-файла, содержащего сгенерированный ключ
  $KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json';

  $client = new Google_Client();
  $client->setApplicationName("Top pages");
  $client->setAuthConfig($KEY_FILE_LOCATION);
  $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
  $analytics = new Google_Service_AnalyticsReporting($client);

  return $analytics;
}

function getReport($analytics) {

  // здесь нужно указать значение своего VIEW_ID
  $VIEW_ID = "<REPLACE_WITH_VIEW_ID>";

  // создадим объект DateRange (диапазон дат)
  $dateRange = new Google_Service_AnalyticsReporting_DateRange();
  // установка начальной даты
  $dateRange->setStartDate("8daysAgo");
  // установка конечной даты
  $dateRange->setEndDate("yesterday");

  // создадим объект Metrics (показатели данных)
  $pageviews = new Google_Service_AnalyticsReporting_Metric();
  // выражение показателя (в данном случае простое имя ga:pageviews – количество просмотров)
  $pageviews->setExpression("ga:pageviews");
  // задаём альтернативное название для выражения показателя
  $pageviews->setAlias("pageviews");

  // создадим объект Dimensions (параметры данных в запросе)
  $pagepath = new Google_Service_AnalyticsReporting_Dimension();
  // название параметра, по которому подбираются данные (в данном случае адрес страницы)
  $pagepath->setName("ga:pagePath");

  // создадим ещё один объект Dimensions (параметры данных в запросе)
  $pagetitle = new Google_Service_AnalyticsReporting_Dimension();
  // этим параметром установим, что нам необходимо выбрать название страницы
  $pagetitle->setName("ga:pageTitle");

  // создадим объект OrderBy (порядок сортировки строк на выходе)
  $ordering = new Google_Service_AnalyticsReporting_OrderBy();
  // название поля, по которому выполняется сортировка
  $ordering->setFieldName("ga:pageviews");
  // тип сортировки (по значению VALUE)
  $ordering->setOrderType("VALUE");
  // порядок сортировки, применяемый к полю
  $ordering->setSortOrder("DESCENDING");

  // создадим объект ReportRequest (запрос)
  $request = new Google_Service_AnalyticsReporting_ReportRequest();
  // добавим к запросу идентификатор viewId
  $request->setViewId($VIEW_ID);
  // добавим к запросу максимальное количество строк, которое хотим получить
  $request->setPageSize("7");
  // добавим к запросу диапазон дат
  $request->setDateRanges($dateRange);
  // добавим к запросу показатели
  $request->setMetrics(array($pageviews));
  // добавим к запросу параметры
  $request->setDimensions(array($pagepath, $pagetitle));
  // добавим к запросу порядок сортировки
  $request->setOrderBys($ordering);

  // создадим объект GetReportsRequest
  $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  $body->setReportRequests( array( $request) );
  return $analytics->reports->batchGet( $body );
}

function printResults($reports) {
  for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
    $report = $reports[ $reportIndex ];
    $header = $report->getColumnHeader();
    $dimensionHeaders = $header->getDimensions();
    $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
    $rows = $report->getData()->getRows();

    for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
      $row = $rows[ $rowIndex ];
      $dimensions = $row->getDimensions();
      $metrics = $row->getMetrics();
      for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
        print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
      }

      for ($j = 0; $j < count($metrics); $j++) {
        $values = $metrics[$j]->getValues();
        for ($k = 0; $k < count($values); $k++) {
          $entry = $metricHeaders[$k];
          print($entry->getName() . ": " . $values[$k] . "\n");
        }
      }
    }
  }
}

Скачать данный файл с Github можно по этой ссылке.

В этом файле нужно указать свои данные.

Во-первых, нужно указать имя JSON-файлу, содержащему сгенерированный ключ.

$KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json';

Во-вторых, указать значение VIEW_ID.

$VIEW_ID = "";

Узнать значение этого параметра для своей аналитики можно с помощью инструмента Account Explorer.

Приложению "ga-dev-tools.appspot.com" необходимо предоставить разрешение на доступ к вашему аккаунту Google.

Кроме этого, данное приложение имеет очень хороший инструмент для создания запросов.

В этом примере все основные моменты снабжены комментариями. Создание запроса на получение данных осуществляется с помощью объекта reportRequests. Параметры для этого запроса задаются с помощью объектов DateRange, Metrics, Dimensions, OrderBy. Установка этих параметров к reportRequests осуществляется посредством использования его специальных методов.

Пример №2. Использования Google API для получения количества просмотров определённой страницы на сайте.

В этом случае нам необходимо в запросе установить:

  • диапазон дат (начальная дата, должна равняться старту вашего проекта; конечная дата – текущей дате);
  • показатель метрике, равный ga:pageviews (количеству просмотров);
  • фильтр по параметру ga:pagePath, значение которого должно быть равно URL определённой страницы.
// диапазон дат
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate("2014-01-01"); // старт проекта
$dateRange->setEndDate("today");

// задание метрики, равное ga:pageviews
$pageviews = new Google_Service_AnalyticsReporting_Metric();
$pageviews->setExpression("ga:pageviews");
$pageviews->setAlias("pageviews");

// создание фильтра по параметру ga:pagePath
$dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter();
$dimensionFilter->setDimensionName('ga:pagePath');
$dimensionFilter->setOperator('EXACT');
$dimensionFilter->setExpressions('/html-and-css/css-selector');

// создание группы фильтров по параметру
$dimensionFilterClause = new Google_Service_AnalyticsReporting_DimensionFilterClause();
$dimensionFilterClause->setFilters($dimensionFilter);

// создадим объект ReportRequest (запрос)
$request = new Google_Service_AnalyticsReporting_ReportRequest();
// добавим к запросу идентификатор viewId
$request->setViewId($VIEW_ID);
// добавим к запросу диапазон дат
$request->setDateRanges($dateRange);
// добавим к запросу показатели
$request->setMetrics(array($pageviews));
// добавим к запросу фильтры
$request->setDimensionFilterClauses([$dimensionFilterClause]);

Полный код примера доступен на Github, к нему можно перейти по этой ссылке.

Как вариант полученные данные можно выгрузить в формате JSON в некоторый файл (в этом примере в /assets/ga_pageviews.json). Для этого нужно написать соответствующую функцию, например, printResultInFile и использовать её для обработки ответа.

printResultInFile($response);

Полный код файла доступен на Github по этому адресу.

Затем можно написать небольшой скрипт, например, get_views.php. Он будет находить в файле количество просмотров для некоторой страницы зная её путь.

Этот скрипт будет состоять из одной функции:

<?php
function getViews($path) {
  $result = 0;
  $items = json_decode(file_get_contents('ga_pageviews.json'));
  foreach($items as $item) {
      if ($item->{'ga:pagePath'} === $path) {
          $result = $result + (int)$item->{'pageviews'};
      }
  }
  return $result;
}

Теперь чтобы получить данные необходимо просто вызвать функцию getViews и передать ей в качестве параметра путь к странице:

echo getViews('/html-and-css/css-selector');

Что-то подобное можно написать и для первого примера. Т.е. добавить в php-скрипт код, который будет сохранять ответ, а именно 7 самых популярных статей сайта за неделю, в JSON. Далее использовать этот файл для вывода на сайт информационной панели с этими ресурсами. Обновлять файл JSON можно, например, с помощью планировщика cron, запуская php скрипт раз в час или через другое определённое количество времени.