Article Fetcher(文章抓取+Notion/Obsidian知识库存档)
抓取微信公众号、小红书、豆瓣、知乎文章,自动上传 OSS 图片,LLM 智能提取关键词,一键存档到 Obsidian 本地知识库(可选 Notion)
haozhenjie
@ajayhao
What This Skill Does
Fetches articles from WeChat, Xiaohongshu, Douban, and Zhihu, uploads images to OSS, extracts keywords via LLM, and archives to Obsidian or Notion.
Replaces manually copying and formatting articles from multiple Chinese platforms into a knowledge base by automating the entire pipeline from fetch to archive.
When to Use It
- Archive a WeChat public account article to Obsidian with tags and metadata
- Save a Xiaohongshu post to Notion for long-term reference
- Collect multiple Zhihu answers into a local knowledge base for research
- Preview a Douban article's content and keywords without saving
- Batch archive articles from different platforms into a unified Obsidian vault
- Extract and store key topics from an article using LLM-powered keyword extraction
Install
$ openclaw skills install @ajayhao/article-fetcherArticle Fetcher v1.3.6
抓取微信公众号、小红书、豆瓣、知乎文章,自动上传 OSS 图床,LLM 智能关键词提取,默认存档到 Obsidian 本地知识库(可选 Notion 双写)。
存档模式
四种场景按需灵活切换,不存档时仅终端输出抓取结果:
| 场景 | Obsidian | Notion | 行为 |
|---|---|---|---|
| 🏠 本地优先 | ✅ | ❌ | 存档到 Obsidian 本地知识库 |
| ☁️ 纯云端 | ❌ | ✅ | 存档到 Notion 数据库 |
| 🏠+☁️ 双写 | ✅ | ✅ | Obsidian + Notion 双存档 |
| 🔍 预览 | ❌ | ❌ | 仅终端输出,不存档 |
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置环境变量
skill 通过 $AGENT_HOME/.env 加载配置(自动兼容 Hermes / OpenClaw 等 agent)。设置方式:
# 当前 agent 为 Hermes,只需设置一次:
export AGENT_HOME=$HERMES_HOME
环境变量清单(写入 $AGENT_HOME/.env 或系统环境变量):
# ========== 必需:OSS 图床 ==========
ALIYUN_OSS_AK=your_ak
ALIYUN_OSS_SK=your_sk
ALIYUN_OSS_BUCKET_ID=your_bucket
ALIYUN_OSS_ENDPOINT=oss-cn-shanghai.aliyuncs.com
# ========== 推荐:Obsidian 本地存档 ==========
# Windows 示例:
OBSIDIAN_VAULT_PATH=D:\GitRepo\AjayObsidianVault
# macOS 示例:
# OBSIDIAN_VAULT_PATH=/Users/yourname/ObsidianVault
# Linux / 云服务器示例:
# OBSIDIAN_VAULT_PATH=/home/yourname/ObsidianVault
# ========== 可选:Notion 云端存档 ==========
NOTION_API_KEY=secret_xxx
NOTION_ARTICLE_DATABASE_ID=database_id
# ========== 可选:LLM 关键词提取(OpenAI 兼容接口,与 video-summarizer 共用配置)==========
LLM_API_KEY=***
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-v4-pro
# ========== 可选:Cookies(反爬,Netscape 格式)==========
WECHAT_COOKIES_FILE=~/.cookies/wechat_cookies.txt
ZHIHU_COOKIES_FILE=~/.cookies/zhihu_cookies.txt
3. 使用
cd <skill-dir>
python3 main.py "文章 URL" [标签1] [标签2]
支持平台:微信公众号 (mp.weixin.qq.com)、小红书 (xiaohongshu.com / xhslink.com)、豆瓣 (douban.com)、知乎 (zhihu.com)
离线输入(HTML / MHTML)
除 URL 外,支持直接喂入 HTML 文本或 .mhtml 文件(源自 wechat-article-capture 技能的三级策略),由 article-fetcher 负责图片上传 OSS、替换 URL 与归档。解析层已内置三处陷阱修复:微信懒加载 data-src→src 并删除 data-src、MHTML 编码乱码(charset 探测)、data:image/svg+xml 占位符过滤。
# 三级:MHTML 文件
python3 main.py --mhtml page.mhtml --url https://mp.weixin.qq.com/s/xxx 标签1
# 二级:粘贴 HTML(stdin)
cat page.html | python3 main.py --html - --url https://mp.weixin.qq.com/s/xxx
# 一级 / 原路径(不变)
python3 main.py "https://mp.weixin.qq.com/s/xxx" 标签1
--platform默认wechat(直传 HTML/MHTML 无 URL,无法自动探测平台)--url可选:作为图片下载 Referer 与归档 link;不传时回退平台默认 Referer(微信mp.weixin.qq.com)- 解析产出标准
article_data,后半段管线(OSS 上传 → 替换 → 打标 → 字数 → 归档)与 URL 模式完全复用
处理流程
URL → 平台识别 → 内容抓取 → 图片上传 OSS → 关键词提取 (LLM → 词频降级)
│
┌────────────────────┴────────────────────┐
▼ ▼
OBSIDIAN_VAULT_PATH? NOTION_API_KEY?
✅ → Obsidian .md ✅ → Notion 页面
都不配 → 终端输出
Obsidian 存档格式
文章存入 {OBSIDIAN_VAULT_PATH}/收件箱/,命名规则 {YYYY-MM-DD}_{title}.md。
💡 本地适配:Vault 去序号后,存档目录从
1-收件箱/改为收件箱/(obsidian_archiver.py已同步修正)。
文件示例
---
title: "AI Agent 技术全景解析"
source: wechat
author: "张三"
link: "https://mp.weixin.qq.com/s/xxx"
tags:
- AI Agent
- LLM
- 技术架构
pub_date: "2026-05-10 14:30:00"
words: 3500
fetched: "2026-06-22 20:15:00"
article_id: "uuid"
---
# AI Agent 技术全景解析
正文内容(HTML → Markdown 转换,OSS 图片已内嵌)...
设计要点
- Frontmatter:YAML 格式,Obsidian 原生兼容,tag 列表可直接被 Dataview 查询
- 文件命名:标题即文件名,非法字符自动替换为
- - HTML→Markdown:通过
markdownify转换,保留链接、图片、粗斜体等格式 - 非阻塞:Obsidian 写入失败不影响 Notion 存档(如果配置了双写)
Notion 数据库字段(可选)
配置 NOTION_API_KEY + NOTION_ARTICLE_DATABASE_ID 后启用双写。
| 字段 | 类型 | 说明 |
|---|---|---|
| Title | title | 文章标题(≤200 字符) |
| Source | rich_text | 来源平台 |
| Author | rich_text | 作者 |
| Link | url | 原文链接 |
| Tags | multi_select | 自动提取关键词 + 手动标签 |
| PubDate | date | 发布时间 |
| Words | number | 字数统计(剔除 HTML) |
| ts | date | 存档时间(东八区) |
关键说明
- Cookies:知乎/微信反爬需配置(Netscape 格式),小红书/豆瓣无需登录
- 知乎 / 微信二级回退:HTTP (Cookies) → Playwright 浏览器 → 失败放弃。自动检测反爬页面(环境异常/验证码)并回退
- 空内容检测:正文为空或含反爬关键词时视为抓取失败,不生成垃圾文件
- Playwright:执行
playwright install chromium后自动生效,未安装时跳过浏览器回退 - 关键词:LLM 优先(OpenAI 兼容接口),未配置或失败自动降级本地词频
- 图片:上传失败不阻断,成功多少记录多少
- 时间:统一
YYYY-MM-DD HH:MM:SS,缺失时留空(不伪造) - 模块:
main.py可作 Python 模块调用:from main import fetch_and_archive_article - Obsidian 本地落盘 + 图片 OSS 上传:
.md笔记写入本地磁盘,但文章图片会上传至阿里云 OSS 图床(必需)后再嵌入,并非纯本地;LLM 关键词提取为可选功能,启用时文章文本(前 12000 字符)会发送至配置的 API 端点
安全与隐私
- URL 校验:严格白名单匹配 hostname,拒绝路径拼接攻击
- Cookie 隔离:Netscape Cookies 按域名过滤,仅附加到匹配的请求
- LLM 数据外发:配置
LLM_API_KEY时,文章内容(前 12000 字符)会发送至配置的 API 端点(仅用于关键词提取)。不配置则不发送 - 图片下载:自动下载原文图片并上传 OSS,过程中会请求第三方图片服务器,请确保有权抓取目标文章
- 敏感信息:AK/SK/Key 等仅存储于本地,skill 不会外泄
- Obsidian 本地落盘:
.md文件写入本地磁盘;但文章图片需上传阿里云 OSS(必需),因此并非「零网络外发」 - 权限最小化:OSS Bucket 建议仅授予 PutObject/GetObject;Notion Integration 仅授予目标数据库读写权限
- 依赖锁定:requirements.txt 使用精确版本号,避免供应链风险
扩展平台
fetchers/下创建xxx_fetcher.py,继承BaseFetcher实现fetch_article()detector/platform_detector.py的ALLOWED_HOSTS添加平台域名main.py的FETCHER_REGISTRY注册
Top skills in this category
Gog
@steipeteGoogle Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs.
API Gateway
@byungkyuCall third-party APIs through the Maton gateway, which injects the credential for an app the user has already connected. Use this skill when the user names a connected app and a concrete action in it - read a mailbox, query a CRM, file an issue, update a spreadsheet, run a query through a connected
Notion
@steipeteNotion API for creating and managing pages, databases, and blocks.
Mcporter
@steipeteUse the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
Caldav Calendar
@asleep123Sync and query CalDAV calendars (iCloud, Google, Fastmail, Nextcloud, etc.) using vdirsyncer + khal. Works on Linux.