{"skill":{"slug":"article-fetcher","displayName":"Article Fetcher（文章抓取+Notion存档）","summary":"抓取微信公众号、小红书、豆瓣、知乎文章，自动上传 OSS 图片，LLM 智能提取关键词，一键存档到 Notion","description":"---\r\nname: article-fetcher\r\ndescription: \"抓取微信公众号、小红书、豆瓣、知乎文章，自动上传 OSS 图片，LLM 智能提取关键词，一键存档到 Notion\"\r\nhomepage: https://github.com/openclaw/openclaw\r\nmetadata:\r\n  { \"openclaw\": { \"emoji\": \"📰\", \"version\": \"1.0.2\", \"requires\": { \"bins\": [\"python3\"], \"env\": [\"ALIYUN_OSS_AK\", \"ALIYUN_OSS_SK\", \"ALIYUN_OSS_BUCKET_ID\", \"ALIYUN_OSS_ENDPOINT\", \"NOTION_API_KEY\", \"NOTION_ARTICLE_DATABASE_ID\"] }, \"primaryEnv\": \"NOTION_API_KEY\", \"install\": [{ \"id\": \"pip\", \"kind\": \"pip\", \"packages\": \"requests oss2 python-dotenv beautifulsoup4 lxml notion-client\", \"label\": \"Install Python dependencies\" }] } }\r\n---\r\n\r\n# Article Fetcher v1.0.2\r\n\r\n抓取微信公众号、小红书、豆瓣、知乎文章，自动上传 OSS 图床，LLM 智能关键词提取，一键存档到 Notion。\r\n\r\n## 快速开始\r\n\r\n### 1. 安装依赖\r\n\r\n```bash\r\npip install -r requirements.txt\r\n```\r\n\r\n### 2. 配置环境变量（`~/.openclaw/.env`）\r\n\r\n```bash\r\n# 必需：OSS 图床\r\nALIYUN_OSS_AK=your_ak\r\nALIYUN_OSS_SK=your_sk\r\nALIYUN_OSS_BUCKET_ID=your_bucket\r\nALIYUN_OSS_ENDPOINT=oss-cn-shanghai.aliyuncs.com\r\n\r\n# 必需：Notion 存档\r\nNOTION_API_KEY=secret_xxx\r\nNOTION_ARTICLE_DATABASE_ID=database_id\r\n\r\n# 可选：LLM 关键词提取（OpenAI 兼容接口，与 video-summarizer 共用配置）\r\nLLM_API_KEY=sk-your-api-key\r\nLLM_BASE_URL=https://api.deepseek.com\r\nLLM_MODEL=deepseek-v4-pro\r\n\r\n# 可选：Cookies（反爬，Netscape 格式）\r\nWECHAT_COOKIES_FILE=~/.cookies/wechat_cookies.txt\r\nZHIHU_COOKIES_FILE=~/.cookies/zhihu_cookies.txt\r\n```\r\n\r\n### 3. 使用\r\n\r\n```bash\r\ncd <skill-dir>\r\npython3 main.py \"文章 URL\" [标签1] [标签2]\r\n```\r\n\r\n**支持平台**：微信公众号 (`mp.weixin.qq.com`)、小红书 (`xiaohongshu.com` / `xhslink.com`)、豆瓣 (`douban.com`)、知乎 (`zhihu.com`)\r\n\r\n## 处理流程\r\n\r\n```\r\nURL → 平台识别 → 内容抓取 → 图片上传 OSS → 关键词提取 (LLM → 词频降级) → Notion 存档\r\n```\r\n\r\n## Notion 数据库字段\r\n\r\n| 字段 | 类型 | 说明 |\r\n|------|------|------|\r\n| Title | title | 文章标题（≤200 字符） |\r\n| Source | rich_text | 来源平台 |\r\n| Author | rich_text | 作者 |\r\n| Link | url | 原文链接 |\r\n| Tags | multi_select | 自动提取关键词 + 手动标签 |\r\n| PubDate | date | 发布时间 |\r\n| Words | number | 字数统计（剔除 HTML） |\r\n| ts | date | 存档时间（东八区） |\r\n\r\n## 关键说明\r\n\r\n- **Cookies**：知乎/微信反爬需配置（Netscape 格式），小红书/豆瓣无需登录\r\n- **关键词**：LLM 优先（OpenAI 兼容接口），未配置或失败自动降级本地词频\r\n- **图片**：上传失败不阻断，成功多少记录多少\r\n- **时间**：统一 `YYYY-MM-DD HH:MM:SS`，缺失时留空（不伪造）\r\n- **模块**：`main.py` 可作 Python 模块调用：`from main import fetch_and_archive_article`\r\n\r\n## 安全与隐私\r\n\r\n- **URL 校验**：严格白名单匹配 hostname，拒绝路径拼接攻击\r\n- **Cookie 隔离**：Netscape Cookies 按域名过滤，仅附加到匹配的请求\r\n- **LLM 数据外发**：配置 `DASHSCOPE_API_KEY` 时，文章内容会发送至 DashScope API（仅用于关键词提取）\r\n- **敏感信息**：AK/SK/Key 等仅存储于本地，skill 不会外泄\r\n- **权限最小化**：OSS Bucket 建议仅授予 PutObject/GetObject，Notion Integration 仅授予目标数据库读写权限\r\n- **依赖锁定**：requirements.txt 使用精确版本号，避免供应链风险\r\n\r\n## 扩展平台\r\n\r\n1. `fetchers/` 下创建 `xxx_fetcher.py`，继承 `BaseFetcher` 实现 `fetch_article()`\r\n2. `detector/platform_detector.py` 的 `ALLOWED_HOSTS` 添加平台域名\r\n3. `main.py` 的 `FETCHER_REGISTRY` 注册\r\n","tags":{"latest":"1.0.2"},"stats":{"comments":0,"downloads":394,"installsAllTime":0,"installsCurrent":0,"stars":1,"versions":3},"createdAt":1778160295594,"updatedAt":1778492872010},"latestVersion":{"version":"1.0.2","createdAt":1778400487730,"changelog":"## v1.0.2 (2026-05-10)\n\n### 🏗️ LLM 多平台抽象\n\n- **统一 LLM 配置**：`config.py` 移除 DashScope 专属字段（`dashscope_api_key`/`dashscope_base_url`/`dashscope_model`），改为 `LLM_API_KEY` + `LLM_BASE_URL` + `LLM_MODEL` 通用配置，移除 `DASHSCOPE_API_KEY` 等平台专属 Key，统一使用 `LLM_API_KEY` + `LLM_BASE_URL` + `LLM_MODEL` 三个环境变量\n- **重构 `tag_extractor.py`**：`extract_tags_llm()` 改为 OpenAI 兼容接口，支持 DeepSeek / DashScope / OpenAI / Groq 等任意平台\n- **LLM 可用性标记**：config 新增 `llm_available` 属性，一次判断即可决定是否启用 LLM\n- **升级日志**：LLM 调用增加模型名称打印（如 `deepseek-v4-pro`），便于排错","license":"MIT-0"},"metadata":{"setup":[{"key":"ALIYUN_OSS_AK","required":true},{"key":"ALIYUN_OSS_SK","required":true},{"key":"ALIYUN_OSS_BUCKET_ID","required":true},{"key":"ALIYUN_OSS_ENDPOINT","required":true},{"key":"NOTION_API_KEY","required":true},{"key":"NOTION_ARTICLE_DATABASE_ID","required":true}],"os":null,"systems":null},"owner":{"handle":"ajayhao","userId":"s17145mdmb9rthykrxn51j1yrx849jek","displayName":"haozhenjie","image":"https://avatars.githubusercontent.com/u/3146777?v=4"},"moderation":null}