Skip to main content
 首页 » 编程设计

json之Google Analytics Reporting API 返回空对象之NodeJs

2025年05月04日91zhujiabin

第一个问题,请耐心等待。

我正在使用 NodeJS 来查询 Google Analytics Reporting API。我能够收到我需要的 OAuth 2 token ,当我查询 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 文件。

请您参考如下方法:

我发现了问题!将此文件归档在“只见树木不见森林”下。
requestObject应该有 'Content-type':'application/json' .