---
name: leoyeai/content-collector
source: https://app.decimal.ai/s/leoyeai-content-collector@1/SKILL.md
source_sha256: 2d9fbabe02d5
---

# Content Collector — 个人内容收藏系统

收藏好内容 → 结构化整理 → 关键词检索 → 二次创作

## 数据位置

### 主存储（AI 检索用）
`<WORKSPACE>/collections/`

```
collections/
├── articles/       # 文章、博客、长文
├── tweets/         # X/Twitter 推文、短内容
├── videos/         # 视频内容（转录+笔记）
├── wechat/         # 微信公众号文章
├── ideas/          # 零散想法、灵感
├── index.md        # 全局索引（自动维护）
└── tags.md         # 标签索引（自动维护）
```

### Obsidian 同步（人工浏览用，可选）
`<YOUR_OBSIDIAN_VAULT>/收藏/`

```
收藏/
├── 文章/           # ← collections/articles
├── 视频/           # ← collections/videos
├── 推文/           # ← collections/tweets
├── 公众号/         # ← collections/wechat
└── 想法/           # ← collections/ideas
```

**每次收藏时必须同时写入两个位置。** Obsidian 版本的差异：
1. **文件名**：用中文标题（从 frontmatter title 取），不用 `YYYY-MM-DD-slug` 格式
2. **标签**：frontmatter 保留 `tags` 数组 + 正文第一行加 `#tag1 #tag2 ...` 格式（Obsidian 图谱和搜索用）
3. **aliases**：frontmatter 加 `aliases: [title]`，方便 Obsidian 双链搜索
4. **目录映射**：`articles→文章`、`videos→视频`、`tweets→推文`、`wechat→公众号`、`ideas→想法`

**Obsidian 写入模板**（伪代码）：
```
target_dir = <YOUR_OBSIDIAN_VAULT>/收藏/{中文目录}/
filename = sanitize(title).md   # 去掉 <>:"/\|?* 等非法字符，截断80字符
content = 原始 frontmatter（加 aliases） + "\n\n" + "#tag1 #tag2 ..." + "\n\n" + body
```

## 收藏工作流

### Supadata API（优先方案）
对于大部分 URL，优先使用 Supadata API 解析：
- 脚本：`SUPADATA_API_KEY=<key> python3 scripts/supadata_fetch.py <command> <url>`
- 环境变量：`SUPADATA_API_KEY` 存放在 TOOLS.md

| 内容类型 | 命令 | 说明 |
|---------|------|------|
| 网页/博客 | `web <url>` | 返回 Markdown 正文，1 credit |
| 视频转录 | `transcript <url> --text [--lang zh]` | YouTube/TikTok/X/Instagram/Facebook，1-2 credits |
| 社交媒体元数据 | `metadata <url>` | 标题、作者、互动数据，1 credit |

Supadata 不可用时的降级方案：
- 网页 → `web_fetch`
- B站 → 本地 bilibili 脚本（见下方）
- 需登录/内网 → Chrome Relay

### URL 内容（文章/博客/网页）
1. **优先** `supadata_fetch.py web <url>` 抓取正文
2. **降级** `web_fetch` 抓取正文
3. 提取标题、作者、发布日期、正文摘要、关键词
4. **提取有价值的插图**（默认执行，见下方「插图保存规范」）
5. 生成 `collections/articles/YYYY-MM-DD-slug.md`（含插图引用）
6. **HTML 快照保存**（仅重要文章）：对 P0/P1 级别的文章，额外保存一份原始 HTML 到 `collections/articles/YYYY-MM-DD-slug.html`，防止源页面删除后内容丢失。普通收藏不保存快照（避免磁盘膨胀）
7. **同步到 Obsidian** → `<YOUR_OBSIDIAN_VAULT>/收藏/文章/{标题}.md`（含插图复制）

### 视频内容（YouTube/TikTok/X/Instagram/Facebook）
1. **元数据**: `supadata_fetch.py metadata <url>`
2. **转录**: `supadata_fetch.py transcript <url> --text --lang zh`
3. **内容提取**：基于转录文本提取核心观点、金句、要点
4. 生成 `collections/videos/YYYY-MM-DD-slug.md`
5. **同步到 Obsidian** → `<YOUR_OBSIDIAN_VAULT>/收藏/视频/{标题}.md`

### 纯文本/截图
1. 截图用 `image` 工具提取文字
2. 整理成结构化格式，来源可选补充

