我尝试使用.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"已通过传递"凭证"先前创建的变量。任何人都可以通过.net获得评论更幸运。
答案 0 :(得分:3)
Repro步骤:我不得不睡着了解决这个问题 - 事实证明我多次对应用进行了更改,最初我只是要求阅读播放列表(就像这样例如:Retrieve my uploads)。因此,我授权范围:
YouTubeService.Scope.YoutubeReadonly
这个范围显然不足以读取CommentThreads,但是当我更改范围时,应用程序保留了相同的授权令牌并将其用于我的所有请求(范围设置为只读)。
我为解决此问题所做的工作:我从我的应用代码中撤消了令牌并再次授权。这一次,因为没有缓存令牌,所以出现了一个同意窗口,其范围为"管理您的帐户" (在它之前是#34;只读访问"),这次我能够获得具有适当范围的令牌。
撤销令牌的代码:
await credential.RevokeTokenAsync(CancellationToken.None);
期望:我原以为是因为我更改了代码中的范围,所以同意窗口将再次出现而无需撤消令牌,因为我的缓存令牌具有较低/不同的范围。
摘要:问题(错误或设计?)是,一旦您在应用中获得令牌并希望更改范围(更强大的范围),您实际上需要撤销令牌和再次授权,否则您将最终获得具有初始范围的相同令牌,即使它已在代码中更改。