在 YouTube 中,当用户将光标悬停在视频缩略图上时,视频缩略图开始播放简短的预览。仅适用于桌面。
我试图获取其中一个的链接
https://i.ytimg.com/an_webp/d1w3CWfhzNQ/mqdefault_6s.webp?du=3000&sqp=CPyAhNIF&rs=AOn4CLBqWnVyWD9F_P4j_WFk7LAGs4pNUA
Run Code Online (Sandbox Code Playgroud)
它仅适用于上述视频,当我尝试更改链接中的 id 来查看另一个视频时不起作用,那么如何获取 用于视频预览的id相关链接?
小智 6
spq参数是base64编码的协议缓冲区数据。在这种特殊情况下,它是一个字段号为 1 的 4 字节数字。如果没有规格表或有关文件的更多上下文,我无法告诉您它是什么类型的数字(浮点数、有符号整数、无符号)或它代表什么返回以使得猜测或更多样本成为可能。
sqp 参数也用在自定义大小缩略图的 URL 中。例如,https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAb9wuXOpXrY3TDtPwmmgz4l9PQxg指示服务器返回缩放和裁剪后的缩略图,使其大小为 246x138,这是搜索结果中缩略图使用的分辨率。标准分辨率选择中不提供此分辨率,即
https://i.ytimg.com/vi/[video id]/hqdefault.jpg
https://i.ytimg.com/vi/[video id]/mqdefault.jpg
https://i.ytimg.com/vi/[video id]/sddefault.jpg
https://i.ytimg.com/vi/[video id]/default.jpg
Run Code Online (Sandbox Code Playgroud)
本例中的 sqp 参数对数字 138 和 246 进行编码,此外还有一堆我不确定其用途的数据。然而,它总是相同的数据。
rs 参数也是 Base 64 编码数据(但不是 protobuf)。该数据的前 5 个字节始终相同。剩余的 20 个字节可能是视频 ID、sqp 参数中的数据以及可能的其他秘密数据的 SHA-1 哈希值。我不知道数据是如何组合的,或者在制作哈希时使用了哪些附加数据(如果有)。如果视频 ID 和/或 sqp 参数发生更改,哈希将无法通过服务器端检查,并且图像将不会调整大小。相反,它会为您提供 hqdefault.jpg 图像,就好像您从未使用过 sqp/rs 参数一样。
几乎可以肯定,这些数据是故意保密的,因此您无法生成这些 URL,以防止通过大量请求不同大小的图像来进行拒绝服务攻击,从而通过所有计算密集型调整大小来耗尽服务器的资源。
长话短说,您可能无法重现 rs 参数来获取您想要的链接,因为对于视频预览来说,您不能像缩略图那样简单地省略参数。