Как в PHP получить данные из Google Analytics?

В этой статье рассмотрим, как в PHP можно получить доступ к информации Google аналитики, используя API, которую она предоставляет, и сервисный аккаунт. В качестве API будем использовать Analytics Reporting 4 версии.
Настройка Google Analytics для работы с ней по API
Если на сайте для сбора статистики пользователей используется Google Analytics (GA), то воспользоваться данными, предоставляемыми этим сервисом, вы можете не только в веб-интерфейсе посредством отчетов, но и по API.
Что это значит? А это значит, что необходимые данные из GA мы можем получать программно, а затем, например, использовать их на сайте или в веб-приложении.
Какие задачи с помощью Google Analytics API можно решить на сайте?
- Вывести на странице её количество просмотров. Если эту задачу реализовать классическим способом, то нам в этом случае потребуется создавать таблицы в базе данных, писать логику на php и т.д.
- Отобразить на сайте самые популярные статьи (страницы) за последнюю неделю или другой период на сайте.
С помощью GA можно решить не только эти задачи на сайте, но и множество других. Но в этой статье остановимся на рассмотрении только этих двух.
Но перед тем, как перейти к практической части сначала рассмотрим, как включить Google Analytics API и принципы работы с ним на PHP.
Подготовка к работе с Google API
Перед началом работы с четвертой версии Analytics Reporting API необходимо выполнить следующие основные шаги.
1. Включить Google Analytics Reporting API.
Для этого нужно открыть страницу «API и сервисы Google». В поле поиска ввести «Google Analytics Reporting API», перейти на страницу данного API и включить его.

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

Вводим название сервисного аккаунта и нажимаем на кнопку «Создать». На странице «Права доступа для сервисного аккаунта (необязательно)» нажимаем на кнопку «Продолжить».
Затем создаём новый ключ. Для этого нажимаем на кнопку «Создать ключ». В качестве типа ключа выбираем значение «JSON» и нажимаем на кнопку «Создать». Нажимаем на кнопку «Готово».
Сгенерированный ключ будет загружен на ваш компьютер, он нам понадобится позже.
В конце этого шага скопируем в буфер обмена адрес электронной почты сервисного аккаунта, он нам нужен будет для выполнения следующего действия.
3. Добавить в 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 скрипт раз в час или через другое определённое количество времени.