下载字幕总是返回一个403



当我使用从captions.list端点检索的ID调用captions.download端点时,它总是返回403。例如:

https://www.youtube.com/watch?v=1HRwpwOj4aA

call captions.list with:

GET https://www.googleapis.com/youtube/v3/captions?part=id&videoId=1HRwpwOj4aA&key={YOUR_API_KEY}

这是响应:

cache-control:  private, max-age=0, must-revalidate, no-transform
content-encoding:  gzip
content-length:  236
content-type:  application/json; charset=UTF-8
date:  Sat, 23 May 2015 17:55:57 GMT
etag:  "dhbhlDw5j8dK10GxeV_UG6RSReM/Rztb3ln4Zb6O07vb7_KSZi2y1NM"
expires:  Sat, 23 May 2015 17:55:57 GMT
server:  GSE
vary:  Origin, X-Origin
{
 "kind": "youtube#captionListResponse",
 "etag": ""dhbhlDw5j8dK10GxeV_UG6RSReM/Rztb3ln4Zb6O07vb7_KSZi2y1NM"",
 "items": [
  {
   "kind": "youtube#caption",
   "etag": ""dhbhlDw5j8dK10GxeV_UG6RSReM/pwH-4wtyQJz0U3l57fA8uKm4e1I"",
   "id": "kHlUsiuNS4TjB25loauZNXGrjK91I1tEdNyOpTRNA78="
  }
 ]
}

当我使用上面的id调用captions.download:

GET https://www.googleapis.com/youtube/v3/captions/kHlUsiuNS4TjB25loauZNXGrjK91I1tEdNyOpTRNA78%3D?key={YOUR_API_KEY}

这是响应:

403 Forbidden
cache-control:  private, max-age=0
content-encoding:  gzip
content-length:  29
content-type:  text/html; charset=UTF-8
date:  Sat, 23 May 2015 17:59:05 GMT
expires:  Sat, 23 May 2015 17:59:05 GMT
server:  GSE
vary:  Origin, X-Origin
Forbidden

你知道这里会发生什么吗?

来自YouTube API文档:

403 Forbidden:与请求相关联的权限不存在足以下载字幕轨道。请求可能不是正确授权,否则视频命令可能未启用第三方贡献。

标题下载API有时返回403(如果视频没有启用第三方贡献),您可以使用youtube.com/api/timedtext

你上面写的关于"只适用于视频你的谷歌帐户owns"不是我的经验。我刚刚成功运行了字幕。下载一个视频(关于狗训练),我肯定没有,我甚至没有养狗。但是,我在stackoverflow上提到的视频上测试了完全相同的代码,并得到403错误。

所以no它并不总是返回403有时它返回200!试试上面提到的狗狗视频:

python captions.py --videoid="jBN2_YuTclU" --action="download" --captionid='8S2GjnNfitU5HHoLyTeLxq_W1dP29YRFC8E8vFBUtws='

与您可能已经在这里的代码。

它将需要你的client_secrets.json从某处的谷歌凭证页面下载和丢失的文件youtube-v3-api-captions.json,你可以从这里得到。该代码启动一个浏览器,您可以在其中登录OAuth2授权。

尽管如此,它对某些视频有效而对其他视频无效一定是有原因的。@Abhishek可能在上面。错误的评论被点赞了。captions.list的输出中没有允许字幕下载的视频和不允许字幕下载的视频明显不同,这可以解释为什么一个可以工作而另一个不能。如果有人能提供哪些{'key':'value'}对在youtube api控制,这将是有帮助的。

状态403 Forbidden表示没有人有权访问该URL。例如,如果你有错误的API密钥,你就不应该收到该消息;401状态应为未授权状态。我会仔细检查URL。

相关内容

  • 没有找到相关文章

最新更新