517 - 《手撕源码 36:cobalt》

发布于 2025年1月25日

1、cobalt 是一个网页内容保存和下载工具,可以从各种网站保存视频、音频、图片、GIF 等,支持小红书、Twitter、YouTube、Bilibili 等。之前就看到过,不知道是开源的,今天重新看到,就顺手看了下源码,理解下这些网站的下载逻辑是怎样的。

2、小红书的逻辑很简单,带 UA fetch url 后,拿到 HTML,从 window.__INITIAL_STATE__ 中拿到数据,然后下载。

const res = await fetch(url, { headers: { 'user-agent': '...' } });
const html = await res.text();
const data = JSON.parse(html.split('window.__INITIAL_STATE__ = ')[1].split('</script>')[0]);

3、Twitter 相对复杂点,分两步。1)拿 guest token,2)从 graphql api 里拿 twitter 信息。

const graphqlURL = 'https://api.x.com/graphql/I9GDzyCGZL2wSoYFFrrTVw/TweetResultByRestId';
const tokenURL = 'https://api.x.com/1.1/guest/activate.json';

// 1. 拿 guest token
const tokenRes = await fetch(tokenURL, { headers: ... });

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。