用途:把用户自己管理的微信公众号历史已发文章批量拉取并归档到 Obsidian vault,仅限归档自己管理的账号,不是通用爬虫。安装:npx skills add soia-team/soia-open-skills -g -a '*' -s soia-pkm-clip-gzh -y。配置约定 ~/.config/soia-skills/soia-open-skills/soia-pkm/soia-pkm-clip-gzh/config.yml,可用 SOIA_PKM_CLIP_GZH_CONFIG_FILE 指定,秘钥只放私有配置或环境,不进 vault 与仓库。
三条路线:路 A 官方 API(scripts/fetch_api.py),凭据 AppID/AppSecret 长期有效,但 freepublish/batchget 只覆盖经草稿箱「发布」的文章,多数未认证个人号无权限;路 C 公众号后台接口(scripts/fetch_mp.py),凭据只需 token/Cookie 一对,默认不传 --name/--fakeid 时走 appmsgpublish 读当前登录账号,传参则走 searchbiz+appmsg 读指定号;路 B 登录态 Cookie(scripts/fetch_cookie.py),凭据需 key/pass_ticket/appmsg_token 加 Cookie,抓取更易出错。读全部历史(含手动群发老文)优先用路 C,路 B 备选。
用法示例:python3 scripts/fetch_mp.py [--out <目录>] [--limit N] [--dry-run] [--vault <path>] [--account-name <显示名>] [--force] [--sleep 3] [--page-size 20]。三条脚本均按 url 去重,已归档默认跳过,--force 才覆盖;--dry-run 只拉列表不写文件。落地默认 Inbox/gzh-articles/<年>/,文件名 <出版日期>-公众号-<账号显示名>-<标题>.md,frontmatter 含 tags、url、title、author、published_at、captured_at、route、content_complete、topics 等。正文用 stdlib html.parser 转 Markdown,不保证完全还原排版。author 字段列表接口不返回,用 --account-name 兜底,不保证等于真实署名。内容为空或抓取失败时标 content_complete: false。
限制:路 B、路 C 为非官方接口,存在 ToS 风险,首次使用需展示声明并写入 consent.json 获得同意,仅限归档本人管理账号;token/Cookie 数小时到数天过期,无刷新机制,需重新抓包;存在限流风险,建议配合 --limit 分批跑。路线选择、凭据获取细节以技能文档为准,未提供的功能与限制暂未提供。