Skip to content

Instantly share code, notes, and snippets.

@itchief
Last active February 28, 2021 06:51
Show Gist options
  • Save itchief/593f707da0ef51191f052de822357da8 to your computer and use it in GitHub Desktop.
Save itchief/593f707da0ef51191f052de822357da8 to your computer and use it in GitHub Desktop.
How to get top 7 pageviews from Google Analytics Reporting API v4
<?php
// Загрузим PHP клиентскую библиотеку для Google API.
require_once __DIR__ . '/vendor/autoload.php';
$analytics = initializeAnalytics();
$response = getReport($analytics);
printResults($response);
//printResultsAsJson($response);
/**
* Инициализация сервисного объекта Analytics Reporting API V4.
*
* @return авторизованный сервисный объект Analytics Reporting API V4.
*/
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;
}
/**
* запрос через Analytics Reporting API V4.
*
* @param авторизованный сервисный объект Analytics Reporting API V4.
* @return ответ Analytics Reporting API V4.
*/
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 );
}
/**
* Парсинг и печать Analytics Reporting API V4 ответа.
*
* @param ответ Analytics Reporting API V4.
*/
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");
}
}
}
}
}
// возвращение ответа в формате JSON, который нужно положить в файл /assets/ga_top_pages.json
function printResultsAsJson($reports) {
$darray = array();
$marray = array();
$mkey = array();
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 ($j = 0; $j < count($metricHeaders); $j++) {
$entry = $metricHeaders[$j];
$mkey[] = $entry->getName();
}
for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
$row = $rows[$rowIndex];
$dimensions = $row->getDimensions();
$metrics = $row->getMetrics();
$darray[] = array_combine($dimensionHeaders, $dimensions);
for ($j = 0; $j < count($metrics); $j++) {
$values = $metrics[$j]->getValues();
$marray[] = array_combine($mkey, $values);
}
}
}
$i = 0;
$mdarray = array();
foreach($darray as $value) {
$mdarray[] = array_merge($value, $marray[$i]);
$i++;
}
$json_data = json_encode($mdarray);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/assets/ga_top_pages.json', $json_data);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment