Fetch-everything markdown-proxy
install
source · Clone the upstream repo
git clone https://github.com/liangdabiao/fetch-everything
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/liangdabiao/fetch-everything "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/markdown-proxy" ~/.claude/skills/liangdabiao-fetch-everything-markdown-proxy && rm -rf "$T"
manifest:
.claude/skills/markdown-proxy/skill.mdsource content
Markdown Proxy - URL to Markdown
将任意 URL 转为干净的 Markdown。支持需要登录的页面和专有平台。
URL 路由规则(先判断再执行)
收到 URL 后,先判断类型,不同类型走不同通道:
| URL 特征 | 路由到 | 原因 |
|---|---|---|
/ | bb-browser site(、、) | 用真实浏览器登录态,内容最完整 |
| bb-browser site(、) | Reddit 需登录,bb-browser 直接用浏览器 |
/ | bb-browser site(、、) | 微博需要登录态 |
| bb-browser site(、、) | 知乎需要登录态 |
| bb-browser site(、) | B站需要登录态 |
| bb-browser site(、) | 小红书 Pinia store 方式,零逆向 |
| bb-browser site(、) | GitHub 登录态可用 |
| Playwright MCP( + ) | 公众号有反爬,用 MCP 浏览器抓取最可靠 |
/ (文档/知识库) | 内置 | 需要飞书 API 认证 |
/ | bb-browser site(、)或 skill | YouTube 有多种方式 |
| 其他所有 URL | 代理服务级联(见下方) |
bb-browser site 支持的完整平台列表(35+ 平台,95+ 命令):
搜索引擎:
google/search、baidu/search、bing/search、duckduckgo/search、sogou/weixin
社交媒体:twitter/*、reddit/*、weibo/*、xiaohongshu/*、jike/*、hupu/hot
视频:youtube/*、bilibili/*
技术开发:github/*、stackoverflow/search、hackernews/*、npm/search、pypi/*、arxiv/search、csdn/search、cnblogs/search、devto/search、v2ex/*
财经:xueqiu/*、eastmoney/*、yahoo-finance/quote
知识:wikipedia/*、zhihu/*
新闻:bbc/news、reuters/search、toutiao/*、36kr/newsflash
求职:boss/*、linkedin/*
娱乐:douban/*、imdb/search、genius/search、qidian/search
其他:youdao/translate、ctrip/search、smzdm/search、gsmarena/search、producthunt/today、openlibrary/search
运行
bb-browser site list 查看所有可用命令。
代理服务优先级
| 优先级 | 服务 | URL 模式 | 优势 |
|---|---|---|---|
| 1 | r.jina.ai | | 免费、无需 API key,内容较完整 |
| 2 | Firecrawl | 或 CLI | JS 渲染、结构化提取、metadata 丰富,需 API key |
| 3 | defuddle.md | | 免费、输出干净,带 YAML frontmatter |
| 4 | | npx agent-fetch | 本地工具,无需网络代理 |
| 5 | CLI | defuddle parse | 本地 CLI,适合普通网页 |
Workflow
Step 0: URL 类型判断
# 1) bb-browser site 优先(支持 35+ 平台,使用真实浏览器登录态) if URL matches a bb-browser supported platform: → Step C: bb-browser site 抓取 → 如果 bb-browser 失败(未安装/未登录),继续下面的判断 # 2) 公众号 if URL contains "mp.weixin.qq.com": → Step A: 公众号抓取 → 结束 # 3) 飞书文档 if URL contains "feishu.cn/docx/" or "feishu.cn/wiki/" or "feishu.cn/docs/" or "larksuite.com/docx/": → Step B: 飞书文档抓取 → 结束 # 4) 通用代理 else: → 继续 Step 1
bb-browser 平台 URL 匹配规则:
| URL 特征 | bb-browser 命令 |
|---|---|
或 | |
或 | |
| |
或 | 从 URL 提取 post ID → |
| |
| 从 URL 提取 question ID → |
| 从 URL 提取 BV ID → |
或 | 从 URL 提取 note ID → |
| |
| |
或 | 从 URL 提取 video ID → |
| 用户要求搜索/热榜等非 URL 场景 | 直接用对应 adapter(如 ) |
Step C: bb-browser site 抓取(新增)
使用 bb-browser 的社区 site adapter,通过真实浏览器登录态获取结构化数据。
前置检查:
# 检查 bb-browser 是否已安装 bb-browser --version # 如果未安装,跳过此步骤,回退到后续路由 # 更新 adapter(首次使用或定期) bb-browser site update
执行命令:
# 通用格式 bb-browser site <platform/command> [args] --json # Twitter bb-browser site twitter/thread "https://x.com/user/status/123456" --json bb-browser site twitter/user elonmusk --json bb-browser site twitter/search "AI agent" --json # Reddit bb-browser site reddit/thread "https://reddit.com/r/programming/comments/..." --json # 微博 bb-browser site weibo/post <post_id> --json bb-browser site weibo/hot --json bb-browser site weibo/user <uid> --json # 知乎 bb-browser site zhihu/question <question_id> --json bb-browser site zhihu/hot --json bb-browser site zhihu/search "RAG" --json # B站 bb-browser site bilibili/video BV1xx411c7 --json bb-browser site bilibili/search "编程" --json # 小红书 bb-browser site xiaohongshu/note <note_id> --json bb-browser site xiaohongshu/search "穿搭" --json # GitHub bb-browser site github/repo epiral/bb-browser --json bb-browser site github/issues epiral/bb-browser --json # YouTube bb-browser site youtube/video dQw4w9WgXcQ --json bb-browser site youtube/transcript dQw4w9WgXcQ --json # 搜索引擎 bb-browser site google/search "query" --json bb-browser site baidu/search "query" --json # 其他常用 bb-browser site hackernews/top 10 --json bb-browser site stackoverflow/search "python async" --json bb-browser site douban/movie <id> --json bb-browser site xueqiu/stock 贵州茅台 --json
用
内联过滤关键字段:--jq
bb-browser site twitter/search "AI" --jq '.[] | {text: .text, author: .author.userName, likes: .likeCount}' bb-browser site xueqiu/hot-stock 5 --jq '.items[] | {name, changePercent}'
JSON → Markdown 转换:
bb-browser 返回结构化 JSON,需要转换为 Markdown:
- 提取关键字段(title、author、content/text、date 等)
- 组装为 Markdown 格式,包含 YAML frontmatter
- 列表类数据用 Markdown 表格或列表展示
- 长文本内容保留原始格式
错误处理:
如果 bb-browser 未安装(command not found): → 提示用户: npm install -g bb-browser → 回退到后续路由步骤 如果返回 HTTP 401: → 提示用户: 请先在浏览器中登录 <platform>,然后重试 → 回退到后续路由步骤 如果返回其他错误: → 回退到后续路由步骤(代理服务级联)
Step A: 公众号文章抓取(Playwright MCP)
使用 Playwright MCP 工具直接在浏览器中打开页面并提取内容,无需本地安装 Playwright/Chromium。
步骤:
- 导航到页面:调用
打开公众号 URLmcp__playwright__browser_navigate - 获取快照:调用
获取页面的 accessibility treemcp__playwright__browser_snapshot - 提取内容:从 snapshot 中提取标题(heading)、作者、日期、正文段落(paragraph)、图片(img src)、代码块(code)、引用(blockquote)、列表(list)等元素
- 转为 Markdown:将提取的结构化内容手动组装为 Markdown,包括:
- YAML frontmatter(title, author, date, url, source)
- 正文中的图片保留原始 URL(
) - 代码块用
包裹``` - 引用用
标记> - 列表用
标记-
- 关闭页面:调用
关闭标签页mcp__playwright__browser_close - 失败回退:如果 MCP 不可用,回退到
或 Step 1-2 代理服务scripts/fetch_weixin.py
无额外依赖,Playwright MCP 由 Claude Code 环境提供。
Step B: 飞书文档抓取(内置)
python3 ~/.claude/skills/markdown-proxy/scripts/fetch_feishu.py "FEISHU_URL"
依赖:
requests(标准库级别),环境变量 FEISHU_APP_ID + FEISHU_APP_SECRET
支持:docx 文档、doc 文档、wiki 知识库页面(自动解析实际文档 ID)
输出:YAML frontmatter(title, document_id, url)+ Markdown 正文
支持 --json 参数输出 JSON 格式。
Step 1: 优先用 r.jina.ai
curl -sL "https://r.jina.ai/{original_url}" 2>/dev/null
如果返回非空且包含实际内容,使用此结果。
Step 1.5: 如果 Jina 内容不够好,用 Firecrawl(需 API key)
Firecrawl 提供 JS 渲染、结构化提取和丰富的 metadata,适合 Jina 抓不到或内容不完整的情况。
前置条件: 环境变量
FIRECRAWL_API_KEY(免费 500 credits,无需信用卡)
方式 A:API 调用(无需安装)
curl -s -X POST "https://api.firecrawl.dev/v2/scrape" \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "{original_url}"}' | jq -r '.data.markdown // .data.html'
方式 B:Firecrawl CLI
# 安装 npm install -g firecrawl # 基础抓取(默认输出 Markdown) firecrawl scrape "{original_url}" # 只提取正文(去除导航、页脚、广告) firecrawl scrape "{original_url}" --only-main-content # 等待 JS 渲染(SPA 页面) firecrawl scrape "{original_url}" --wait-for 3000 # 多格式输出 + 保存到文件 firecrawl scrape "{original_url}" --format markdown,links -o output.md # 指定 HTML 标签提取 firecrawl scrape "{original_url}" --include-tags article,main firecrawl scrape "{original_url}" --exclude-tags nav,aside,.ad
Firecrawl API 返回结构:
{ "success": true, "data": { "markdown": "...", "html": "...", "metadata": { "title": "...", "description": "...", "language": "...", "ogTitle": "...", "ogDescription": "...", "ogImage": "...", "sourceURL": "...", "statusCode": 200 } } }
提取 Markdown 时用
jq -r '.data.markdown',提取标题用 jq -r '.data.metadata.title'。
Step 2: 如果 Jina 和 Firecrawl 都失败,用 defuddle.md
curl -sL "https://defuddle.md/{original_url}" 2>/dev/null
Step 3: 如果所有代理都失败,回退本地工具
# agent-fetch: https://github.com/teng-lin/agent-fetch npx agent-fetch "{original_url}" --json # 或 defuddle parse "{original_url}" -m -j
Step 4: 展示内容(必做)
抓取成功后,必须按以下格式向用户展示:
**标题**: {title} **作者**: {author}(如有) **来源**: {source_type}(公众号 / 飞书文档 / 网页等) **URL**: {original_url} ### 内容摘要 {前 3-5 句话的摘要} ### 正文 {完整 Markdown 内容,超长时截取前 200 行并注明"内容已截取,完整版已保存到 xxx"}
Step 5: 保存文件(默认执行)
将抓取的 Markdown 内容保存到本地:
默认保存路径:~/Downloads/{title}.md 文件格式:YAML frontmatter(title, author, date, url, source)+ Markdown 正文
- 文件名用文章标题,去掉特殊字符
- 如果用户指定了其他保存路径,按用户要求
- 保存后告知用户文件路径
- 如果用户明确说"不用保存"或只是快速预览,可以跳过
Examples
X/Twitter 帖子
# 优先用 bb-browser(需要浏览器已登录 Twitter) bb-browser site twitter/thread "https://x.com/username/status/1234567890" --json # 回退:代理服务 curl -sL "https://r.jina.ai/https://x.com/username/status/1234567890"
微博热搜
bb-browser site weibo/hot --json
知乎热榜
bb-browser site zhihu/hot --json
B站视频
bb-browser site bilibili/video BV1xx411c7 --json bb-browser site bilibili/search "编程" --json
小红书笔记
bb-browser site xiaohongshu/note <note_id> --json
GitHub 仓库
bb-browser site github/repo epiral/bb-browser --json
普通网页
curl -sL "https://r.jina.ai/https://example.com/article"
公众号文章
1. mcp__playwright__browser_navigate → "https://mp.weixin.qq.com/s/abc123" 2. mcp__playwright__browser_snapshot → 获取页面结构 3. 从 snapshot 提取标题、作者、日期、正文 → 组装 Markdown 4. mcp__playwright__browser_close
飞书文档
python3 ~/.claude/skills/markdown-proxy/scripts/fetch_feishu.py "https://xxx.feishu.cn/docx/xxxxxxxx"
飞书知识库
python3 ~/.claude/skills/markdown-proxy/scripts/fetch_feishu.py "https://xxx.feishu.cn/wiki/xxxxxxxx"
Notes
- bb-browser site(优先):支持 35+ 平台,使用真实浏览器登录态,结构化 JSON 输出。需
+ Chrome 扩展。支持npm install -g bb-browser
输出和--json
内联过滤。未安装时自动回退到代理服务--jq <expr> - Firecrawl:专业级网页抓取服务,支持 JS 渲染、结构化提取、丰富 metadata。免费 500 credits(无需信用卡),之后按量付费。支持自部署(AGPL-3.0)。环境变量
,或 CLIFIRECRAWL_API_KEYnpm install -g firecrawl - r.jina.ai 和 defuddle.md 均免费、无需 API key
- 公众号文章优先使用 Playwright MCP(
+browser_navigate
),无需本地安装 Playwright/Chromiumbrowser_snapshot - 如果 Playwright MCP 不可用,回退到
(需scripts/fetch_weixin.py
+pip install playwright beautifulsoup4 lxml
)playwright install chromium - 飞书文档使用内置 API 脚本(需环境变量
+FEISHU_APP_ID
)FEISHU_APP_SECRET - 飞书脚本自动将 blocks 转为 Markdown(标题、列表、代码块、引用、待办等)
- 对于超长内容,可用
先预览| head -n 200 - bb-browser 也可用于搜索/热榜等非 URL 场景,如
、bb-browser site zhihu/hotbb-browser site google/search "query" - bb-browser MCP 接入方式:
(可配置在 settings.json 中)npx -y bb-browser --mcp