截至 4 天前,您可以向以下地址发送 GET 请求或访问并接收包含给定 YouTube 视频的字幕轨道的 xml 响应。有谁知道此支持是否已被删除,因为从今晚开始,它不再提供带有字幕的 xml 响应,每个视频的页面都是空的。有许多视频在 4 天前还有效,但现在不再有效。提前致谢
默认语言的字幕(单一可用或似乎是英语):
要获取 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)\"}"
改变VIDEO_ID
参数与您感兴趣的参数。
注意:该密钥不是 YouTube Data API v3 的密钥,而是第一个公开的密钥(在不同国家/地区的某些计算机上进行了测试),如果您curl https://www.youtube.com/ | grep AIzaSy
注意:如果对我如何逆向工程此 YouTube 功能感兴趣,请在评论中说出,我会写一段话来解释
所需语言的字幕(如果有):
YouTube 让事情变得很棘手,可能会在这一步失去你,所以跟着我:我们唯一需要改变的是params
value是base64编码的数据,除了奇怪的字符之外还包含base64数据,其中也包含奇怪的字符。
- 获取语言首字母,例如俄语的“ru”
- Encode
\n\x00\x12\x02LANGUAGE_INITIALS\x1a\x00
以 base64 为例A=$(printf '\n\x00\x12\x02LANGUAGE_INITIALS\x1a\x00' | base64)
(不要忘记改变LANGUAGE_INITIALS
您想要的语言首字母缩写ru
例如)。结果为ru
is CgASAnJ1GgA=
- 通过替换将结果编码为 URL
=
to %3D
例如B=$(printf %s $A | jq -sRr @uri)
。结果为ru
is CgASAnJ1GgA%3D
-
仅当使用 shell 命令时:更换单个
%
to two %
例如C=$(echo $B | sed 's/%/%%/')
。结果为ru
is CgASAnJ1GgA%%3D
- Encode
\n\x0bVIDEO_ID\x12\x0e$C
(不要忘记改变VIDEO_ID
到您的视频 ID,其中$C
上一步的结果)例如D=$(printf "\n\x0bVIDEO_ID\x12\x0e$C" | base64)
。结果为ru
and lo0X2ZdElQ4
is CgtsbzBYMlpkRWxRNBIOQ2dBU0FuSjFHZ0ElM0Q=
- 用这个
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\"}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)