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