Как почасово получать данные за два дня? (API отчетов Google Analytics v4, библиотека PHP)

Мне нужно иметь метрики отчета на почасовой основе в промежуток времени, проходящий до полуночи. Например, начиная с 20:00 и заканчивая в 03:00. Для этого я установил диапазон дат, где StartDate 'yesterday' и EndDate 'today':

$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate('yesterday');
$dateRange->setEndDate('today');

И для почасового извлечения данных я использовал два сегмента. Один предназначен для данных до полуночи (например, с 20:00 до 23:59), а другой — для данных после полуночи (например, с 00:00 до 03:00). В JSON-запросе сегмент выглядит примерно так: sessions::condition::ga:hour<>20_23,ga:hour<>00_03:

https://support.google.com/analytics/answer/7331978?hl=en

Ниже приведен мой код для запроса с некоторыми фильтрами измерений и метрик (то есть я запрашиваю количество просмотров страниц у пользователей, которые находятся на странице более 8 секунд, заголовок которой содержит слово: «портфолио»):

// How to create $client you can read in Google Analytics documentation
$analytics = new Google_Service_AnalyticsReporting($client);

// Create the DateRange object.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate('yesterday');
$dateRange->setEndDate('today');

// Create the Metrics object.
$metrics = new Google_Service_AnalyticsReporting_Metric();
$metrics->setExpression('ga:pageviews');

// Create the ReportRequest object.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId(VIEW_ID);
$request->setDateRanges([$dateRange]);
$request->setMetrics(array($metrics));

// Create the DimensionFilter.
$dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter();
$dimensionFilter->setDimensionName('ga:pageTitle');
$dimensionFilter->setOperator('PARTIAL');
$dimensionFilter->setExpressions(['portfolio']);

// Create the MetricFilter.
$metricFilter = new Google_Service_AnalyticsReporting_MetricFilter();
$metricFilter->setMetricName('ga:timeOnPage');
$metricFilter->setOperator('GREATER_THAN');
$metricFilter->setComparisonValue('8');

// Create the DimensionFilterClauses
$dimensionFilterClause = new
Google_Service_AnalyticsReporting_DimensionFilterClause();
$dimensionFilterClause->setFilters($dimensionFilter);
$request->setDimensionFilterClauses(array($dimensionFilterClause));

// Create the MetricFilterClauses
$metricFilterClause = new
Google_Service_AnalyticsReporting_MetricFilterClause();
$metricFilterClause->setFilters($metricFilter);
$request->setMetricFilterClauses([$metricFilterClause]);

// Creating multiple segments with function createSegment()
$segments = [];
$segments[] = createSegment('15', '23', 'Before Midnight');
$segments[] = createSegment('00', '10', 'After Midnight');

//Create the hour dimension.
$hour = new Google_Service_AnalyticsReporting_Dimension();
$hour->setName("ga:hour");

// Create the segment dimension.
$segmentDimensions = new Google_Service_AnalyticsReporting_Dimension();
$segmentDimensions->setName("ga:segment");

// Set the Segment to the ReportRequest object.
$request->setDimensions(array($hour, $segmentDimensions));
$request->setSegments($segments);

// Get report request
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests(array($request));
$report = $analytics->reports->batchGet($body);
$reports = $report->getReports();

function createSegment($min, $max, $name) {

// Set a segment for hourly time range. For daily time range there is no neen id a segment.
$dimensionFilter = new Google_Service_AnalyticsReporting_SegmentDimensionFilter();
$dimensionFilter->setDimensionName('ga:hour');
$dimensionFilter->setOperator('NUMERIC_BETWEEN');

// $dimensionFilter->setExpressions($alert->get_expressions());
$dimensionFilter->setMinComparisonValue($min);
$dimensionFilter->setMaxComparisonValue($max);

// 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($name);

// Create the Segments object.
$segment = new Google_Service_AnalyticsReporting_Segment();
$segment->setDynamicSegment($dynamicSegment);

return $segment;
}

Вы можете увидеть ответ на запрос ниже:

