如何使用来自 Analytics API 的数据将相同数量的行传递给 Google 图表 API
How do I pass same number rows to Google Charts API with data from Analytics API
我正在尝试从 Analytics API 获取一些数据,然后使用 Google 图表 API.
显示面积图
以下数组包含来自 Analytics API v4 的两天数据。屏幕截图显示了查询资源管理器中 Table 中的数据如何 returned/rendered。
<?php
$results = [
0 =>
[
'dimensions' =>
[
0 => 'Organic Search',
1 => '20160831',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '13',
1 => '0',
2 => '0.0',
],
],
],
],
1 =>
[
'dimensions' =>
[
0 => 'Social',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '7',
1 => '0',
2 => '0.0',
],
],
],
],
2 =>
[
'dimensions' =>
[
0 => 'Organic Search',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '6',
1 => '0',
2 => '0.0',
],
],
],
],
3 =>
[
'dimensions' =>
[
0 => 'Social',
1 => '20160831',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '6',
1 => '0',
2 => '0.0',
],
],
],
],
4 =>
[
'dimensions' =>
[
0 => 'Referral',
1 => '20160831',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '3',
1 => '0',
2 => '0.0',
],
],
],
],
5 =>
[
'dimensions' =>
[
0 => 'Referral',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '2',
1 => '0',
2 => '0.0',
],
],
],
],
6 =>
[
'dimensions' =>
[
0 => 'Direct',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '1',
1 => '0',
2 => '0.0',
],
],
],
],
];
?>
我正在尝试将 30 天的默认渠道分组和会话数据绘制到面积图中。图表接受的数据格式如下:
[
[
{
"label": "Day",
"id": "day"
},
{
"label": "Organic Search",
"id": "organic_search",
"type": "number"
},
{
"label": "Referral",
"id": "referral",
"type": "number"
},
{
"label": "Social",
"id": "social",
"type": "number"
},
{
"label": "Direct",
"id": "direct",
"type": "number"
}
],
[
"20160831",
"13",
"3",
"0",
"6"
],
[
"20160830",
"1",
"6",
"2",
"7"
]
]
这是我尝试将 API 数据放入图表数组的代码。
<?php
function getChartData($rows)
{
// Get the unique dates
$dates = [];
foreach ($rows as $row) {
$dates[] = $row['dimensions'][1];
}
$dates = array_unique($dates);
// get the uniqe dimensions
$dimensions = [];
foreach ($rows as $row) {
$dimensions[] = $row['dimensions'][0];
}
$dimensions = array_unique($dimensions);
// Put all the values and the dimension filtered by date
$values = [];
foreach ($dates as $date) {
foreach ($rows as $row) {
if ($date == $row['dimensions'][1]) {
$val = $row['metrics'][0]['values'];
array_push($val, $row['dimensions'][0]);
array_unshift($val, $date);
$values[] = $val;
}
}
}
// Group the sessions metric value by date
$chartValues = [];
foreach ($dates as $date) {
$val = [];
foreach ($values as $value) {
if ($date == $value[0]) {
$val[] = $value[1];
}
}
array_unshift($val, $date);
$chartValues[] = $val;
}
return $chartValues;
}
我遇到的问题是 API 每天的频道分组数并不总是 return 完全相同。
例如,8 月 31 日没有直接的交通会话数据。当它按原样传递给图表时,它会失败,因为它总是期望值始终在数组中具有相同数量的项目。
当缺少任何渠道分组会话数据时,如何添加一个空值,以便面积图数组每天始终接收相同数量的值?
尝试使用 null
值
if ($date == $row['dimensions'][1]) {
$val = $row['metrics'][0]['values'];
array_push($val, $row['dimensions'][0]);
array_unshift($val, $date);
$values[] = $val;
} else {
$val = null;
array_push($val, $row['dimensions'][0]);
array_unshift($val, $date);
$values[] = $val;
}
如果有人遇到同样的问题,我就是这样做的:
<?php
function getAreaChartValues($response)
{
// Get the rows of the response
$rows = $response->toSimpleObject()->reports[0]['data']['rows'];
$dimensions = [];
$results = [];
foreach ($rows as $row) {
// Add all the dimensions to the dimensions array
$dimensions[] = $row['dimensions'][0];
$date = isset($row['dimensions'][1]) ? $row['dimensions'][1] : '';
$ValueType = $row['dimensions'][0];
$value = $row['metrics'][0]['values'][0];
if (!isset($results[$date])) {
$results[$date] = [];
}
$results[$date][$ValueType] = $value;
}
ksort($results);
$dimensions = array_unique($dimensions);
// Check for any non existant value for a dimension
// And add empty values
foreach ($dimensions as $dimension) {
foreach ($results as &$result) {
if (!array_key_exists($dimension, $result)) {
$result[$dimension] = 0;
}
ksort($result);
}
}
return $results;
}
我正在尝试从 Analytics API 获取一些数据,然后使用 Google 图表 API.
显示面积图以下数组包含来自 Analytics API v4 的两天数据。屏幕截图显示了查询资源管理器中 Table 中的数据如何 returned/rendered。
<?php
$results = [
0 =>
[
'dimensions' =>
[
0 => 'Organic Search',
1 => '20160831',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '13',
1 => '0',
2 => '0.0',
],
],
],
],
1 =>
[
'dimensions' =>
[
0 => 'Social',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '7',
1 => '0',
2 => '0.0',
],
],
],
],
2 =>
[
'dimensions' =>
[
0 => 'Organic Search',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '6',
1 => '0',
2 => '0.0',
],
],
],
],
3 =>
[
'dimensions' =>
[
0 => 'Social',
1 => '20160831',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '6',
1 => '0',
2 => '0.0',
],
],
],
],
4 =>
[
'dimensions' =>
[
0 => 'Referral',
1 => '20160831',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '3',
1 => '0',
2 => '0.0',
],
],
],
],
5 =>
[
'dimensions' =>
[
0 => 'Referral',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '2',
1 => '0',
2 => '0.0',
],
],
],
],
6 =>
[
'dimensions' =>
[
0 => 'Direct',
1 => '20160830',
],
'metrics' =>
[
0 =>
[
'values' =>
[
0 => '1',
1 => '0',
2 => '0.0',
],
],
],
],
];
?>
我正在尝试将 30 天的默认渠道分组和会话数据绘制到面积图中。图表接受的数据格式如下:
[
[
{
"label": "Day",
"id": "day"
},
{
"label": "Organic Search",
"id": "organic_search",
"type": "number"
},
{
"label": "Referral",
"id": "referral",
"type": "number"
},
{
"label": "Social",
"id": "social",
"type": "number"
},
{
"label": "Direct",
"id": "direct",
"type": "number"
}
],
[
"20160831",
"13",
"3",
"0",
"6"
],
[
"20160830",
"1",
"6",
"2",
"7"
]
]
这是我尝试将 API 数据放入图表数组的代码。
<?php
function getChartData($rows)
{
// Get the unique dates
$dates = [];
foreach ($rows as $row) {
$dates[] = $row['dimensions'][1];
}
$dates = array_unique($dates);
// get the uniqe dimensions
$dimensions = [];
foreach ($rows as $row) {
$dimensions[] = $row['dimensions'][0];
}
$dimensions = array_unique($dimensions);
// Put all the values and the dimension filtered by date
$values = [];
foreach ($dates as $date) {
foreach ($rows as $row) {
if ($date == $row['dimensions'][1]) {
$val = $row['metrics'][0]['values'];
array_push($val, $row['dimensions'][0]);
array_unshift($val, $date);
$values[] = $val;
}
}
}
// Group the sessions metric value by date
$chartValues = [];
foreach ($dates as $date) {
$val = [];
foreach ($values as $value) {
if ($date == $value[0]) {
$val[] = $value[1];
}
}
array_unshift($val, $date);
$chartValues[] = $val;
}
return $chartValues;
}
我遇到的问题是 API 每天的频道分组数并不总是 return 完全相同。
例如,8 月 31 日没有直接的交通会话数据。当它按原样传递给图表时,它会失败,因为它总是期望值始终在数组中具有相同数量的项目。
当缺少任何渠道分组会话数据时,如何添加一个空值,以便面积图数组每天始终接收相同数量的值?
尝试使用 null
值
if ($date == $row['dimensions'][1]) {
$val = $row['metrics'][0]['values'];
array_push($val, $row['dimensions'][0]);
array_unshift($val, $date);
$values[] = $val;
} else {
$val = null;
array_push($val, $row['dimensions'][0]);
array_unshift($val, $date);
$values[] = $val;
}
如果有人遇到同样的问题,我就是这样做的:
<?php
function getAreaChartValues($response)
{
// Get the rows of the response
$rows = $response->toSimpleObject()->reports[0]['data']['rows'];
$dimensions = [];
$results = [];
foreach ($rows as $row) {
// Add all the dimensions to the dimensions array
$dimensions[] = $row['dimensions'][0];
$date = isset($row['dimensions'][1]) ? $row['dimensions'][1] : '';
$ValueType = $row['dimensions'][0];
$value = $row['metrics'][0]['values'][0];
if (!isset($results[$date])) {
$results[$date] = [];
}
$results[$date][$ValueType] = $value;
}
ksort($results);
$dimensions = array_unique($dimensions);
// Check for any non existant value for a dimension
// And add empty values
foreach ($dimensions as $dimension) {
foreach ($results as &$result) {
if (!array_key_exists($dimension, $result)) {
$result[$dimension] = 0;
}
ksort($result);
}
}
return $results;
}