【问题标题】:Get comments thread for a YouTube video using api v3.0使用 api v3.0 获取 YouTube 视频的评论线程
【发布时间】:2015-09-02 10:38:06
【问题描述】:

我正在尝试使用 .net YouTube API v.3.0 来检索 cmets 线程。我基本上是在尝试重用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())
);

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

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 获得 cmets 的人是否更幸运?

【问题讨论】:

  • Java 示例,取自 .net 示例?
  • 您发布的代码有什么问题,是出现错误还是没有数据?
  • 我收到 HTTP 403:禁止,权限不足。我设法找到了解决方案,请参阅下面的评论。

标签: c# youtube youtube-api youtube-data-api


【解决方案1】:

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

YouTubeService.Scope.YoutubeReadonly

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

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

撤销令牌的代码:

await credential.RevokeTokenAsync(CancellationToken.None);

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

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

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2013-11-21
    • 1970-01-01
    • 2017-08-13
    • 2014-11-07
    • 2014-07-29
    相关资源
    最近更新 更多