0

我正在尝试使用 youtube 分析 api 设置 nodejs。我目前正在使用刷新令牌来尝试获取访问令牌。使用邮递员时效果很好,但我似乎无法在 nodejs 中复制该功能并获得 400: invalid_request ,但未提供其他信息。

这是我的代码

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oAuthClient = new OAuth2();

// Retrieve tokens via token exchange explained above or set them:
oAuthClient.setCredentials({
   access_token: "",
   refresh_token: process.env["YOUTUBE_ANALYTICS_REFRESHTOKEN"]
});

var youtubeAnalytics = google.youtubeAnalytics({
   version: 'v1', auth: oAuthClient
});


var moduleExports = {
    retrieveDailyBreakdownViews : function(){   
       var query = {
          ids: 'channel==' + {channelID here},
          'start-date': '2017-05-01',
          'end-date': '2017-05-02',
           metrics: 'views,estimatedMinutesWatched',
           dimensions: 'insightPlaybackLocationType',
           sort: 'views'
       }
  youtubeAnalytics.reports.query(query, (error, response) => {
    console.log(error);
    console.log(response);
  });
}
}

module.exports = moduleExports;

有任何想法吗?如果这不起作用,我可以尝试通过 HTTP/REST 构建查询,但我更喜欢使用 SDK。

4

2 回答 2

1

为了能够刷新访问令牌,您还需要client_idand client_secret。幕后发生的是以下刷新令牌的请求(在此处引用):

POST https://accounts.google.com/o/oauth2/token
{
    refresh_token: refresh_token,
    client_id: this._clientId,
    client_secret: this._clientSecret,
    grant_type: 'refresh_token'
}

您需要使用以下命令初始化您的Oauth2客户端:

var oAuthClient = new OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);

如果您对刷新令牌值进行硬编码,您还需要提供使用相同client_id/生成的刷新令牌client_secret

于 2017-07-28T20:47:22.430 回答
1

这就是我最终解决问题的方法

var google = require('googleapis');
var googleAuth = require('google-auth-library');
var auth = new googleAuth();
var oauth2Client = new auth.OAuth2(process.env["YOUTUBE_CLIENT_ID"], 
process.env["YOUTUBE_CLIENT_SECRET"]);
oauth2Client.credentials.refresh_token = 
process.env["YOUTUBE_ANALYTICS_REFRESHTOKEN"];

var youtubeAnalytics = google.youtubeAnalytics({
    version: 'v1'
});

然后我这样打电话:

youtubeAnalytics.reports.query(query, (error, response) => {})
于 2017-08-08T21:15:07.907 回答