information-clipper
信息剪报 Skill — 接收链接,自动抓取网页内容并整理为标准 Markdown,存入本地剪报库。支持微信公众号、即刻等平台,Bilibili/知乎/小红书待测试,生成含元数据的结构化文档,适合作为知识管理或个人阅读存档的工作流。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
信息剪报 Skill — 接收链接,自动抓取网页内容并整理为标准 Markdown,存入本地剪报库。支持微信公众号、即刻等平台,Bilibili/知乎/小红书待测试,生成含元数据的结构化文档,适合作为知识管理或个人阅读存档的工作流。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | information-clipper |
| description | 信息剪报 Skill — 接收链接,自动抓取网页内容并整理为标准 Markdown,存入本地剪报库。支持微信公众号、即刻等平台,Bilibili/知乎/小红书待测试,生成含元数据的结构化文档,适合作为知识管理或个人阅读存档的工作流。 |
| author | TaohongMaxwell |
| repository | https://github.com/TaohongMaxwell/information-clipper |
| version | 1.0.3-27.04.27 |
用户发送链接并要求收藏时,自动触发本 Skill。 用户要求更新/刷新已有剪报时,自动触发增量更新流程。 用户说"总结剪报 / 剪报概览 / 剪报目录 / 最近存了什么"时,触发目录总结流程。
⚠️ clip_summary.py 只是一个数据扫描工具,不是分析工具。 它负责扫目录、拿标签、抓 metadata、跑统计——这些只是原材料。 最终成文必须由派蒙用 AI 能力自己写,而不是把脚本输出直接端出来。
/volume2/AI工作区/知识库/1.raw/派蒙剪报
⚠️ 若克隆到其他机器使用,请将
CLIP_DIR替换为本地实际路径。
scripts/clip.py 是本 Skill 的核心执行引擎,负责所有标准化操作:
| 命令 | 作用 |
|---|---|
python3 scripts/clip.py scrape <url> | 抓取内容 + 提取正文 + 质量检查,输出 JSON |
python3 scripts/clip.py exists <url> | 检查 URL 是否已在剪报库中 |
python3 scripts/clip.py save <url> | 快速保存流程(检查→抓取→质量检查→写文件),不做 AI 排版,适合纯手动存档 |
python3 scripts/clip.py format <url> | 仅返回标准 frontmatter + raw_text,不写文件。AI assisted workflow 的两阶段写文件Stage 1 用此命令 |
⚠️ 所有提取逻辑都在 clip.py 里,SKILL.md 只描述工作流程和判断规则。 遇到提取失败时,修改 clip.py 中的对应平台函数,而不是在 SKILL.md 里临时写脚本。
##/###,原文无分节时由 AI 识别主题段落再插入##就一个字 — 爽。不只追求有用,不只追求体系,"这个挺有意思"就随手存一下。
执行时不用逐条报幕,说清楚大致状态即可。例如:"抓取中,稍等"而不是"第一步,正在执行抓取命令"。
执行约束:第四步的派蒙分析必须暂存(不输出到对话),直到第九步通知用户时才一并附上。分析不允许拆分成中间步骤提前发出。
唯一入口原则:
clip.py save <url>适合纯手动快速存档(scrape → 直接写文件,不做 AI 排版)。AI assisted workflow(做分析 + 排版 + 补 frontmatter)用exists→scrape→format→ 合并写文件的路径。两阶段写文件必须用format返回的 frontmatter 为基础,不允许先 scrape 再手动拼接。
用 clip.py 检查:
python3 scripts/clip.py exists <url>
python3 scripts/clip.py scrape <url>
clip.py 会自动:
质量检查项(有问题会列在 issues 里):
<script>、class=、style=、window.)→ 清洗不彻底读取 JSON 中的 passed 字段:
true(issues 为空)→ 继续第四步false(有 issues)→ 不要写文件,把 issues 报告给用户,询问如何处理两阶段写文件规则:第五步补充 frontmatter(summary/tags),第六步做 AI 排版,第七步才真正落盘。分析内容始终不写入文件。
分析在后台进行,内容暂存备用,不写入文件,也不在此步骤告知用户。此步只产生一段分析文本,延迟到第九步随通知一并发出。
分析维度(每篇都做):
约束:分析内容仅输出到对话,不写入 Markdown 文件。正文永远是原文照录。
clip.py scrape 返回的数据中,以下字段由派蒙根据分析结果手动补全(直接在 clip.py frontmatter 模板上修改):
summary: (派蒙补充:一句说明文章类型和主题,不超过150字)
tags: [(派蒙添加主题标签)]
author: (微信公众号文章若提取失败,需从正文末尾手动补录,如"撰文 | 应超")
official_account: (若提取失败,从正文末尾补录公众号名称)
常见作者格式(微信正文末尾):
撰文 | 张三 → author: 张三作者:张三 → author: 张三文|李四 → author: 李四注意:frontmatter 的标准格式由 clip.py 的
build_frontmatter决定,这里只补充 summary / tags / author / official_account 四个字段,其他字段保持原样。
在写文件之前,用 LLM 对正文进行标题层级排版。
标题层级对应规则:
| 原文层级 | Markdown | 说明 |
|---|---|---|
| 文章大标题(如微信文章标题) | # 一级 | 通常对应 frontmatter 中的 title |
| 章节标题(如 "从闲聊到助手") | ## 二级 | 原文本身就有的节标题 |
| 子节标题 | ### 三级 | 原文有的子节 |
| 更细的子节 | #### 四级 | 以此类推 |
原文无分节时的处理:
## 二级标题判断示例:
## / ##### 小标题分两阶段执行,不允许手动拼接 frontmatter。
阶段一:调用 clip.py format 获取标准 frontmatter(此命令不写文件,只返回结构化数据):
python3 scripts/clip.py format <url>
阶段二:将阶段一拿到的 frontmatter(已补充 summary/tags/author),与第六步 AI 排版后的正文,合并为完整 Markdown 内容,一次性写入文件。
不允许先 scrape 再手动写 frontmatter。所有文件必须由 clip.py 生成的标准 frontmatter 为基础。
文件命名规则:
CLIP_DIR/YYYY.MM.DD-标题.md(点号分隔年月,不是横杠)-1、-2 序号⚠️ 日期格式:文件名用点号(
2026.04.26),frontmatter 用横杠(2026-04-26)
对写好的 Markdown 文件做一次排版层面的质量复核。
检查内容:
# 标题但正文没有任何 ##,或层级跳跃(如 # 直接跳到 ####)<xxx> 标签、class=、style= 等清洗漏网之鱼操作方式:读取已写入的 Markdown 文件,快速扫一遍。发现问题直接 patch 修复,不要返回给用户。
通过标准:无明显排版问题、无干扰内容残留、标题层级清晰。细节瑕疵(如个别字词重复)可放过。
告知已保存的文件路径,必须附上第四步的分析结果(格式照搬,不省略)。
全新创建:告知文件名和路径,必须附上分析结果。
增量更新:告知更新的内容摘要("检测到N处变更,已追加到变更记录")。
当同一 URL 再次被抓取时,按以下规则处理:
原则:追加或插入,不替换原文,保留完整变更历史。
## 变更记录 区域## 变更记录 下方插入本次变更块updated 字段为当前时间YYYY.MM.DD-标题.md(点号分隔年月,不是横杠)-1、-2 序号当同一 URL 再次被抓取时,追加不替换:
## 变更记录 区域updated 字段## 变更记录
### {本次变更时间,YYYY-MM-DD HH:mm}
#### 新增内容
{新增的正文内容,原文照录}
#### 内容对比摘要
{简要说明变更内容}
当需要全量重建或批量修复剪报库中所有文件的 frontmatter 时(author/official_account/字段标准化),按以下流程执行:
import os, re
kb = "/volume2/AI工作区/知识库/1.raw/派蒙剪报"
files = sorted([f for f in os.listdir(kb) if f.endswith('.md') and f != 'README.md'])
# 按平台统计、找缺 author/official_account 的文件
for fname in files:
path = os.path.join(kb, fname)
with open(path, 'r', errors='ignore') as f:
content = f.read()
m = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
if not m: continue
fm = {}
for line in m.group(1).split('\n'):
if ':' in line:
k, _, v = line.partition(':')
fm[k.strip()] = v.strip()
sp = fm.get('source_platform', '')
# ... 统计逻辑
| 平台 | 自动化方式 |
|---|---|
| GitHub | 从 URL 直接提取 github.com/NAME/repo |
| arXiv | 调用 http://export.arxiv.org/api/query?id_list= API |
| 微信公众号 | 并行跑 clip.py format 获取 frontmatter,再从正文末尾正则提取 author/official_account |
| 即刻 | screenName 从 clip.py format 获取(注意:即刻 author 均为屏幕显示名,非实名) |
| 飞书 | author 暂时只能标 "飞书文档"(open_id 无法转姓名) |
微信公众号 author 从正文末尾 blockquote 区域提取(见上方"作者格式")。若正文无作者署名(有些转载文章只有公众号名、无作者),标注 author: ""。
统一 frontmatter 字段顺序:
title: X
date: YYYY-MM-DD
updated: YYYY-MM-DD
source_platform: weixin|jike|github|arxiv|feishu|web|genshin
author: 作者名
official_account: 公众号名|平台名
original_url: https://...
recorded_at: YYYY-MM-DD HH:MM:SS
summary: 一句摘要
keywords: [标签]
tags: [标签]
写完一批后,扫描所有文件确认:
author: ??? 或 author: "" 在公众号文章(除非确实无作者)source_platform脚本提供数据,AI 负责感受和表达。
clip_summary.py 扫出来的标签分布、时间密度、平台比例,只是原材料——不是结论。派蒙要像平时跟在旅行者旁边看他刷手机一样,读完这堆数据之后,有感而发,写出一段真正有人味儿的东西。
❌ 错误示范(2026.04.27 实录反面教材):
=== 标签 TOP20 ===
AI: 20
Agent: 11
职场: 7
...
=== 平台分布 ===
jike: 33
weixin: 24
...
### AI 技术/工具(~28篇)
- Agent学习资料包:Anthropic官方方法论...
- Claude Code记忆模块设计分析...
这看起来像数据报表,有数字有分类——但没有人的感受,没有派蒙的声音。这不是分析,这是把 Excel 表格贴了上来。
❌ 另一个错误:把脚本的统计数字包装成"分析",在每个分类前面加个 emoji,然后在开头结尾写两句"读完了"。
✅ 正确示范(2026.04.26 风格参考):
旅行者这十天存了71篇——Jike 33篇,微信24篇。
说实话,这不像一个"知识管理系统",更像是一个在信息洪流里随手捞东西的人。
有意思的是,旅行者在存 AI 的同时,也在存 AI 的副作用。 一边在研究 token-maxxing,一边在存"幽灵劳动""头戴摄像头蒸馏家务"。 这不是矛盾,这是——我知道我在浪潮里,但我想看清楚浪长什么样。
简单说。 这是一个技术圈打工人,在AI浪潮里一边往前游一边抬头看天。 存的东西没有KPI,爽就存,但存着存着就发现,原来自己最焦虑的和最想解决的,其实是同一件事。
核心区别:
clip_summary.py 或 execute_code 扫描目录,拿到底层数据(标签频率、平台分布、时间密度)| 平台 | 提取方式 | 备注 |
|---|---|---|
mp.weixin.qq.com | HTMLParser + js_content | 自动识别 h2/h3/h4 标题 |
github.com | GitHub API + raw README | README 是 HTML 格式,必须过 HTMLParser 清洗 |
jike.com / okjike.com | JSON in script tag | 自动保留评论区 |
feishu.cn / larksuite.com | 飞书开放 API | 需要 FEISHU_APP_ID / FEISHU_APP_SECRET |
bilibili.com / b23.tv | HTMLParser | 支持视频/专栏,标题含B站水印需清洗 |
| 其他域名 | 通用 HTMLParser | 优先提取 <article> / <main> |
文 丨 司雯雯(空格+丨分隔)文|李四 / 文 | 李四(竖线/双竖线)撰文 | 应超作者:张三 / 作者:XXX撰文/播音:XXX>/ 作者:卡兹克、可达、闯子(微信 blockquote 格式,正文末尾 > 开头的引用行)作者:OPC同行社 | 发布于 2026-04-24(机构号格式,需截取 | 前的内容)晚点专栏作者孟醒:五源资本合伙人(需截取 : 和 : 之间的内容)作者:宋思杭 / 作者|虎嗅科技组(标准格式)量子位 | 公众号 QbitAI 联合判断)> 西风 发自 凹非寺)或最后一段推断,并标注 author: (推断)量子位 | 公众号 QbitAI → official_account: 量子位本文首发于《XXX》 / 来源:《XXX》 / 转载自《XXX》公众号:XXX
若正文末尾未见公众号标识,但正文开头有 >/ {author} 发自 凹非寺 格式,通常可结合上一行的 平台 | 公众号 {name} 格式推断>/ 作者:{author}|公众号:{official_account},供第四步分析时直接参考(若两者皆为空则不追加)> 残留:微信部分段落含 style="visibility:hidden" 隐藏内容,HTMLParser 会把其中的 > 分隔符当正文提取。clean_text() 里已处理(re.sub(r"\n>\n", "\n") 和 re.sub(r"^>\n", "", text)),无需在提取逻辑里额外处理pub_date:微信公众号 var ct 时间戳有时为 0,回退到当天日期js_content 正文区域),正常文章返回 3MB+ 完整页面。检测到空壳页面时应判断为"登录墙拦截",告知用户无法自动抓取b_X5vzW7y85DImNbGJjdUw vs 0yTV4K_2iJvqGl_6n8lV0Q),旧链接可能已归档为登录墙,新链接返回完整内容。若存档中已有完整内容(12KB+),且旧 URL 返回空壳(<50KB),说明旧链接已失效,应更新 original_url 到新链接"预览时标签不可点")会出现在 truncated_by 字段里,但这不代表文章被截断——它只是页面底部的水印提示。判断文章是否完整的可靠依据是:raw_text 字符数是否与页面大小吻合、结尾是否有自然收束(如「他今年二十出头」这样的完整句子)。不要仅凭 truncated_by 有值就判定截断。og:article:author 元字段不可信:微信页面的 og:article:author meta 标签有时包含平台前缀或乱码(如 APPSO 文章变成了 "发现明日产品的"),不能用于 author 提取。author 仍须从正文末尾 patterns 提取。screenName = 显示名(如"风小海"),username = UUID,bio = 个人简介兜底。不要用 nickname,该字段不存在于数据结构中。检测顺序:screenName → nickname(不存在)→ username → bio(兜底)user.username = 用户唯一ID(如 ewoidSI6ICI2NzMwYTIyNWRjZWVkMDBhN2Q3N2U0MDEi),与 author 字段并列输出m.okjike.com/originalPosts/(推荐);评论仅取顶层通用TextExtractor 清洗,不能直接用 raw 文本,否则 <div>、<a href> 等标签会残留在正文中stars 和 forks(已有旧文件缺少这两个字段属正常)owner 是 open_id(如 ou_xxx),没有公开 API 能将其转换为用户姓名(需要 contact API 额外权限)。author: "飞书文档" 是当前能取到的最准确值,属平台限制而非 bugobj_create_time(或 node_create_time),是 Wiki 创建时间,不是派蒙保存时间。注意这是 Unix 时间戳字符串(如 "1776843037"),需要 int() 转换后再 fromtimestamp(),且需指定北京时间时区(datetime.timezone(datetime.timedelta(hours=8)))转换FEISHU_APP_ID 和 FEISHU_APP_SECRET(已配置在环境变量中,clip.py 自动读取)CLIP_DIR/
├── README.md
├── scripts/
│ ├── clip.py ← 核心执行引擎(本 Skill 的程序化部分)
│ ├── clip_audit.py ← 剪报库批量审计(检查已存文件质量)
│ ├── clip_summary.py ← 目录扫描工具(提供metadata统计,不是分析工具)
└── YYYY.MM.DD-标题.md ← 注意:点是日期分隔符,不是横杠
⚠️ 若克隆到其他机器使用,请将
CLIP_DIR替换为本地实际路径。
首次运行须知:每次在新环境首次执行本 Skill 前,需检查 CLIP_DIR/README.md 是否存在。若不存在,请参考以下模板创建目录级 README:
# 信息剪报(Information Clipper)
把散落在各处的网页内容,像剪报纸条一样存到本地,再也不用依赖某个 App 的收藏夹了。
## 这是什么
"剪报"的 AI 版本:不用自己动手整理,只需要把觉得有意思的链接扔给 AI,它会咔嚓一下把好东西剪下来,贴成一个结构完整的 Markdown 文件,存进本地知识库。
筛选标准就一个字 — **爽**。"这个挺有意思"就随手存,不要求每篇都系统有用,更注重趣味性和个人启发。
## Skill 说明
详细信息请参考 `../skills/productivity/information-clipper/SKILL.md`