Добавление измерения ga:pagePath для получения просмотров страниц для определенного URL-адреса с помощью API отчетов Google Analytics v4
В проводнике запросов ( https://ga-dev-tools.appspot.com/query-explorer/) указывается добавить фильтр ga:pagePath с URL-адресом в качестве значения, чтобы получить просмотры страниц для определенного URL-адреса.
Для нового API отчетов я попытался добавить ga:pagePath в качестве измерения, но он не дал результатов. Вот код:
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate("7daysAgo");
$dateRange->setEndDate("today");
// Create the Metrics object.
$sessions = new Google_Service_AnalyticsReporting_Metric();
$sessions->setExpression("ga:pageviews");
$sessions->setAlias("pageviews");
//Create the browser dimension.
$path = new Google_Service_AnalyticsReporting_Dimension();
$path->setName("ga:pagePath");
// Create the segment dimension.
$segmentDimensions = new Google_Service_AnalyticsReporting_Dimension();
$segmentDimensions->setName("ga:segment");
// Create Dimension Filter.
$dimensionFilter = new Google_Service_AnalyticsReporting_SegmentDimensionFilter();
$dimensionFilter->setDimensionName("ga:pagePath");
$dimensionFilter->setOperator("EXACT");
$dimensionFilter->setExpressions(array("/post/digital-footprints-the-trails-you-leave-on-the-web"));
// Create Segment Filter Clause.
$segmentFilterClause = new Google_Service_AnalyticsReporting_SegmentFilterClause();
$segmentFilterClause->setDimensionFilter($dimensionFilter);
// Create the Or Filters for Segment.
$orFiltersForSegment = new Google_Service_AnalyticsReporting_OrFiltersForSegment();
$orFiltersForSegment->setSegmentFilterClauses(array($segmentFilterClause));
// Create the Simple Segment.
$simpleSegment = new Google_Service_AnalyticsReporting_SimpleSegment();
$simpleSegment->setOrFiltersForSegment(array($orFiltersForSegment));
// Create the Segment Filters.
$segmentFilter = new Google_Service_AnalyticsReporting_SegmentFilter();
$segmentFilter->setSimpleSegment($simpleSegment);
// Create the Segment Definition.
$segmentDefinition = new Google_Service_AnalyticsReporting_SegmentDefinition();
$segmentDefinition->setSegmentFilters(array($segmentFilter));
// Create the Dynamic Segment.
$dynamicSegment = new Google_Service_AnalyticsReporting_DynamicSegment();
$dynamicSegment->setSessionSegment($segmentDefinition);
$dynamicSegment->setName("Pageview for the URL");
// Create the Segments object.
$segment = new Google_Service_AnalyticsReporting_Segment();
$segment->setDynamicSegment($dynamicSegment);
// Create the ReportRequest object.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId($VIEW_ID);
$request->setDateRanges($dateRange);
$request->setDimensions(array($path, $segmentDimensions));
$request->setSegments(array($segment));
$request->setMetrics(array($sessions));
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests( array( $request) );
return $analytics->reports->batchGet( $body );
Любая помощь будет оценена. В основном я пытаюсь создать задание Cron, которое будет использовать API отчетов Google Analytics для извлечения просмотров страниц для различных статей на моем веб-сайте и обновления того же в базе данных, это будет сделано один раз или два раза в день. Ниже приведен код, который я сейчас использую для печати отчета:
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");
}
}
}
}
}
2 ответа
Я нашел решение этой проблемы. Однако я выбрал не объектно-ориентированный подход, а массив для генерации запроса. Я надеюсь, что это поможет вам решить вашу проблему.
// Загрузка клиентской библиотеки PHP API Google.
require_once __DIR__ . '/vendor/autoload.php';
$VIEW_ID = "replace_with_your_id";
$start_date = "2017-01-01";
$end_date = "2017-12-31";
$analytics = initializeAnalytics();
$reports = getReports("/f/0w3ciqnw");
if ($reports) echo getViews($reports);
/**
* Initializes an Analytics Reporting API V4 service object.
*
* @return An authorized Analytics Reporting API V4 service object.
*/
function initializeAnalytics()
{
// Use the developers console and download your service account
// credentials in JSON format. Place them in this directory or
// change the key file location if necessary.
$KEY_FILE_LOCATION = '../service-account-credentials.json';
// Create and configure a new client object.
$client = new Google_Client();
$client->setApplicationName("FriendChip Analytics Reporting");
$client->setAuthConfig($KEY_FILE_LOCATION);
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
$analytics = new Google_Service_AnalyticsReporting($client);
return $analytics;
}
function getReports($page_path)
{
global $VIEW_ID, $start_date, $end_date, $analytics;
$query = [
"viewId" => $VIEW_ID,
"dateRanges" => [
"startDate" => $start_date,
"endDate" => $end_date
],
"metrics" => [
"expression" => "ga:pageviews"
],
"dimensions" => [
"name" => "ga:pagepath"
],
"dimensionFilterClauses" => [
'filters' => [
"dimension_name" => "ga:pagepath",
"operator" => "ENDS_WITH", // valid operators can be found here: https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#FilterLogicalOperator
"expressions" => $page_path
]
]
];
// build the request and response
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests(array($query));
// now batchGet the results https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet
$report = $analytics->reports->batchGet($body);
return $report;
}
function getViews($reports)
{
$rows = $reports[0]->getData()->getRows();
if ($rows){
$metrics = $rows[0]->getMetrics()[0]->values[0];
if ($metrics){
return $metrics;
}
}
return false;
}
Я попробовал код, он работает отлично, но с одним фильтром.. Он не работает с двумя фильтрами:
"metrics" => [
"expression" => "ga:pageviews"
],
"dimensions" => [
"name" => "ga:pagepath",
"name" => "ga:medium",
"name" => "ga:week"
],
"dimensionFilterClauses" => [
'filters' => [
"dimension_name" => "ga:medium",
"operator" => "EXACT", // valid operators can be found here: https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#FilterLogicalOperator
"expressions" => "organic"
],
'filters' => [
"dimension_name" => "ga:pagepath",
"operator" => "EXACT", // valid operators can be found here: https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#FilterLogicalOperator
"expressions" => $page_path
]