微信公众号文章抓取
用户调用方式示例:
/wxpublic-fetch 拆神
/wxpublic-fetch 拆神 2026-04-15 2026-04-21
/wxpublic-fetch 拆神 2026-04-01 2026-04-21 --output ~/articles
/wxpublic-fetch 拆神 --app-id ak_xxx --secret abc123
用户传入的参数:$ARGUMENTS
执行步骤
第一步:解析参数
告知用户:
[1/5] 正在解析参数...
从 $ARGUMENTS 中提取:
name(必填):公众号名称,第一个非日期、非--output、非--app-id、非--secret的参数startDate(可选):格式yyyy-MM-dd,默认为今天往前 7 天endDate(可选):格式yyyy-MM-dd,默认为今天--output <dir>(可选):文章保存目录,默认为~/wxpublic_articles/<name>--app-id <AppID>(可选):平台 AppID,若未提供则读取环境变量WXPUBLIC_APP_ID--secret <SecureKey>(可选):平台 SecureKey,若未提供则读取环境变量WXPUBLIC_SECURE_KEY
如果参数不足(缺少公众号名称),告知用户正确用法并停止。
如果 app_id 和 secure_key 均为空(参数和环境变量都未设置),向用户说明:
- 可通过
--app-id和--secret参数传入,或设置环境变量WXPUBLIC_APP_ID/WXPUBLIC_SECURE_KEY; - 如果尚未拥有 AppID 和 SecretKey,请前往 https://wxpub.xiongweixp.tech 注册并生成。 然后停止,等待用户提供凭证。
今天的日期可从系统获取:
date +%Y-%m-%d
第二步:获取文章 URL 列表
告知用户:
[2/5] 正在查询「<name>」的文章列表(<startDate> ~ <endDate>)...
调用接口:POST https://www.xiongweixp.tech/wxpublic_fetch/fetch
根据系统类型选择对应命令:
Linux / macOS(bash):
curl -s -X POST https://www.xiongweixp.tech/wxpublic_fetch/fetch \
-H "Content-Type: application/json" \
-d "{\"app_id\":\"<app_id>\",\"secure_key\":\"<secure_key>\",\"name\":\"<name>\",\"startDate\":\"<startDate>\",\"endDate\":\"<endDate>\"}"
Windows(PowerShell):
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$body = [System.Text.Encoding]::UTF8.GetBytes('{"app_id":"<app_id>","secure_key":"<secure_key>","name":"<name>","startDate":"<startDate>","endDate":"<endDate>"}')
Invoke-RestMethod -Method POST -Uri "https://www.xiongweixp.tech/wxpublic_fetch/fetch" -ContentType "application/json; charset=utf-8" -Body $body | ConvertTo-Json -Depth 10
响应格式:
{
"urls": ["https://mp.weixin.qq.com/s/...", ...],
"count": 3
}
- 如果响应包含
"error"字段:- 若
error值为"Insufficient balance",提示用户:「账户余额不足,请前往公众号技能网页 https://wxpub.xiongweixp.tech/ 充值后重试。」然后停止。 - 其他错误则向用户报告错误详情并停止。
- 若
- 如果
count为 0,告知用户该时间范围内没有找到文章并停止。 - 告知用户找到了几篇文章,即将开始处理。
第三步:准备保存目录
告知用户:
[3/5] 正在准备保存目录 <output_dir>...
mkdir -p "<output_dir>/images"
第四步:并行抓取所有文章的 Markdown
告知用户:
[4/5] 正在并行抓取 <count> 篇文章并下载图片,请稍候...
调用 scripts/wxpublic_fetch.py,将 output_dir 作为第一个参数,所有 URL 依次作为后续参数传入。
脚本位于本 SKILL.md 所在目录下的 scripts/wxpublic_fetch.py。执行前先解析出绝对路径。
python3 "<scripts_dir>/wxpublic_fetch.py" "<output_dir>" "<url1>" "<url2>" ...
- url2md 并发 5 线程,图片下载并发 8 线程。
- 从输出中解析
SAVED:<path>收集成功路径,FAILED:<url> | <reason>收集失败信息。
第五步:汇总报告
告知用户:
[5/5] 正在生成汇总报告...
所有文章处理完毕后,输出汇总:
✓ 已保存 N 篇文章到 <output_dir>
保存的文件:
1. /path/to/article1.md
2. /path/to/article2.md
...
(如有跳过)以下文章处理失败:
- https://mp.weixin.qq.com/s/... (原因)
重要:将所有保存的 .md 文件路径列表存入对话上下文,方便用户后续直接问"帮我总结这些文章"或"这些文章讲了什么"时,能直接读取对应文件内容作答。
注意事项
- 微信图片 URL(
mmbiz.qpic.cn)有防盗链,下载时加上-L跟随重定向,如果失败则保留原始 URL。 - 文件名中不能含有
/ \ : * ? " < > |等字符。 - 如果公众号名称包含特殊字符,在 JSON 请求体中正确转义。
- 图片文件夹
images/统一放在文章保存目录下,所有文章共享该目录(避免重复下载相同图片)。
Scan to contact