使用 api v3.0 获取 YouTube 视频的评论线程

本文关键字:视频 评论 线程 YouTube 获取 api v3 使用 | 更新日期: 2023-09-27 17:56:37

我正在尝试使用.net YouTube API v.3.0来检索评论线程。我基本上是在尝试重用 Java 的示例,但是当我尝试使用客户端机密进行授权时,我的令牌没有得到任何范围(当我检查凭据变量时,它设置为 null)。这是我从 .net 示例中获取的代码:

credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
    GoogleClientSecrets.Load(stream).Secrets,
    new[] { YouTubeService.Scope.YoutubeForceSsl},
    "user",
    CancellationToken.None,
    new FileDataStore(this.GetType().ToString())
);

我可以列出我上传的所有视频,但我无法使用以下代码获取它们的评论线程:

var req = youtubeService.CommentThreads.List("snippet");
req.VideoId = playlistItem.Snippet.ResourceId.VideoId;
req.TextFormat = CommentThreadsResource.ListRequest.TextFormatEnum.PlainText;
var res = req.Execute();
"

youtubeService"是通过传递之前创建的"凭据"变量创建的。有人在使用 .net 获取评论时更幸运吗?

使用 api v3.0 获取 YouTube 视频的评论线程

重现步骤:我不得不带着这个问题睡觉才能解决这个问题 - 事实证明我多次对应用程序进行更改,最初我只要求阅读播放列表(如以下示例所示:检索我的上传)。因此,我授权了一个范围:

YouTubeService.Scope.YoutubeReadonly

此范围显然不足以读取 CommentThreads,但是当我更改范围时,应用程序保留了相同的授权令牌并将其用于我的所有请求(范围设置为只读)。

做了什么来解决这个问题:我从我的应用程序代码中撤销了令牌并再次授权。这一次,由于没有缓存令牌,出现了一个同意窗口,其中包含"管理您的帐户"的范围(在它是"只读访问"之前),这次我能够获得具有适当范围的令牌。

用于撤销令牌的代码:

await credential.RevokeTokenAsync(CancellationToken.None);

期望:我预计因为我更改了代码中的范围,同意窗口将再次出现,而无需撤销令牌,因为我缓存的令牌的范围较低/不同。

摘要:问题(错误还是设计使然?)是,一旦您在应用程序中获得令牌并想要更改范围(到更强大的范围),您实际上需要撤销令牌并再次授权,否则您最终将获得具有初始范围的相同令牌,即使它在代码中已更改。