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

Get comments thread for a YouTube video using api v3.0

我正在尝试使用 .net YouTube API v.3.0 检索评论线程。我基本上是在尝试重用 sample for 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" 是通过传递先前创建的 "credential" 变量创建的。有人更幸运地使用 .net 获得评论吗?

重现步骤:我不得不睡着了才解决这个问题——事实证明我对应用程序进行了多次更改,最初我只要求阅读播放列表(如本例所示:Retrieve my uploads)。因此我授权了一个范围:

YouTubeService.Scope.YoutubeReadonly

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

我是如何解决这个问题的: 我从我的应用代码中撤销了令牌并重新授权。这一次,因为没有缓存令牌,出现了范围为 "manage your account" 的同意 window(之前是 "read-only access"),我能够获得具有适当范围的令牌这次

撤销令牌的代码:

await credential.RevokeTokenAsync(CancellationToken.None);

Expectations:我原以为因为我更改了代码中的范围,同意 window 会再次出现而无需撤销令牌,因为我的缓存的令牌有一个 lower/different 范围。

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