我使用Google Analytical的API编写javascript。
我正在查询用户对数据范围的计数,并将视图ID传递给查询:
gapi.client.analytics.data.ga.get({
'ids': 'ga:XXXXXXXX',
'start-date': '2014-10-01',
'end-date': '2014-10-15',
'metrics': 'ga:users'
}).execute(function (results) {
if (results.rows && results.rows.length)
console.log(results.rows[0][0]);
});
但是,由于我处理的是使用配额,并且我需要查询多个视图。
是否有方法在同一查询中请求报告多个id
类似于:
gapi.client.analytics.data.ga.get({
'ids': 'ga:XXXXXXXX, ga:XXXXXXXXX, ga:XXXXXXXXXX', //Which obviously doesn't work
答案:不,没有办法请求一个以上的配置文件id
谷歌分析报告API参考
ids=ga:1245表单ga:XXXX的唯一表ID,其中XXXX是分析视图(配置文件)ID,查询将为其检索数据。
即使它被称为IDS,也不意味着你可以发送不止一个。你不能一次只能发送一个。这是一个独特的值,您将不得不多次运行您的请求。如果你仔细想想,这是有道理的,因为你将要返回的数据会在不同的配置文件id之间混合,你将无法判断数据来自哪个配置文件,因为配置文件不是一个维度。
这个答案可能有点晚,但我想帮助那些可能有类似用例的人。通过Google Analytics Reporting API V4,我找到了一种方法来做到这一点,同时还在一个可能有数百行的表上提取3个独立日期范围的信息。
在字段度量下,您可以添加别名。这里是我传递视图ID和日期范围信息的地方,我需要这些信息来解析JSON响应。
以下是基于谷歌的Hello Analytics示例-可能有更好的方法来做到这一点,但这满足了我目前的需求。
我在下面列出了该表的结构方式以及正在运行的javascript。表是这样设置的,所以我也可以使用list.js进行排序。
var VIEW_ID = ''
function runReport() {
//tbody has id gReport and I want to loop through each row
$("#gReport tr").each(function() {
//VIEW_ID is pulled from the table data
VIEW_ID = $(this).find('.view').html();
// Run the function with the set time frames along with a td I need to manipulate
queryReports('30daysAgo', '.thirty')
queryReports('7daysAgo', '.seven')
queryReports('yesterday', '.one')
});
};
function queryReports(startDate, tdClass) {
return gapi.client.request ({
path: '/v4/reports:batchGet',
root: 'https://analyticsreporting.googleapis.com/',
method: 'POST',
body: {
reportRequests: [
{
viewId: VIEW_ID,
dateRanges: [
{
startDate: startDate,
endDate: 'today'
}
],
metrics: [
{
expression: 'ga:sessions',
alias: VIEW_ID + ":" + tdClass
}
]
}
]
}
}).then(displayResults, console.error.bind(console));
}
function displayResults(response) {
// find the alias string in JSON
i = response.result.reports[0].columnHeader.metricHeader.metricHeaderEntries[0].name
// manipulate string so I have variables to update on the table
c = i.split(":").pop();
u = i.split(":").shift();
// return value given to me by google
countValue = response.result.reports[0].data.totals[0].values[0]
// find specific td of the row that contains the profile id and the time class I want to manage
$("tr:contains('" + u + "')").find(c).html(countValue);
}
<!--- table row setup - I also have a tbody with the ID gReport -->
<tr>
<td class="site"><a href="https://"></a></td>
<td class="proj"><a href=""></a></td>
<td class="ga"></td>
<td class="view"></td>
<td class="thirty"></td>
<td class="seven"></td>
<td class="one"></td>
<td class="notes"></td>
</tr>
是的,根据GA Core Reporting API文档,您一次只能查询一个视图ID(在同一查询中)。
但是,您可能会决定选择一些编程语言脚本,并在运行查询时遍历多个视图ID。这就是我使用R语言和名为RGoogleAnalytics的包(允许连接到GAneneneba API)所做的。运行for循环允许我从多个视图ID中检索数据并将其存储在同一数据集中。以下是一篇文章,解释如何在R中做到这一点:http://www.analyticsforfun.com/2015/05/query-multiple-google-analytics-view.html