X Article Fetcher
通过 X.com 的 GraphQL API 抓取长文章(article),解析 Draft.js 内容模型,输出带图片的 Markdown 文件。
前置条件
用户必须提供 X 登录态的 auth_token 和 ct0 两个 cookie 值。引导用户按以下步骤获取:
- 在浏览器中打开 https://x.com(确保已登录)
- 按 F12 → Application(应用程序)→ Cookies → https://x.com
- 找到
auth_token,双击值列,Ctrl+C 复制 - 找到
ct0,双击值列,Ctrl+C 复制 - 将两个值告知(用于当次抓取,不存储)
⚠️ 这相当于临时借用用户登录态。抓取完成后提醒用户可以去 X 安全设置刷新 token。脚本通过命令行参数传入,不持久化凭证。
工作流
1. 确认文章 URL
从用户消息中提取 X 文章链接。支持的格式:
https://x.com/{user}/article/{id}https://x.com/i/article/{id}
提取 tweet/article ID(末尾数字)。
2. 获取凭证
如果用户尚未提供 auth_token 和 ct0,引导用户按上述步骤获取。
3. 运行脚本
执行 scripts/fetch_x_article.py,传入文章 URL 和 cookie 值:
python scripts/fetch_x_article.py "<article_url>" \
--auth-token "<token>" --ct0 "<ct0>"
可选项:
--download-images:下载图片到本地./images/目录--output <path>:指定输出文件路径(默认./article.md)
4. 呈现结果
脚本输出:
article.md:带图片嵌入的完整 Markdown 文件- 若开启
--download-images,还会生成images/目录(含所有图片原始文件)和gallery.html(图片浏览页)
加载 present_files 将 article.md 呈现给用户。
5. (可选) 自动生成 PDF
如需将文章转为精美 PDF(含封面、目录、分页、图片原位嵌入),执行:
python scripts/x_article_to_pdf.py --dir <article_dir>
其中 <article_dir> 是包含 article.md 和 images/ 目录的文章文件夹。脚本将:
- 读取 frontmatter 中的
title:作为 PDF 标题 - 自动生成深蓝渐变封面 + 目录页
- 用 Edge headless 模式渲染 A4 PDF,图片在原文位置
- 输出
article.pdf到文章目录
此脚本依赖 markdown、pygments 和本机 Edge 浏览器。
依赖
抓取
- Python 3.7+,
requests库
PDF 生成(可选)
- Python 3.7+,
markdown、pygments库 - Microsoft Edge 浏览器(Windows 自带)
技术细节
脚本内部流程:
- 从 x.com 主页动态提取最新的
TweetResultByRestIdqueryId(正则匹配main.xxx.js) - 构造 GraphQL GET 请求,携带变量(tweetId, features, fieldToggles)和认证 headers
- 解析响应中的 Draft.js
content_state:- blocks → 按 type 渲染(header/code/ordered-list/unstyled)
- inlineStyleRanges → Markdown 粗体/斜体
- entityRanges → 链接(LINK)+ 图片(MEDIA/IMAGE)
- 通过
media_entities数组建立 mediaId → 图片 URL 映射 - 将图片
嵌入原文正确的 block 位置 - (可选)下载所有图片到本地
Scan to join WeChat group