Last active
February 28, 2021 06:51
-
-
Save itchief/593f707da0ef51191f052de822357da8 to your computer and use it in GitHub Desktop.
How to get top 7 pageviews from Google Analytics Reporting API v4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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