2017-01-16 44 views
0

我試圖從node.js應用程序查詢Google Analytics報告API。查詢谷歌分析報告API時出現未知名稱「view_id」

我想我已經在包括服務帳戶的東西的谷歌方面正確地設置了一切,但我必須缺少一塊。

我的應用程序成功地將使用數據發送給谷歌,我可以看到它在實時視圖中進來。我也可以使用交互式API瀏覽器查詢數據。

在我的node.js的代碼,我在服務器啓動時與API認證,像這樣:

var googleapis_key = require('./config/google-api-key.json'); 
var googleapis = require('googleapis'); 
var googleapis_jwtClient = new googleapis.auth.JWT(
    googleapis_key.client_email, 
    null, 
    googleapis_key.private_key, 
    ["https://www.googleapis.com/auth/analytics.readonly"], 
    null); 
var googleapis_analyticsreporting = googleapis.analyticsreporting('v4'); 

googleapis_jwtClient.authorize(function(err, tokens) { 
    if (err) { 
     lStartup.error(err); 
     lStartup.error("Could not authenticate with google API. Analytics not available."); 
    } else { 
     lStartup.info("Successfully authenticated with google service-account."); 
     lStartup.debug(googleapis_jwtClient.credentials); 
    } 
}); 

(其中lStartup是log4js記錄儀)。我得到了Google的積極響應,沒有設置err,並且記錄到控制檯的憑證看起來令人信服。

然後當相關客戶端請求到達我的服務器後試圖問谷歌的數據:

var reportingrequests = { 
     "reportRequests": [ 
      { 
       "viewID": "138122972", 
       "dateRanges": [{"startDate": "7daysAgo", "endDate": "yesterday"}], 
       "metrics": [{"expression": "ga:users"}] 
      } 
     ] 
    }; 

    logger.debug(JSON.stringify(reportingrequests)); 

    googleapis_analyticsreporting.reports.batchGet(
    {  
     "resource": reportingrequests, 
     "auth": googleapis_jwtClient, 
    }, 
    function(err, response) { 
     if (err) { 
      // Failure. Log and report to the client. 
      console.error("Could not query the Google Analytics reporting API"); 
      console.error(err); 

      res.writeHead(500, "Internal server error. (Google analytics:" + err + ")"); 
      res.end(JSON.stringify(err)); 
     } else { 
      // Success, just serve googles result to the client. 
      res.end(JSON.stringify(response)); 
     } 
    } 
); 

的響應是一個錯誤

[ { message: 'Invalid JSON payload received. Unknown name "view_id" at \'report_requests[0]\': Cannot find field.', 
    domain: 'global', 
    reason: 'badRequest' } ] } 

什麼是它試圖在這裏告訴我?我的JSON中沒有名爲view_id或report_requests的屬性。雖然他們看起來像我的de-camelcased。

+0

我認爲屬性名稱中的snake_case訴camelCase是一個紅色的鯡魚。這就是API在內部處理事物的方式。 我已經刪除了viewID屬性,錯誤信息更改爲「參數viewID必須設置」,注意CamelCase保持不變。 我已經改變了值已知的壞。相同的「未知名稱」view_id「」消息。那麼我的viewID錯了?我已經檢查了很多次。 –

回答

2

我討厭自我回答,但我喜歡解決方案!

"viewID": "138122972", 

應該

"viewId": "138122972", 

注意小寫字母 「d」。

具有諷刺意味的是,這個線索是在camelCase到snake_case-conversion。如果參數名稱是「viewID」,那麼它可能已被snake_cased爲「view_i_d」,這不是錯誤消息中的內容。

我覺得很蠢,但也很高興能夠繼續下去。