download-wechat-articleslisted
Install: claude install-skill YijiaDuan/download-wechat-articles
# 下载自己公众号的历史文章
帮用户把自己管理的微信公众号「已发表」文章全量存成本地 Markdown。用户是公众号管理员,能登录 mp.weixin.qq.com。
## 核心设计(为什么是这个流程)
一次踩坑得来的两条关键事实,决定了整个流程:
1. **文章永久链接 `mp.weixin.qq.com/s/xxx` 是公开的**,不带任何 cookie 直连就能拿到完整正文。所以「下正文」这步完全不需要登录态。
2. **只有「文章列表」接口 `appmsgpublish` 需要登录态**,而真正的会话 cookie 是 httpOnly 的,JS 读不出来,浏览器自动化工具也进不了 mp.weixin.qq.com 域。
所以不要试图去提取 token/cookie(又难又不安全)。正确做法是**让用户在已登录的后台页面的��览器控制台里直接 fetch**——浏览器会自动带上登录态(含 httpOnly cookie),一键导出文章清单。凭证从头到尾不离开用户的浏览器。
流程两步:
- **第 1 步(需登录态,在浏览器里)**:控制台脚本调 `appmsgpublish` 分页拉全部文章,导出 `wechat_articles.json` 清单。
- **第 2 步(无需登录态,在本地)**:Python 脚本读清单,逐篇下公开链接、转干净 Markdown。
## 操作流程
### 0. 装依赖(第一次用时)
```bash
pip3 install requests beautifulsoup4 html2text lxml --break-system-packages
```
报错就去掉 `--break-system-packages` 重试。也确认 `python3 --version` 能跑(没有就 `xcode-select --install`)。
### 1. 引导用户导出文章清单
把 `assets/get_article_list.js` 的**整段内容**发给用户(用 Read 读出来贴给他),并给这段话:
> 1. 浏览器登录 mp.weixin.qq.com,进到后台首页(地址栏 URL 里能看到 `token=一串数字`)。
> 2. 按 F12(或右键→检查)打开开发者工具,切到 **Console / 控制台** 标签。
> 3. 把我发你的这段脚本整段粘贴进去,回车。
> 4. 它会自动分页抓取,完成后弹窗提示,并把 `wechat_articles.json` 下到你的「下载」文件夹。回来告诉我。
脚本原理已内置注释:读 URL 里的 token,`fetch` 调接口(`credentials:'include'` 自动带 cookie),分页去重后触发下载。用户全程不用找 cookie。
### 2. 本地转 Markdown
用户导出清单后,跑:
```bash
python3 ~/.claude/skills/download-wechat-articles/scripts/build_markdown.py [清单路径] [输出目录]
```
- 清单路径默认 `~/Downloads/wechat_articles.json`;输出目录默认 `./公众号文章`。
- 先 `--limit 3` 试跑三篇确认没问题,再去掉跑全量。
- 每篇间隔默认 3 秒(`--delay`)。已存在的文件自动跳过,支持断点续跑。
放后台跑(篇数多时超过 1 分钟),定期查进