### B站视频（本地流程，Supadata 不支持 B站）
1. **元数据**：`python3 scripts/bilibili_extract.py <bvid_or_url>` → 标题、作者、时长、标签、数据指标
2. **评论区**：
   - 无登录（API）：3条热门
   - 已登录（浏览器 shadow DOM）：20+条，见 `references/bilibili-comments.md`
3. **视频转录**：`bash scripts/bilibili_transcribe.sh <bvid_or_url> [model]`
   - 依赖：yt-dlp、faster-whisper（uv）、opencc
   - 需浏览器已登录B站（yt-dlp 读取 cookie）
   - 模型：tiny/base(默认)/small/medium，base 约10-15分钟转录46分钟视频
   - 输出：`/tmp/bilibili_audio/<BVID>_transcript.json` + `.txt`
   - 注意：ASR 有识别错误，专有名词需人工校验
   - **降级方案**（转录失败时）：
     - yt-dlp cookie 过期 → 提示用户在 openclaw browser 重新登录 B站
     - faster-whisper 不可用 → 尝试 `whisper` CLI（`pip3 install openai-whisper`）
     - 全部失败 → 仅保存元数据+评论，在收藏文件中标注"转录未获取，待补充"，不阻塞收藏流程
4. **内容提取**：基于转录文本提取核心观点、金句、要点
5. 生成 `collections/videos/YYYY-MM-DD-slug.md`
6. **同步到 Obsidian** → `<YOUR_OBSIDIAN_VAULT>/收藏/视频/{标题}.md`

## 插图保存规范

**收藏文章时默认提取有价值的插图**，作为后续写作素材。

### 判断标准（哪些图值得保存）
- ✅ 架构图、流程图、框架图、对比图、数据可视化
- ✅ 概念说明图、示意图、信息图
- ❌ 装饰性 banner、logo、头像、广告
- ❌ 纯文字截图（直接引用文字更好）

### 操作流程
1. **发现插图**：用 browser `evaluate` 提取页面 `<img>` 列表（src + alt + caption）
2. **筛选**：排除装饰性图片（logo、小于 200px、SVG 图标等）
3. **下载**：用 CDN 原始 URL（避免 Next.js 等图片优化层），`curl -sL` 保存到：
   - collections 路径：`collections/{category}/images/{slug}/01-描述.png`
   - slug 与收藏文件的文件名 slug 一致
4. **嵌入收藏文件**：在正文中用 `## 插图` 章节，每张图包含：
   - `![alt](images/{slug}/filename.png)`
   - 斜体说明文字（来自 caption 或自行总结）
5. **同步到 Obsidian**：
   - 复制图片到 `<YOUR_OBSIDIAN_VAULT>/收藏/{中文目录}/images/{slug}/`
   - Obsidian 版本使用相同的相对路径引用

### 命名规范
- 文件名：`{序号}-{简短英文描述}.png`（如 `01-architecture-overview.png`）
- 目录名：与收藏文件 slug 一致（如 `evals-for-agents`）

### 注意
- 图片保存为本地副本，不依赖外部 URL（防止链接失效）
- 单篇文章通常 3-8 张有价值的图，不要过度收集

## 关联项目（自动匹配）

每次收藏内容后，自动将内容与当前活跃项目关联：

1. 读取 `<WORKSPACE>/memory/topics/projects.md` 获取活跃项目列表
2. 将收藏内容的标题、摘要、标签与每个项目的关键词匹配
3. 匹配到的项目写入收藏文件的 YAML frontmatter：
   ```yaml
   related_projects: ["wemp-ops", "xiaohongshu-ops"]
   project_notes: "这个案例可以用于公众号选题：AI调度人力的真实案例"
   ```
4. 同时在 `index.md` 中标注关联项目，方便按项目筛选素材

### 项目关键词（自动从 projects.md 提取）
- **wemp-ops**：公众号、写作、文章、排版、内容运营
- **xiaohongshu-ops**：小红书、笔记、种草、配图、短内容
- **content-collector**：收藏、知识管理、素材库

### 使用场景
- 写公众号文章前：`搜索关联 wemp-ops 的收藏` → 快速找到素材
- 写小红书前：`搜索关联 xiaohongshu-ops 的收藏` → 找到适合拆解的内容
- 选题会议：按项目汇总最近收藏 → 发现选题方向

## 存储格式

文件命名：`YYYY-MM-DD-slug.md`

```yaml
---
title: "标题"
source: "来源平台"
url: "原始链接"
author: "作者"
date_published: "发布日期"
date_collected: "收藏日期"
tags: [tag1, tag2, tag3]
category: "articles|tweets|videos|wechat|ideas"
language: "zh|en"
summary: "一句话摘要"
# 视频专属（可选）
duration: "时长"
platform: "bilibili|youtube"
bvid: "BV号"
stats: { views: 0, likes: 0, comments: 0 }
---
```

