乐于分享
好东西不私藏

我写了个 Chrome 插件,专治 Twitter 视频“下载难”

我写了个 Chrome 插件,专治 Twitter 视频“下载难”

Twitter 视频想下载?市面上的工具要么广告满天飞,要么画质压成渣,遇到敏感内容直接罢工。

受够了,自己写一个。

本以为调个 API 就完事,结果越挖越深。今天聊聊这一路踩过的坑。

一、常规方案:能用,但不够用

大多数下载工具的原理很简单:调 Twitter 的公开接口,拿到 mp4 地址直接下。

优点:简单快速。

问题:只对「公开且无害」的推文有效。视频一旦被标记为敏感内容,接口直接返回 TweetTombstone,拒绝访问。

这就是为什么很多下载器对某些视频没辙。

二、敏感视频:伪装成浏览器

公开接口不给看,但我在浏览器里能看到啊。

区别在哪?我登录了

既然浏览器能拿到,插件复用浏览器的身份去请求就行了。

具体做法是 GraphQL 拦截 + 模拟重放

  1. 复用 Cookie:直接用浏览器里的登录态
  2. 动态监听:Twitter 接口地址经常变,写死容易失效。我的做法是让插件在后台监听浏览器发出的真实请求,把 URL 模板记下来
  3. 模拟重放:点下载时,用记下来的 URL 模板 + Cookie 再请求一次,服务器就会正常返回视频地址

不管敏感不敏感,都能拿到。

三、卡片视频:藏得最深的那种

搞定敏感视频后,又遇到一类更麻烦的:**卡片视频 (Card Video)**。

这类视频的特征是:看着像普通视频,点播放却跳转到外部网页(通常是广告)。

用常规方法解析,标准字段里空空如也。

反复排查后发现,数据藏在一个很深的位置:

card → legacy → binding_values → unified_card → value → string_value

而且 string_value 里存的是另一个转义过的 JSON 字符串,套娃结构。

解决方案是写一个递归解析器:不管嵌套多少层,遍历所有字段,遇到字符串就尝试解析,直到找到 video/mp4 为止。

四、踩过的坑

在找到上面这些方案之前,我也试过几条「捷径」,都失败了:

方案
为什么不行
正则扒 HTML 源码
Twitter 是 SPA,源码里只有空骨架
扫描 DOM 元素
网页端播的是 HLS 碎片流,没法直接下载
查浏览器缓存
时灵时不灵,不如实时监听靠谱

五、最后

本来以为半天能搞定的事,折腾了好几天。

每个「简单功能」背后都是一堆边缘情况。能用的工具,都是把复杂留给自己、把简单留给用户。

如何获取

关注公众号后,发送15就可获取。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 我写了个 Chrome 插件,专治 Twitter 视频“下载难”

评论 抢沙发

3 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