Google 视频不再能够检索字幕?

Dil*_*uff 15 youtube google-api youtube-api google-data-api youtube-data-api

截至 4 天前,您可以向或访问https://video.google.com/timedtext?lang=en&v={youtubeVideoId}发送 GET 请求,并收到包含给定 YouTube 视频的字幕轨道的 xml 响应。有谁知道此支持是否已被删除,因为从今晚开始,它不再提供带有字幕的 xml 响应,每个视频的页面都是空的。有许多视频在 4 天前还有效,但现在不再有效。提前致谢

Ben*_*son 12

默认语言的字幕(单一可用或似乎是英语):

要获取 YouTube 视频的字幕,只需使用此 Linux 命令(使用curl 和 base64):

curl -s 'https://www.youtube.com/youtubei/v1/get_transcript?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' -H 'Content-Type: application/json' --data-raw "{\"context\":{\"client\":{\"clientName\":\"WEB\",\"clientVersion\":\"2.9999099\"}},\"params\":\"$(printf '\n\x0bVIDEO_ID' | base64)\"}"
Run Code Online (Sandbox Code Playgroud)

将参数更改VIDEO_ID为您感兴趣的参数。

注意:该密钥不是 YouTube Data API v3 的密钥,而是第一个公开的密钥(在不同国家/地区的某些计算机上进行了测试),如果您curl https://www.youtube.com/ | grep AIzaSy

注意:如果对我如何逆向工程这个 YouTube 功能感兴趣,请在评论中说出,我会写一段话来解释

所需语言的字幕(如果有):

YouTube 使事情变得棘手,可能会在这一步失去您,所以请跟随我:我们唯一需要更改的是paramsBase64 编码数据的值,它除了奇怪的字符之外还包含 Base64 数据,其中也包含奇怪的字符。

  1. 获取语​​言缩写,如ru俄语
  2. \n\x00\x12\x02LANGUAGE_INITIALS\x1a\x00例如,使用 base64进行编码A=$(printf '\n\x00\x12\x02LANGUAGE_INITIALS\x1a\x00' | base64)(例如,不要忘记更改LANGUAGE_INITIALS为所需的语言首字母缩写ru)。的结果ruCgASAnJ1GgA=
  3. =通过将to替换%3D为 example ,将结果编码为 URL B=$(printf %s $A | jq -sRr @uri)。的结果ruCgASAnJ1GgA%3D
  4. 仅当使用 shell 命令时:将单个替换%为两个%,例如C=$(echo $B | sed 's/%/%%/')。的结果ruCgASAnJ1GgA%%3D
  5. 使用例如进行编码\n\x0bVIDEO_ID\x12\x0e$C(不要忘记使用上一步的结果更改VIDEO_ID为您的视频 ID ) 。和的结果是$CD=$(printf "\n\x0bVIDEO_ID\x12\x0e$C" | base64)rulo0X2ZdElQ4CgtsbzBYMlpkRWxRNBIOQ2dBU0FuSjFHZ0ElM0Q=
  6. 使用默认语言字幕部分中params的该值:curl -s 'https://www.youtube.com/youtubei/v1/get_transcript?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' -H 'Content-Type: application/json' --data-raw "{\"context\":{\"client\":{\"clientName\":\"WEB\",\"clientVersion\":\"2.2021111\"}},\"params\":\"$D\"}"

这是一个单行版本(不要忘记更改$VIDEO_ID$LANGUAGE_INITIALS):

curl -s 'https://www.youtube.com/youtubei/v1/get_transcript?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' -H 'Content-Type: application/json' --data-raw "{\"context\":{\"client\":{\"clientName\":\"WEB\",\"clientVersion\":\"2.2021111\"}},\"params\":\"`printf "\n\x0b$VIDEO_ID\x12\x0e\`printf "\n\x00\x12\x02$LANGUAGE_INITIALS\x1a\x00" | base64 -w 0 | jq -sRr @uri | sed 's/%/%%/g'\`" | base64`\"}"
Run Code Online (Sandbox Code Playgroud)

  • [@John_Sheares](/sf/users/21978491/) 在 Linux Mint 21.1 (curl 7.81.0) 上,我执行了您共享的命令(没有“-v”)并[得到了响应带有所需的字幕](https://gitlab.com/-/snippets/2510752)。事实上,我建议使用“youtube-dl”或“yt-dlp”进行字幕检索,因为它们提出了此功能并且是成熟的软件。 (2认同)