1

第一个问题让我忍受。返回空对象的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文件。

+0

您应该尝试'console.log(response);'来查看整个输出。看起来你已经安装了google apis,甚至还有分析报告服务对象('getGoogleData'在你的代码中),但你没有使用它;有原因吗? – Matt

+0

我确实尝试过。我可以在星期一发布整个响应对象。 我之所以没有使用analyticsreporting服务对象,是因为它上的文档很稀疏,而且我对于附加的方法'getGoogleData.reports.batchGet()'预计会传递给它有些困惑。我决定手动尝试这个过程,但只有在我首先尝试了batchGet方法之后。当我使用附加到服务的方法时,我收到一个'NULL'响应,并且Google记录了401和403错误或者什么都没有。有关batchGet方法的信息将受到欢迎!谢谢! – FerrusDude

+0

更多示例:使用默认的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

回答

0

我发现了这个问题!在“没有看到树林看森林”下面记下这一个。

requestObject应该有'Content-type':'application/json'

+0

你为什么不使用谷歌节点js sdk的任何原因? – Karthik

相关问题