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