【问题标题】:How do I find a users YouTube channel from OAuth client authentication?如何通过 OAuth 客户端身份验证找到用户 YouTube 频道?
【发布时间】:2021-01-25 10:35:17
【问题描述】:
对于我正在构建的应用程序,我希望最终用户使用 gapi OAuth2 和
从那里我希望应用程序在他们的 YouTube 频道上查找播放列表
并加载它。
getAuthInstance 方法返回一个带有 Google 用户名的对象。然而
对于我自己的特定用户名,通过用户名查找频道 ID 的查询
不返回任何结果。来自一些browsing online,这显然是一个问题
使用某些 YouTube 帐户。
这个问题有解决办法吗?
【问题讨论】:
标签:
javascript
google-api
youtube-api
youtube-data-api
google-api-js-client
【解决方案1】:
如果您有有效的 OAuth 2.0 身份验证/授权(例如,通过使用 GAPI 获得),那么使用使用参数 mine=true 查询的 Channels.list API 端点确定经过身份验证的用户的频道 ID 非常简单:
mine(布尔值)
此参数只能在正确的authorized request 中使用。将此参数的值设置为 true 以指示 API 仅返回经过身份验证的用户拥有的频道。
在调用端点时,返回的Channels resource 的属性id 包含经过身份验证的用户的频道ID。
关于 Javascript GAPI(即 Google 的浏览器端 JavaScript 客户端库)实现,代码如下所示(更广泛的上下文请查看 Google 的此示例源文件:analytics_codelab.js):
var channelId;
function loadAPIClientInterfaces() {
gapi.client.load('youtube', 'v3', function() {
getUserChannel();
});
}
function getUserChannel() {
var request = gapi.client.youtube.channels.list({
part: 'id',
fields: 'items(id)',
mine: true
});
request.execute(function(response) {
if ('error' in response) {
displayMessage(response.error.message);
} else {
channelId = response.items[0].id;
}
});
}
请注意,上面的代码(与analytics_codelab.js 中的不同)使用fields 请求参数从Channels.list 端点仅获取通道的ID 信息(从API 中仅询问信息总是好的)这是实际使用的)。