使用 nodejs 库获取 invalid_request 用于 Youtube 分析
Getting invalid_request for Youtube Analytics with nodejs library
我正在尝试使用 youtube 分析设置 nodejs api。我目前正在使用刷新令牌来尝试获取访问令牌。使用邮递员时效果很好,但我似乎无法在 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。
为了能够刷新访问令牌,您还需要 client_id
和 client_secret
。幕后发生的是以下刷新令牌的请求(引用 here):
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
生成的刷新令牌
这就是我最终解决问题的方法
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) => {})
我正在尝试使用 youtube 分析设置 nodejs api。我目前正在使用刷新令牌来尝试获取访问令牌。使用邮递员时效果很好,但我似乎无法在 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。
为了能够刷新访问令牌,您还需要 client_id
和 client_secret
。幕后发生的是以下刷新令牌的请求(引用 here):
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
生成的刷新令牌
这就是我最终解决问题的方法
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) => {})