用途:归档单篇微信公众号文章到 Obsidian vault,抓取静态 HTML 并提取标题、作者、正文、发布时间和配图,按 clip 家族规范落地。需要 PDF 时优先用 Obsidian 导出。触发说法如「归档这篇公众号」「clip 这个公众号文章」「存这篇微信文章」。
主要能力:无需 API,用标准库拉取页面;解析 #js_content 正文、#activity-name / og:title 标题、author meta 署名作者、#js_name 公众号名、createTime / oriCreateTime 发布时间;提取 data-src 图片并保留远程链接,当前脚本不下载图片。脚本支持 --dry-run、--json、URL 去重、正文质量门和原子写。
使用方式:先 dry-run 核对标题、作者、发布时间、body_chars、图片数与 content_complete,再去掉 --dry-run 写入。示例:
python3 scripts/archive_wechat.py <url> --vault <vault-path> --articles-dir <vault-relative-articles-dir> --dry-run --json
配置入口:OBSIDIAN_VAULT=<vault-path>、OBSIDIAN_ARTICLES=<vault-relative-articles-dir>;CLI --vault / --articles-dir 优先于环境变量。安装:
npx skills add soia-team/soia-open-skills -g -a '*' -s soia-pkm-clip-wechat -y
落地规范:路径为 <vault-articles-dir>/<年>/<月>/YYYY-MM-DD-公众号-<作者>-<标题>.md;frontmatter 含 tags:[文章摘抄]、source: 公众号、url、author、publisher、published_at、captured_at、topics:[]、content_complete;正文段含 ## 摘要(AI 补)、## 原文、## 我的看法(留空)、## 关联。归档后由 AI 补摘要与 topics。
限制:无 API key、cookie 等凭据,也不解析 YAML config.yml;找不到 #js_content、正文异常短或命中拦截页关键词时默认拒绝写入,仅在客户明确接受不完整归档时用 --allow-incomplete;发布时间等解析失败需标注未核实。验证命令:python3 -m unittest discover -s tests -p 'test_*.py'、python3 -m py_compile scripts/archive_wechat.py(仓库维护者需替换为 skills/soia-pkm-clip-wechat/ 下路径)。