### 内容结构

- **内容概览**（条件触发，见下方规则）— Mermaid 图，一图看懂全文
- **核心观点** — 3-7个要点
- **要点摘录** — 原文金句（blockquote）
- **热门评论精选**（视频类）— 含点赞数
- **评论区观点摘要**（视频类）— 总结争议点
- **我的笔记** — 用户个人批注，后续补充
- **原文摘要** — 200-500字概要

### 英文内容翻译规范

当 `language: en` 时，收藏过程中的翻译遵循以下规则：

**翻译风格**（默认 storytelling，不需要每次询问）：

| 风格 | 效果 | 适用 |
|------|------|------|
| `storytelling` | 叙事流畅，过渡自然（**默认**） | 博客、观点文、技术分享 |
| `technical` | 精准简洁，术语密集 | API 文档、技术规范 |
| `conversational` | 口语化，像朋友聊天 | Twitter thread、播客转录、访谈 |
| `formal` | 正式结构化 | 学术论文、白皮书 |

**触发条件**：老板说"精翻"→ 用更仔细的翻译；说"学术风格"→ formal；默认不问直接用 storytelling。

**术语表**：翻译时参照 `<WORKSPACE>/references/glossary-ai-zh.md` 统一术语。首次出现的术语用 `中文（English）` 格式。

**欧化检查**：翻译后扫一遍欧化中文问题（多余连接词/被动语态/名词堆砌），参照 `wemp-ops/references/style-guide.md` 的"欧化中文自检"。

### 内容概览图生成规则

**触发条件**：正文 > 1000 字的 articles / wechat / videos（短推文、零散想法不画）。

**输出格式**：Mermaid 代码块，直接嵌入收藏文件的 `## 内容概览` 章节。Obsidian 原生渲染，不需要额外插件。

**图表类型自动选择**（按文章内容匹配）：

| 文章特征 | 图表类型 | Mermaid 语法 | 示例 |
|---------|---------|-------------|------|
| 方法论/框架/模型（分层、组件） | 思维导图 | `mindmap` | "AI PM 的 3 个核心能力" |
| 流程/步骤/演进（先后顺序） | 流程图 | `graph TB` | "AI 编程三次进化" |
| 对比/选择（A vs B） | 对比图 | `graph TB` + 并行 subgraph | "传统 PM vs AI PM" |
| 多实体互动/依赖关系 | 关系图 | `graph LR` | "Agent 各模块数据流" |
| 时间线/里程碑 | 时间线 | `graph LR` 线性 | "2024 AI 大事记" |
| 混合/不确定 | 思维导图 | `mindmap`（万能兜底） | — |

**生成要求**：
1. **节点文字用文章原始术语**，不用"概念1"、"模块A"等占位符
2. **层级不超过 3 层**——图是辅助理解，不是完整复述
3. **节点数量 5-15 个**——太少没信息量，太多一眼看不完
4. **遵守 Mermaid 语法规范**——详见 `references/mermaid-syntax-rules.md`，特别注意：
   - `1. ` 触发列表解析错误 → 用 `①` 或 `(1)` 或去掉空格
   - subgraph 带空格 → 用 `subgraph id["显示名"]` 格式
   - 节点引用用 ID 不用显示文本
   - 不要在节点文本中使用 Emoji
5. **配色使用语义色**：
   - 核心概念：`fill:#d3f9d8,stroke:#2f9e44`（绿）
   - 问题/挑战：`fill:#ffe3e3,stroke:#c92a2a`（红）
   - 方法/工具：`fill:#e5dbff,stroke:#5f3dc4`（紫）
   - 输出/结果：`fill:#c5f6fa,stroke:#0c8599`（青）

**嵌入格式示例**：
```markdown
## 内容概览

\`\`\`mermaid
mindmap
  root((AI PM 核心能力))
    问题定义
      从模糊需求到精确问题
      判断什么值得做
    上下文质量
      Context Engineering
      给 Agent 正确的信息
    判断力
      评估 Agent 产出
      知道何时人工介入
\`\`\`
```

**不做什么**：
- 不生成独立图片文件——Mermaid 文本直接嵌入 Markdown
- 不画太复杂的图——收藏文件的图是"速览"，不是完整笔记

## Obsidian 同步规范

每次写入 `collections/` 后，**必须**同时写入 Obsidian 版本。步骤：