Google_Service_AnalyticsReporting_GetReportsResponse Object
(
[collection_key:protected] => reports
[queryCost] =>
[reportsType:protected] => Google_Service_AnalyticsReporting_Report
[reportsDataType:protected] => array
[resourceQuotasRemainingType:protected] => Google_Service_AnalyticsReporting_ResourceQuotasRemaining
[resourceQuotasRemainingDataType:protected] =>
[internal_gapi_mappings:protected] => Array
(
)

[modelData:protected] => Array
(
[reports] => Array
(
[0] => Google_Service_AnalyticsReporting_Report Object
(
[columnHeaderType:protected] => Google_Service_AnalyticsReporting_ColumnHeader
[columnHeaderDataType:protected] =>
[dataType:protected] => Google_Service_AnalyticsReporting_ReportData
[dataDataType:protected] =>
[nextPageToken] =>
[internal_gapi_mappings:protected] => Array
(
)

[modelData:protected] => Array
(
[columnHeader] => Array
(
[dimensions] => Array
(
[0] => ga:hour
[1] => ga:segment
)

[metricHeader] => Array
(
[metricHeaderEntries] => Array
(
[0] => Array
(
[name] => ga:pageviews
[type] => INTEGER
)

)

)

)

[data] => Google_Service_AnalyticsReporting_ReportData Object
(
[collection_key:protected] => totals
[dataLastRefreshed] =>
[isDataGolden] =>
[maximumsType:protected] => Google_Service_AnalyticsReporting_DateRangeValues
[maximumsDataType:protected] => array
[minimumsType:protected] => Google_Service_AnalyticsReporting_DateRangeValues
[minimumsDataType:protected] => array
[rowCount] => 6
[rowsType:protected] => Google_Service_AnalyticsReporting_ReportRow
[rowsDataType:protected] => array
[samplesReadCounts] =>
[samplingSpaceSizes] =>
[totalsType:protected] => Google_Service_AnalyticsReporting_DateRangeValues
[totalsDataType:protected] => array
[internal_gapi_mappings:protected] => Array
(
)

[modelData:protected] => Array
(
[rows] => Array
(
[0] => Array
(
[dimensions] => Array
(
[0] => 00
[1] => After Midnight
)

[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 15
)

)

)

)

[1] => Array
(
[dimensions] => Array
(
[0] => 01
[1] => After Midnight
)

[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 3
)

)

)

)

[2] => Array
(
[dimensions] => Array
(
[0] => 15
[1] => Before Midnight
)

[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 3
)

)

)

)

[3] => Array
(
[dimensions] => Array
(
[0] => 16
[1] => Before Midnight
)

[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 7
)

)

)

)

[4] => Array
(
[dimensions] => Array
(
[0] => 19
[1] => Before Midnight
)

[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 5
)

)

)

)

[5] => Array
(
[dimensions] => Array
(
[0] => 22
[1] => Before Midnight
)

[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 4
)

)

)

)

)

[totals] => Array
(
[0] => Google_Service_AnalyticsReporting_DateRangeValues Object
(
[collection_key:protected] => values
[pivotValueRegionsType:protected] => Google_Service_AnalyticsReporting_PivotValueRegion
[pivotValueRegionsDataType:protected] => array
[values] => Array
(
[0] => 37
)

[internal_gapi_mappings:protected] => Array
(
)

[modelData:protected] => Array
(
)

[processed:protected] => Array
(
)

)

)

[minimums] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 3
)

)

)

[maximums] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 15
)

)

)

)

[processed:protected] => Array
(
[totals] => 1
)

)

)

[processed:protected] => Array
(
[data] => 1
)

)

)

)

[processed:protected] => Array
(
[reports] => 1
)

)

Данные, которые меня интересуют, находятся здесь: [modelData:protected] => [reports] => [0] => [modelData:protected] => [data] => [modelData:protected] => [rows] => [],

Проблема в том, что, поскольку сегменты применяются к каждому дню, я получаю данные «до полуночи» и «после полуночи» за оба дня. (Я не упоминаю, что данные также отбираются по часам). И нет никаких признаков того, с каким днем ​​значения связаны.

Итак, вопрос в следующем:
Есть ли возможность узнать, с каким днем ​​связаны данные?

0

Решение

Я наконец решил проблему. Я решил проанализировать живые данные с различными запросами.

Вот и получается, что с одним диапазоном дат, вот так:

$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate('yesterday');
$dateRange->setEndDate('today');

метрические значения суммируются. То есть это значение метрики, которое вы можете увидеть ниже с [values] ключ, состоит из значений для 'today' а также 'yesterday' часа '19':

[4] => Array
(
[dimensions] => Array
(
[0] => 19
[1] => Before Midnight
)
[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 5
)
)
)
)

Но если мы установим два диапазона дат:

$dateRange[0] = new Google_Service_AnalyticsReporting_DateRange();
$dateRange[0]->setStartDate('yesterday');
$dateRange[0]->setEndDate('yesterday');

$dateRange[1] = new Google_Service_AnalyticsReporting_DateRange();
$dateRange[1]->setStartDate('today');
$dateRange[1]->setEndDate('today');

$request->setDateRanges($dateRange);

один для 'yesterday' и еще один для 'today' метрическое значение с [values] Ключ будет иметь два элемента массива, где первый с [0] Индекс будет связан с диапазоном дат, установленным первым и вторым с [1] Индекс будет связан с диапазоном дат, установленным вторым:

[4] => Array
(
[dimensions] => Array
(
[0] => 19
[1] => Before Midnight
)
[metrics] => Array
(
[0] => Array
(
[values] => Array
(
[0] => 2
[1] => 3
)
)
)
)

Таким образом, мы можем выбрать все значения с [0] индекс где [dimensions] является 'Before midnight'и все значения с [1] индекс где [dimensions] является 'After midnight'и суммируйте их вместе. И сумма будет отображать все страницы за период времени, начинающийся в 20:00 и заканчивающийся в 03:00. Вуаля!
Надеюсь, что это мое объяснение поможет кому-то в поисках решения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]