第一个问题让我忍受。返回空对象的Google Analytics报告API - NodeJs
我正在使用NodeJS查询Google Analytics报告API。我能够收到我需要的OAuth 2令牌,并且当我查询API时,我收到了200回应。但是,返回的有效内容是空对象,而不是预期目标的JSON格式的报表响应。
var https = require('https');
var google = require('googleapis');
var key = require('path/to/key');
var jwtClient = new google.auth.JWT(key.client_email,null,key.private_key,'https://www.googleapis.com/auth/analytics.readonly',null);
var getGoogleData = google.analyticsreporting('v4');
var googleTemplates = {"reportRequests":[{"viewId": "######","dateRanges": [{"startDate": "2014-11-01", "endDate": "2014-11-30"}],"metrics": [{"expression": "ga:users"},{"expression": "ga:newUsers"},{"expression": "ga:pageviews/ga:sessions"}]},{"viewId": "######","dateRanges": [{"startDate": "2014-11-01", "endDate": "2014-11-30"}],"metrics": [{"expression": "ga:transactionRevenue"},{"expression": "ga:transactions"},{"expression":"ga:transactions/ga:sessions"},{"expression":"ga:revenuePerTransaction"}]}]};
var googleToken={};
var requestReport = function(reportRequest,token){
reportRequest = JSON.stringify(reportRequest);
//console.log(reportRequest);
var requestObject = {
method:'POST',
hostname:'analyticsreporting.googleapis.com',
path:'/v4/reports:batchGet',
headers:{
Accept:'*/*',
Authorization:'Bearer '+token.access_token,
'Content-Type':'application/x-www-form-urlencoded'
}
};
var callbackGoogle = function(response){
console.log('\n-----------------------\n');
console.log('Requesting Report : Google Analytics\nStatus Code: [', response.statusCode +': '+ response.statusMessage+']');
console.log('-----------------------\n\n');
var data = [];
response.on('data',function(chunk){
data.push(chunk);
});
response.on('end',function(){
var buff = new Buffer(data.join('')).toString();
console.log('////////////////////////// Success //////////////////////////\n')
console.log(buff);
});
response.on('error',function(e){
console.log(e);
});
};
var req = https.request(requestObject,callbackGoogle);
req.on('error',function(e){
console.log('requestReport Error:\n',e);
});
req.write(reportRequest);
req.end();
};
(function googleAccess(){
jwtClient.authorize(function(err,tokens){
console.log('\n-----------------------\n');
console.log('Authenticate: Google \n');
if(err){
console.log('Google Error',err);
return;
}
googleToken = tokens;
requestReport(googleTemplates,tokens);
console.log('Success: true');
console.log('\n-----------------------\n\n');
})
})();
控制台输出如下:
-----------------------
Authenticate: Google
Success: true
-----------------------
-----------------------
Requesting Report : Google Analytics
Status Code: [ 200: OK]
-----------------------
////////////////////////// Success //////////////////////////
{}
有没有人有一个建议,为什么有效载荷返回一个空的对象?它应该是是一个报告JSON文件。
您应该尝试'console.log(response);'来查看整个输出。看起来你已经安装了google apis,甚至还有分析报告服务对象('getGoogleData'在你的代码中),但你没有使用它;有原因吗? – Matt
我确实尝试过。我可以在星期一发布整个响应对象。 我之所以没有使用analyticsreporting服务对象,是因为它上的文档很稀疏,而且我对于附加的方法'getGoogleData.reports.batchGet()'预计会传递给它有些困惑。我决定手动尝试这个过程,但只有在我首先尝试了batchGet方法之后。当我使用附加到服务的方法时,我收到一个'NULL'响应,并且Google记录了401和403错误或者什么都没有。有关batchGet方法的信息将受到欢迎!谢谢! – FerrusDude
更多示例:使用默认的JavaScript库编写[示例页面](https://developers.google.com/analytics/devguides/reporting/core/v4/samples#dimensions_and_metrics)。写在'serviceobject.method(requestbody).execute(callbackmethod)'格式,[快速入门指南](https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/web-js )使用[promoses](https://developers.google.com/api-client-library/javascript/features/promises#using-promises)编写,并使用服务对象。 – Matt