1. 从刚写入的收藏文件读取 frontmatter
2. 构建 Obsidian 版本：
   - 保留 frontmatter 的 `title, source, url, author, date_published, date_collected, category, language, summary, duration, platform, bvid, tags`
   - 添加 `aliases: [title]`
   - 正文第一行加 `#tag1 #tag2 ...`（标签中的空格替换为 `_`）
3. 文件名 = `sanitize(title).md`（去掉 `<>:"/\|?*`，截断 80 字符）
4. 写入到 `<YOUR_OBSIDIAN_VAULT>/收藏/{中文目录}/`

目录映射：
| collections 目录 | Obsidian 目录 |
|---|---|
| articles/ | 文章/ |
| videos/ | 视频/ |
| tweets/ | 推文/ |
| wechat/ | 公众号/ |
| ideas/ | 想法/ |

**注意**：Obsidian 版本是 collections 的只读镜像。编辑应在 collections 原文件上进行，然后重新同步。

## 索引

每次收藏后更新：
- **index.md** — 按月份倒序，含标签和来源
- **tags.md** — 按标签聚合所有收藏

## 检索

1. 标签匹配：`tags.md` 中查找
2. 全文搜索：`grep -ril "keyword" collections/`
3. 返回匹配列表 + 摘要

## 二创 — 小红书内容生成

1. 按选题/标签从收藏库筛选素材
2. 参考 `references/xiaohongshu-style.md` 写作风格
3. 生成：emoji标题 + 口语化正文(300-800字) + 话题标签(5-10个)
4. 发布配合 `xiaohongshu-ops` 技能

## 联动 — 公众号写作供料

收藏库是 `wemp-ops` 公众号写作的素材来源之一。wemp-ops 选题时会自动检索收藏库：
- 标签匹配：`tags.md` 按关键词查找相关收藏
- 全文搜索：`grep -ril` 搜索 collections/ 目录
- 收藏文件中的"核心观点"、"要点摘录"、"我的笔记"可直接用于文章引用

**收藏时的写作友好建议**：
- `summary` 写清楚，便于快速判断是否相关
- `tags` 覆盖主题关键词，提高检索命中率
- "我的笔记"多写自己的思考和联想，这些是文章的独特视角

## 分类规则

| 来源 | 目录 | 备注 |
|------|------|------|
| 博客/网页 | `articles/` | 默认归类 |
| X/Twitter | `tweets/` | 短内容/thread |
| 微信公众号 | `wechat/` | 中文长文 |
| B站/YouTube/抖音 | `videos/` | B站可自动转录 |
| 零散想法 | `ideas/` | 非外部来源 |

## 标签规范

- 中文为主，英文专有名词保持英文
- 每条 3-8 个标签
- 常用：`AI`、`产品设计`、`电商`、`运营`、`技术`、`商业`、`创业`、`效率工具`、`思维模型`、`管理`

## 写作素材交接（Skill Handoff）

收藏完成后，检查内容是否与选题池中的选题相关：

1. 读 `<WORKSPACE>/collections/topics/topic-pool.md`（公众号）和 `<WORKSPACE>/collections/topics/xhs-topic-pool.md`（小红书）
2. 如果收藏内容的标签/主题与某个选题匹配，追加到 `<WORKSPACE>/temp/handoffs/collector-to-writing.md`：
   ```markdown
   ### <收藏标题>
   - 关联选题：<匹配到的选题>
   - 来源：<URL>
   - 收藏时间：<日期>
   - 可用角度：<这个素材可以怎么用在文章里，1-2句话>
   ```
3. 追加模式（append），不覆盖已有内容
4. 如果没有匹配的选题，跳过此步（不创建空文件）

**注意**：此步骤是补充性的，不替代已有的"关联项目"功能。交接文件面向下游写作 skill，关联项目面向收藏库内部检索。

## 命令速查

| 用户说 | 动作 |
|--------|------|
| "收藏这个 [URL/文字]" | 抓取→整理→存储→更新索引 |
| "搜索 [关键词]" | 搜索收藏库 |
| "最近收藏了什么" | 读 index.md |
| "关于 [标签] 的收藏" | 从 tags.md 筛选 |
| "用 [选题] 写篇小红书" | 二创生成 |
| "给这篇加个笔记" | 更新"我的笔记"部分 |
| "删除这条收藏" | 移除并更新索引 + 删除 Obsidian 对应文件 |
| "重新同步到 Obsidian" | 全量重新同步：`python3 scripts/sync_to_obsidian.py`（skill 目录下） |