无法在 Youtube API v3 中下载隐藏式字幕

Posted

技术标签:

【中文标题】无法在 Youtube API v3 中下载隐藏式字幕【英文标题】:Unable to download closed captions in Youtube API v3 【发布时间】:2015-08-11 09:45:03 【问题描述】:

我正在使用 Youtube API v3 中给出的 php 示例代码:https://developers.google.com/youtube/v3/docs/captions/download,从我的 webapp 中的第 3 方、公开可用的 YouTube 视频下载字幕,即我尚未在 Youtube 上上传内​​容。

我能够访问字幕轨道的列表,但无法使用收到列表中的字幕轨道 ID下载字幕。

尝试下载时出现的错误是:

调用 GET https:// 时出错 www.googleapis.com/youtube/v3/captions/Lw0e5xDNU17GFafOl8DcyeOtwzWJTf9V?tfmt=srt&alt=media: (404) 未找到

(我已经尝试删除 tfmt(可选参数),但仍然报错。)

但是尝试删除字幕的错误是不同的:

调用 DELETE 时出错 https:// www.googleapis.com/youtube/v3/captions?id=Lw0e5xDNU17GFafOl8DcyeOtwzWJTf9V: (403) 禁止

因此,除了所有者之外的用户似乎不禁止 captions.download(就像不禁止标题列表一样),因此我想将这些数据用于我的 webapp。

感谢您的帮助。

谢谢,

尼基尔

【问题讨论】:

尝试使用带有 ID 作为查询参数的删除调用的 URL 格式,而不是您正在使用的格式。他们获取 URL 的文档可能是错误的。他们还在下面提到 ID 是一个查询参数。 你很好地观察到他们在文档中提到 ID 作为查询参数。仍然尝试了 Brian 并得到了一个错误,比如“不支持的输出格式”。稍后将在此处更新确切的错误消息。 你有没有找到解决这个问题的方法,现在我正在处理同样的问题,我无法解决它。 【参考方案1】:

我刚刚在浏览器和 API 资源管理器中尝试了您提到的 URL,在这两种情况下,当我没有 oAuth 令牌时我收到了 401,当我有访问令牌时收到了 403(因为我不是所有者),因此端点按预期运行;根据documentation,下载字幕需要视频所有者的 oAuth 同意。

也许,如果你得到的是 404,那么 PHP 库有问题吗?

【讨论】:

如果您不是所有者,则在删除、插入或上传方法中预计会出现 403 错误,但我确信您在使用 list 时不会收到“403 Forbidden”错误b> 字幕。同样,我希望 download.captions 也适用于非所有者。此外,文档并没有说明只有所有者才能下载字幕。我在 PHP 库(Google/Service/Youtube.php)中能想到的唯一问题是将 id 作为路径参数传递。我尝试将其更改为查询,但仍然出现错误,说“不支持的输出格式”。然后我删除了 tmft="srt" 参数,但它仍然不起作用。 该文档准确地说明了下载字幕:“此请求需要至少具有以下范围之一的授权(阅读有关身份验证和授权的更多信息)。googleapis.com/auth/youtube.force-ssl” - 这就是授予的范围应用程序同意管理用户的 YouTube 帐户,从而表明只有视频的所有者才能提出请求。更重要的是,如果您在 api explorer 中进行测试,您会看到,如果您对自己拥有的视频进行授权,您将获得 200。请注意,这也是 API V2 中的行为。 经过*** Q&A 之后,看起来字幕也可以在 v3 API 中由第三方(即非所有者)下载。您提到的同一行也存在于此处列出的标题部分中:developers.google.com/youtube/v3/docs/captions/list,但这很好用。也没有像删除方法那样出现 403 错误,进一步希望字幕可以被第三方下载。 您链接到的 SO 问题清楚地表明用户无法下载字幕。易卜拉欣对他的回答的更新仅仅表明 V3 终于收到了一个字幕端点,而不是用户可以为他们不拥有的视频下载它们。基本上,下载端点的工作方式与文档完全一致;因此没有错误(另一方面,在列表端点中,因为根据文档它还应该需要授权)。您可以随时提交功能请求,因为肯定有需要字幕的用例,但目前还不行。【参考方案2】:

我找到了另一种访问任何 YouTube 视频的字幕数据的方法。 代码是用 Ruby 编写的。

Read Youtube transcript (captions) from any public Youtube video

效果很好,我只需要找到一种方法将其与我的 web 应用程序集成。

【讨论】:

以上是关于无法在 Youtube API v3 中下载隐藏式字幕的主要内容,如果未能解决你的问题,请参考以下文章

Youtube v3 API 字幕下载

Youtube api v3 无法从频道中检索所有视频

YouTube API v3无法正常使用[重复]

在 C# 中使用 Youtube API V3 从频道获取视频

IIS Web 服务器上的 Youtube 数据 API V3 PHP 无法正常工作

PHP:使用同步标志上传 YouTube v3 API 字幕