Skip to content

iBigQiang/feedgrab

Repository files navigation

feedgrab

English | 中文

Python 3.10+ License: MIT

万能内容抓取器 — 从任意平台抓取、转录和消化内容。

给它一个 URL(文章、视频、播客、推文),返回结构化的内容。支持 CLI 命令行、Python 库、MCP 服务器和 Claude Code 技能四种使用方式。

项目来源:feedgrab 是在 @runes_leox-reader@dotey(宝玉)的 baoyu-danger-x-to-markdown Claude Code 技能基础上融合升级而来。继承了 x-reader 的多平台架构,融合了宝玉 skill 逆向工程的 X/Twitter GraphQL 深度抓取能力。

它能做什么

任意 URL → 平台检测 → 抓取内容 → 统一输出
              ↓                ↓          ↓
         自动识别          文本:Jina Reader    → output/X/作者_日期:标题.md
         8+ 平台           视频:InnerTube API → yt-dlp 字幕    → output/YouTube/作者_日期:标题.md
                           音频:Whisper 转录
                           API:Bilibili / RSS / Telegram / YouTube Data API v3 / GitHub REST API / 飞书 Open API
                           X/Twitter:GraphQL → FxTwitter → Syndication → oEmbed → Jina → Playwright

Python 层负责文本抓取和 YouTube 字幕提取。Claude Code 技能(可选)提供完整的 Whisper 视频/播客转录和 AI 内容分析功能。

三个层级

feedgrab 可自由组合,按需使用:

层级 功能 格式 安装方式
Python CLI/库 基础内容抓取 + 统一数据结构 安装 必需
Claude Code 技能 视频转录 + AI 分析 + 内容抓取 npx skills add iBigQiang/feedgrab 可选
MCP 服务器 将阅读能力暴露为 MCP 工具 python mcp_server.py 可选

第一层:Python CLI

# 抓取任意 URL
feedgrab https://mp.weixin.qq.com/s/abc123

# 从剪贴板读取 URL 并抓取(解决 PowerShell 中 & 符号报错问题)
feedgrab clip

# 抓取推文(配置好 Cookie 后自动走 GraphQL 深度抓取)
feedgrab https://x.com/elonmusk/status/123456

# 批量抓取书签(需要 X_BOOKMARKS_ENABLED=true)
feedgrab https://x.com/i/bookmarks
feedgrab https://x.com/i/bookmarks/2015311287715340624  # 指定书签文件夹

# 批量抓取用户推文(需要 X_USER_TWEETS_ENABLED=true)
feedgrab https://x.com/iBigQiang                        # 抓取全部推文
X_USER_TWEETS_SINCE=2026-02-01 feedgrab https://x.com/iBigQiang  # 指定日期之后
# ↑ 超过 ~800 条时自动启动浏览器搜索补充(需 feedgrab login twitter)

# 批量抓取 Twitter 列表推文(需要 X_LIST_TWEETS_ENABLED=true)
feedgrab https://x.com/i/lists/2002743803959300263               # 抓取最近 1 天
X_LIST_TWEETS_DAYS=3 feedgrab https://x.com/i/lists/2002743803959300263  # 抓取最近 3 天
X_LIST_TWEETS_SUMMARY=true feedgrab https://x.com/i/lists/...    # 生成汇总表格(MD + CSV)

# 批量抓取小红书作者笔记(需要 XHS_USER_NOTES_ENABLED=true + feedgrab login xhs)
feedgrab https://www.xiaohongshu.com/user/profile/5eb416f...
XHS_USER_NOTES_SINCE=2026-02-01 feedgrab https://www.xiaohongshu.com/user/profile/5eb416f...  # 指定日期之后

# 批量抓取小红书搜索结果(需要 XHS_SEARCH_ENABLED=true + feedgrab login xhs)
feedgrab "https://www.xiaohongshu.com/search_result?keyword=开学第一课&source=web_explore_feed"

# 搜索小红书笔记(通过 xhshow API,无需登录)
feedgrab xhs-so "AI Agent"                           # 综合搜索
feedgrab xhs-so "AI Agent" --sort popular             # 按热门排序
feedgrab xhs-so "AI Agent" --type video               # 只搜视频
feedgrab xhs-so "AI Agent" --sort latest --limit 50   # 最新 50 条
feedgrab xhs-so "AI Agent" --save                     # 同时保存单篇 .md
feedgrab xhs-so "claude code,openclaw,养龙虾" --merge  # 多关键词合并到一个表格
feedgrab xhs-so "claude code,openclaw"                 # 多关键词分别生成表格

# 搜索微信公众号文章(通过搜狗微信搜索)
feedgrab mpweixin-so "AI Agent"
feedgrab mpweixin-so "AI Agent" --limit 5  # 限制结果数量

# 搜索 YouTube 视频
feedgrab ytb-so "AI Agent"
feedgrab ytb-so "教程" --channel @AndrewNg --order viewCount
feedgrab ytb-so "ML" --after 2025-01-01 --limit 5

# 搜索 Twitter 推文(按互动量排序的汇总表格)
feedgrab x-so openclaw                                        # 默认:最近1天 + 中文 + 最新tab
feedgrab x-so "AI Agent" --days 7 --min-faves 50 --sort top   # 自定义参数
feedgrab x-so '"openclaw" lang:zh since:2026-03-01' --raw     # 原始查询模式
feedgrab x-so openclaw --save                                  # 同时保存单篇推文 .md
feedgrab x-so "梯子,VPN,v2ray,小火箭" --merge                  # 多关键词合并到一个表格
feedgrab x-so "claude code,openclaw"                           # 多关键词分别生成表格

# 下载 YouTube 视频/音频/字幕(输出到 OUTPUT_DIR/YouTube/ 目录)
feedgrab ytb-dlv https://www.youtube.com/watch?v=xxx   # 下载视频 (MP4)
feedgrab ytb-dla https://www.youtube.com/watch?v=xxx   # 下载音频 (MP3)
feedgrab ytb-dlz https://www.youtube.com/watch?v=xxx   # 下载字幕 (SRT)
feedgrab ytb-dla https://youtu.be/xxx?si=xxx           # 支持短分享链接

# 按公众号账号批量抓取全部历史文章(需要 feedgrab login wechat)
feedgrab mpweixin-id "饼干哥哥AGI"
MPWEIXIN_ID_SINCE=2025-01-01 feedgrab mpweixin-id "饼干哥哥AGI"  # 指定日期之后

# 按专辑批量抓取公众号文章(公开专辑,无需登录)
feedgrab mpweixin-zhuanji "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=xxx&album_id=xxx"
MPWEIXIN_ZHUANJI_SINCE=2026-01-01 feedgrab mpweixin-zhuanji "..."  # 指定日期之后

# 抓取 GitHub 仓库 README(自动检测中文 README 优先)
feedgrab https://github.com/nicepkg/aide                          # 仓库首页
feedgrab https://github.com/nicepkg/aide/blob/main/README.md      # README 文件页
feedgrab https://github.com/nicepkg/aide/tree/main/src             # 内页(自动回退到仓库级别)

# 抓取飞书文档(需要 feedgrab login feishu 或配置 Open API 凭据)
feedgrab https://xxx.feishu.cn/wiki/ABC123                         # wiki 文档
feedgrab https://xxx.feishu.cn/docx/ABC123                         # docx 文档
FEISHU_DOWNLOAD_IMAGES=true feedgrab https://xxx.feishu.cn/wiki/ABC123  # 同时下载图片

# 批量抓取飞书知识库
feedgrab feishu-wiki https://xxx.feishu.cn/wiki/ABC123             # 递归抓取知识库所有文档

# 批量抓取多个 URL
feedgrab https://url1.com https://url2.com

# 登录某个平台(一次性操作,用于浏览器兜底)
feedgrab login xhs

# Chrome CDP 自动提取 Cookie(Chrome 已登录状态下,免去手动登录流程)
# 前提:Chrome 开启 Remote Debugging(chrome://inspect/#remote-debugging)
CHROME_CDP_LOGIN=true feedgrab login twitter
CHROME_CDP_LOGIN=true feedgrab login xhs

# 下载推文图片/视频到本地(保存到 attachments/{item_id}/ 子目录)
X_DOWNLOAD_MEDIA=true feedgrab https://x.com/user/status/123
XHS_DOWNLOAD_MEDIA=true feedgrab https://www.xiaohongshu.com/explore/xxx
MPWEIXIN_DOWNLOAD_MEDIA=true feedgrab https://mp.weixin.qq.com/s/xxx

# 自动检测本机 Chrome UA 并写入 .env(推荐首次部署时运行)
feedgrab detect-ua

# 一键诊断(Cookie、依赖、queryId、网络)
feedgrab doctor             # 全平台检查
feedgrab doctor x           # Twitter/X 专项
feedgrab doctor xhs         # 小红书专项
feedgrab doctor mpweixin    # 微信公众号专项
feedgrab doctor feishu      # 飞书专项

# 查看内容统计
feedgrab list

# 重置子目录(删除 .md 文件 + 清理去重索引,方便重新抓取)
feedgrab reset bookmarks/OpenClaw      # 重置书签文件夹
feedgrab reset status_author/向阳乔木  # 重置账号推文目录
feedgrab reset bookmarks/all           # 重置全部书签

# 清理索引目录中的批量记录和缓存文件(保留去重索引)
feedgrab clean-index                  # 交互确认后清理
feedgrab clean-index --yes            # 跳过确认直接清理

feedgrab reset 会扫描目标目录下所有 .md 文件的 YAML front matter,提取 item_id 并从去重索引中移除,然后删除文件。执行前会显示待删除数量并要求确认。找不到目录时会自动列出所有可用的子目录。

feedgrab clean-index 清理索引目录中除 item_id_url.json(全局去重索引)以外的所有文件,包括批量记录(status_*.jsonlist_*.json 等)和 API 断点缓存(.api_discovery_*.jsonl)。这些文件在采集完成后不再需要,定期清理可释放磁盘空间。

第二层:Claude Code 技能

一键安装所有技能:

npx skills add iBigQiang/feedgrab

包含 5 个技能:

技能 命令 说明
feedgrab /feedgrab <URL> 核心抓取 — 给 URL 返回结构化 Markdown
feedgrab-batch /feedgrab-batch 批量抓取 — 书签、用户推文、搜索、微信批量等
feedgrab-setup /feedgrab-setup 安装引导 — pip install + 配置 + 诊断
analyzer /analyze <URL> 内容分析 — 多维度结构化分析报告
video 自动触发 视频转录 — yt-dlp 字幕 + Whisper 转录

安装后在 Claude Code 中直接发送 URL,对应技能会自动触发。

第三层:MCP 服务器

需要克隆仓库(mcp_server.py 不包含在 pip install 中)。

git clone https://github.com/iBigQiang/feedgrab.git
cd feedgrab
pip install -e ".[mcp]"
python mcp_server.py

暴露的工具:

  • read_url(url) — 抓取任意 URL
  • read_batch(urls) — 批量并发抓取多个 URL
  • list_inbox() — 查看已抓取的内容
  • detect_platform(url) — 从 URL 识别平台

Claude Code 配置(~/.claude/claude_desktop_config.json):

{
    "mcpServers": {
        "feedgrab": {
            "command": "python",
            "args": ["/你的路径/feedgrab/mcp_server.py"]
        }
    }
}

支持的平台

平台 文本抓取 视频/音频转录
YouTube InnerTube API(零依赖零 quota)+ YouTube Data API v3 搜索 InnerTube → yt-dlp 字幕 → Groq Whisper 兜底 + 智能断句 + 章节解析
B 站 (Bilibili) API 通过 Claude Code 技能
X / Twitter GraphQLFxTwitterSyndication → oEmbed → Jina → Playwright
微信公众号 Jina → Playwright WeChat JS 提取(单篇 + markdownify 富文本 + 图片防盗链)/ 搜狗搜索(mpweixin-so)/ MP 后台 API 按账号批量(mpweixin-id)/ 专辑批量(mpweixin-zhuanji
GitHub REST API(仓库元数据 + 中文 README 优先(含子目录语言链接搜索)+ 相对图片链接补全 + 摘要提取)
小红书 API (xhshow)Pinia Store 注入 → Jina → Playwright 深度抓取 (单篇 + 作者批量 + 搜索批量 + 关键词搜索 xhs-so)
飞书/Lark Open APICDP 直连Playwright PageMain → Jina(单篇 + 知识库批量 feishu-wiki + 嵌入表格 + 图片下载)
Telegram Telethon
RSS feedparser
小宇宙播客 通过 Claude Code 技能
Apple Podcasts 通过 Claude Code 技能
任意网页 Jina 兜底

*小红书支持 API 抓取(xhshow,无需登录)和 浏览器抓取(需一次性登录:feedgrab login xhs)。单篇抓取优先走 API(完整元数据 + 评论),API 不可用时自动降级到 Pinia Store 注入(浏览器原生请求,无需第三方签名库)→ Jina → Playwright。关键词搜索feedgrab xhs-so)和作者主页批量搜索结果批量同样支持 Pinia 兜底层。XHS_PINIA_ENABLED=true(默认开启)。

YouTube Whisper 转录需要 GROQ_API_KEY — 从 Groq 免费获取

X/Twitter 六级兜底策略

feedgrab 对 X/Twitter 内容采用先进的六级兜底策略:

层级 方式 是否需要认证 能力
0 GraphQL API 需要 Cookie(auth_token + ct0 完整线程、图片、视频、引用推文、长文章
0.3 FxTwitter API 不需要 文本、图片、视频、完整互动数据(含 views/bookmarks)、Article Draft.js、作者画像
0.5 Syndication API 不需要 文本、图片、视频、互动数据(likes/replies)、article 检测
1 oEmbed API 不需要 单条推文文本(仅公开推文)
2 Jina Reader 不需要 个人主页、非推文页面
3 Playwright 可选 session 需要登录的内容,最后兜底

FxTwitter API 的价值:第三方公共 API,无需认证即可获取接近 GraphQL 的数据完整度(含 views、bookmarks、Article 全文)。缺少 blue_verified、listed_count 和线程展开。批量模式下连续 3 次失败自动触发 circuit breaker 跳过。

Syndication API 的价值:有 Cookie 时 GraphQL 自动切换,正常使用基本不会降级到 Syndication。Syndication 的价值在于:当 Cookie 全部过期/失效时,用户不需要立刻重新登录,仍能拿到 80% 的数据(缺 retweets/bookmarks/views 三项),而不是降级到只有纯文本的 oEmbed。

Tier 0(GraphQL)移植自 baoyu-danger-x-to-markdown 技能,特性包括:

  • 动态 queryId 解析(从 X 前端 JS bundle 中提取)
  • 完整线程重建(作者自回复链)
  • 多阶段分页(向上 + 向下 + 续页)
  • 完整媒体提取(图片、视频、引用推文)
  • 互动数据(likes / retweets / replies / bookmarks / views)
  • 作者回帖 + 评论区采集(可选开关)
  • 书签批量抓取(全部书签 / 指定文件夹)
  • 用户推文批量抓取(全部 / 按日期过滤,自动跳过 RT + 会话去重)
  • 列表推文批量抓取(按天数过滤 1/2/3/7 天,会话去重,线程自动深度抓取)
  • 浏览器搜索补充(突破 UserTweets ~800 条限制,自动按月分片搜索补充历史推文)
  • 全局去重索引(跨模式统一去重)

X/Twitter Cookie 配置

Tier 0(GraphQL)需要 Twitter Cookie 才能获取完整数据。未配置 Cookie 时会自动降级,但将导致:

  • 无法获取 likes / views / bookmarks 等互动指标
  • 无法获取作者回帖和评论
  • 无法使用书签批量抓取和账号批量抓取
  • 仅能获取基础正文内容(oEmbed + Jina 兜底)

配置方法(任选其一):

方式 1:浏览器登录(推荐)

feedgrab login twitter

自动打开浏览器,登录 X 账号后 Cookie 会保存到 sessions/twitter.json,后续自动读取。

方式 2:.env 环境变量

从浏览器 DevTools 手动复制 Cookie 值:

  1. 打开 https://x.com 并登录
  2. 按 F12 打开开发者工具 → Application → Cookies → https://x.com
  3. 找到 auth_tokenct0 两个值
  4. 写入 .env 文件:
X_AUTH_TOKEN=你的auth_token值
X_CT0=你的ct0值

环境变量优先级最高,设置后会覆盖其他来源的 Cookie。

方式 3:手动创建 Cookie 文件

创建 sessions/x.json(路径受 FEEDGRAB_DATA_DIR 控制,默认 sessions/):

{
  "auth_token": "你的auth_token值",
  "ct0": "你的ct0值"
}

还支持方式 4:Chrome CDP 自动提取 — 在 Chrome 中开启 chrome://inspect/#remote-debugging,然后 CHROME_CDP_LOGIN=true feedgrab login twitter 即可从已登录的 Chrome 秒提取 Cookie。

Cookie 优先级:环境变量 > Playwright session (twitter.json) > Cookie 文件 (x.json) > Chrome CDP

多账号 Cookie 轮换(防 429 限流)

批量抓取时 GraphQL 容易触发 429 限流。配置多个 X 账号的 Cookie 可自动轮换:

sessions/
├── twitter.json    ← 主账号(feedgrab login twitter 自动生成)
├── x_2.json        ← 第二个账号(手动创建)
├── x_3.json        ← 第三个账号...

额外账号的 Cookie 文件格式同方式 3。获取方法:

  1. 用 Chrome/Edge 打开 https://x.com 并登录目标账号
  2. 按 F12 → Application 标签 → 左侧展开 Cookies → 点击 https://x.com
  3. 找到 auth_tokenct0 两行,复制值填入 sessions/x_2.json

Cookie 不绑定 IP/设备,可跨电脑使用。只要不在浏览器上退出登录,Cookie 就一直有效。

429 时自动切换到下一个未限流账号,15 分钟冷却后自动恢复。

TwitterAPI.io 付费 API(可选)

替代浏览器搜索补充的服务器友好方案,无推文数量限制,$0.15/千条。

使用场景

  • 推文超过 800 条时自动替代 Playwright 浏览器搜索(配置 API Key 即可)
  • 服务器部署:X_API_PROVIDER=api 全量走付费 API,无需 Cookie 和浏览器
# .env 配置
TWITTERAPI_IO_KEY=your_api_key       # 从 https://twitterapi.io 获取
# X_API_PROVIDER=graphql             # graphql(默认) | api(全量付费API)
# X_API_SAVE_DIRECTLY=false          # true=直接保存(快,无图片) | false=GraphQL补全(推荐)
# X_API_MIN_LIKES=                   # 最低点赞数(留空=不过滤,三项为 OR 关系)
# X_API_MIN_RETWEETS=                # 最低转发数
# X_API_MIN_VIEWS=                   # 最低阅读量

智能直保模式 (X_API_SAVE_DIRECTLY=true):普通推文用 API 数据直接保存(快速),长文(article)和线程(thread)仍走 GraphQL 获取完整媒体。

断点续传:发现阶段实时写入缓存文件,中断后重新运行从断点继续,不重复消耗 API 额度。

输出格式

每条内容保存为独立的 Markdown 文件,按平台分目录存放:

output/
├── X/                    # Twitter/X
│   ├── index/            #   去重索引 + 批量抓取记录
│   ├── status/           #   单篇推文
│   ├── status_xxx/       #   用户推文(按 display_name)
│   ├── bookmarks/        #   全部书签
│   ├── bookmarks_xxx/    #   书签文件夹(按名称)
│   └── search/           #   关键词搜索结果(x-so 命令,.md + .csv)
│       └── 1day_new/     #     按天数+排序分目录
├── XHS/                  # 小红书
│   ├── index/            #   去重索引 + 批量抓取记录
│   ├── notes_xxx/        #   作者笔记(按作者名分目录)
│   ├── search_xxx/       #   搜索笔记(按关键词分目录)
│   └── search/           #   关键词搜索结果(xhs-so 命令,.md + .csv)
├── mpweixin/             # 微信公众号
├── YouTube/              # YouTube
│   └── search_xxx/       #   搜索结果(按关键词分目录)
├── GitHub/               # GitHub 仓库
│   └── index/            #   去重索引
├── Bilibili/             # B 站
├── Telegram/             # Telegram
└── RSS/                  # RSS

文件命名格式(Twitter):作者名_YYYY-MM-DD:标题.md(如 强子手记_2026-02-24:最近看到好多新蓝V都成功✅认证了创作者身份。.md

文件命名格式(YouTube):作者名_YYYY-MM-DD:标题.{md,mp4,mp3,srt}(如 影视飓风_2026-02-12:能卖上亿美金?国产短剧如何征服世界?.md

文件命名格式(小红书):作者名_YYYY-MM-DD:标题.md(如 墨客老师资料库_2026-02-18:开学第一课还没思路的班主任看过来👀.md

文件命名格式(GitHub):owner_repo:README摘要.md(如 nicepkg_aide:在 VSCode 中征服任何代码:一键注释、转换、UI 图生成代码、AI 批量处理文件!.md

文件使用 Obsidian 兼容的 YAML front matter:

Twitter 示例:

---
title: "OpenClaw新手完整学习路径"
source: "https://x.com/AI_Jasonyu/status/123"
author:
  - "@AI_Jasonyu"
author_name: "鱼总聊AI"
published: 2026-02-25
created: 2026-02-26
cover_image: "https://pbs.twimg.com/media/xxx.jpg"
likes: 1075
retweets: 315
replies: 41
bookmarks: 2180
views: 426321
tags:
  - "clippings"
  - "twitter"
---

小红书示例:

---
title: "开学第一课还没思路的班主任看过来👀"
source: "https://www.xiaohongshu.com/explore/69948f62..."
author:
  - "墨客老师资料库"
author_url: "https://www.xiaohongshu.com/user/profile/5eb416f..."
published: 2026-02-18
created: 2026-02-27
cover_image: "https://sns-webpic-qc.xhscdn.com/..."
likes: 179
collects: 242
comments: 28
location: "福建"
tags:
  - "开学第一课ppt"
  - "开学第一课"
  - "教师开学第一课"
item_id: db22cbe3d9c0
---

GitHub 示例:

---
title: "在 VSCode 中征服任何代码:一键注释、转换、UI 图生成代码、AI 批量处理文件!💪"
source: "https://github.com/nicepkg/aide"
author:
  - "nicepkg"
published: 2024-07-03
created: 2026-03-07
description: "Conquer Any Code in VSCode..."
stars: 2684
forks: 207
language: "TypeScript"
license: "MIT"
default_branch: "master"
repo_created: "2024-07-02"
repo_updated: "2026-03-06"
last_push: "2025-05-06"
readme_file: "README_CN.md"
tags:
  - "agent"
  - "ai"
item_id: 8f3a1b2c4d5e
---

设置 OBSIDIAN_VAULT 后,内容会直接写入 Obsidian 笔记库对应的平台子目录。

安装

# 从 GitHub 安装(推荐)
pip install git+https://github.com/iBigQiang/feedgrab.git

# 带隐身浏览器 + TLS 指纹(patchright + browserforge + curl_cffi — 推荐,反检测能力最强)
pip install "feedgrab[stealth] @ git+https://github.com/iBigQiang/feedgrab.git"
patchright install chromium

# Twitter 搜索增强(x-client-transaction-id 反检测签名,x-so 命令必需)
pip install "feedgrab[twitter] @ git+https://github.com/iBigQiang/feedgrab.git"

# 小红书 API 增强(xhshow API 抓取,xhs-so 命令必需)
pip install "feedgrab[xhs] @ git+https://github.com/iBigQiang/feedgrab.git"

# 或使用 Playwright 兜底
pip install "feedgrab[browser] @ git+https://github.com/iBigQiang/feedgrab.git"

# 安装所有可选依赖
pip install "feedgrab[all] @ git+https://github.com/iBigQiang/feedgrab.git"

快速开始

安装完成后,运行一键部署引导:

feedgrab setup

按提示完成 5 个步骤:环境检查 → 配置文件 → UA 检测 → 平台登录 → 功能启用,即可开始使用。每步可跳过,重复运行自动跳过已完成项。


或克隆后本地安装:
```bash
git clone https://github.com/iBigQiang/feedgrab.git
cd feedgrab
pip install -e ".[all]"
patchright install chromium   # 推荐(反检测更强)
# 或: playwright install chromium

视频/音频依赖(可选)

# macOS
brew install yt-dlp ffmpeg

# Linux
pip install yt-dlp
apt install ffmpeg

Whisper 转录需要从 Groq 免费获取 API 密钥并设置:

export GROQ_API_KEY=your_key_here

作为库使用

import asyncio
from feedgrab.reader import UniversalReader

async def main():
    reader = UniversalReader()
    content = await reader.read("https://mp.weixin.qq.com/s/abc123")
    print(content.title)
    print(content.content[:200])

asyncio.run(main())

配置

复制 .env.example.env

cp .env.example .env
变量 必需 说明
X_AUTH_TOKEN 仅 X GraphQL Twitter/X 认证 Cookie
X_CT0 仅 X GraphQL Twitter/X CSRF 令牌 Cookie
X_GRAPHQL_ENABLED 启用/禁用 GraphQL 层(默认:true
X_THREAD_MAX_PAGES 线程最大分页数(默认:20
X_REQUEST_DELAY GraphQL 请求间隔秒数(默认:1.5
X_FETCH_AUTHOR_REPLIES 采集作者回帖(默认:false
X_FETCH_ALL_COMMENTS 采集全部评论(默认:false
X_MAX_COMMENTS 最大评论采集数(默认:50
X_BOOKMARKS_ENABLED 启用书签批量抓取(默认:false
X_BOOKMARK_MAX_PAGES 书签最大分页数(默认:50
X_BOOKMARK_DELAY 书签处理间隔秒数(默认:2.0
X_USER_TWEETS_ENABLED 启用用户推文批量抓取(默认:false
X_USER_TWEET_MAX_PAGES 用户推文最大分页数(默认:50
X_USER_TWEET_DELAY 用户推文处理间隔秒数(默认:2.0
X_USER_TWEETS_SINCE 仅抓取该日期之后的推文(如 2025-10-01,留空=全部)
X_LIST_TWEETS_ENABLED 启用 Twitter List 列表批量抓取(默认:false
X_LIST_TWEETS_DAYS 抓取最近 N 天的推文(默认:1,支持 1/2/3/7)
X_LIST_TWEET_MAX_PAGES 列表推文最大分页数(默认:50
X_LIST_TWEET_DELAY 列表推文处理间隔秒数(默认:2
X_LIST_TWEETS_SUMMARY 列表抓取后生成汇总表格 MD + CSV(默认:false
X_SEARCH_SUPPLEMENTARY 搜索补充开关,UserTweets 不够时自动按月搜索补充(默认:true
X_SEARCH_MAX_PAGES_PER_CHUNK 每个月度搜索分片最大分页数(默认:50
TWITTERAPI_IO_KEY TwitterAPI.io 付费 API Key,从 https://twitterapi.io 获取
X_API_PROVIDER graphql(默认)或 api(全量走付费 API)
X_API_SAVE_DIRECTLY true=直接保存 API 数据 / false=GraphQL 补全(默认)
X_API_MIN_LIKES 最低点赞数过滤(留空=不过滤,三项 OR 关系)
X_API_MIN_RETWEETS 最低转发数过滤(留空=不过滤)
X_API_MIN_VIEWS 最低阅读量过滤(留空=不过滤)
FORCE_REFETCH 强制重新抓取,跳过去重并覆盖已有文件(默认:false
X_SEARCH_ENABLED 启用 Twitter 关键词搜索(默认:true
X_SEARCH_LANG 搜索默认语言(默认:zh,留空=不限语言)
X_SEARCH_DAYS 搜索默认天数(默认:1,最近24小时)
X_SEARCH_MIN_FAVES 搜索默认最低点赞数(默认:0=不过滤)
X_SEARCH_SORT 搜索排序模式:live=最新 / top=热门(默认:live
X_SEARCH_MAX_RESULTS 每次搜索最大推文数(默认:100
X_SEARCH_SAVE_TWEETS 是否同时保存单篇推文 .md(默认:false,仅汇总表格)
X_SEARCH_MERGE_KEYWORDS 多关键词搜索时合并结果到一个文件(默认:false,也可用 --merge 开启)
XHS_USER_NOTES_ENABLED 启用小红书作者批量抓取(默认:false
XHS_USER_NOTE_MAX_SCROLLS 作者主页最大滚动次数(默认:50
XHS_USER_NOTE_DELAY 笔记处理间隔秒数(默认:3.0
XHS_USER_NOTES_SINCE 仅抓取该日期之后的笔记(如 2026-02-01,留空=全部)
XHS_SEARCH_ENABLED 启用小红书搜索批量抓取(默认:false
XHS_SEARCH_MAX_SCROLLS 搜索页最大滚动次数(默认:30
XHS_SEARCH_DELAY 搜索笔记处理间隔秒数(默认:3.0
XHS_API_ENABLED 启用 xhshow API 抓取(默认:true,已安装 xhshow 时自动生效)
XHS_PINIA_ENABLED xhshow 签名失败时自动通过 Pinia Store 注入兜底(默认:true
XHS_API_DELAY API 请求间隔秒数(默认:1.5
XHS_FETCH_COMMENTS 抓取笔记评论(默认:false
XHS_MAX_COMMENTS 最大评论采集数(默认:50
XHS_SEARCH_SORT xhs-so 搜索排序:general=综合 / popular=最热 / latest=最新(默认:general
XHS_SEARCH_NOTE_TYPE xhs-so 搜索类型:0=全部 / 1=视频 / 2=图文(默认:0
XHS_SEARCH_MAX_PAGES xhs-so 搜索最大分页数(默认:5
XHS_SEARCH_MERGE_KEYWORDS 多关键词搜索时合并结果到一个文件(默认:false,也可用 --merge 开启)
MPWEIXIN_SOGOU_ENABLED 启用搜狗微信文章搜索(默认:false
MPWEIXIN_SOGOU_MAX_RESULTS 每次搜索最大文章数(默认:10,最多 100
MPWEIXIN_SOGOU_DELAY 文章处理间隔秒数(默认:3.0
MPWEIXIN_ID_SINCE 按账号批量:仅抓取该日期之后的文章(YYYY-MM-DD,留空=全部)
MPWEIXIN_ID_DELAY 按账号批量:文章处理间隔秒数(默认:3.0
MPWEIXIN_ZHUANJI_SINCE 按专辑批量:仅抓取该日期之后的文章(YYYY-MM-DD,留空=全部)
MPWEIXIN_ZHUANJI_DELAY 按专辑批量:文章处理间隔秒数(默认:3.0
MPWEIXIN_FETCH_COMMENTS 抓取文章评论(实验性,默认:false,需微信客户端 session)
MPWEIXIN_MAX_COMMENTS 最大评论采集数(默认:100
GITHUB_TOKEN GitHub personal access token(无 token 60 次/小时,有 token 5000 次/小时)
FEISHU_APP_ID 仅飞书 API 飞书开放平台 App ID(申请地址
FEISHU_APP_SECRET 仅飞书 API 飞书开放平台 App Secret
FEISHU_DOWNLOAD_IMAGES 下载图片到本地 attachments/{item_id}/ 子目录,每篇文档独立存放(默认:false
FEISHU_WIKI_DELAY 知识库批量抓取间隔秒数(默认:1.0
FEISHU_WIKI_SINCE 仅抓取此日期后修改的文档(YYYY-MM-DD,留空=全部)
FEISHU_CUSTOM_DOMAINS 私有化部署域名(逗号分隔,如 feishu.mycompany.cn
FEISHU_PAGE_LOAD_TIMEOUT Playwright 页面元素等待超时毫秒(默认:5000
FEISHU_CDP_ENABLED CDP 直连已打开的 Chrome 抓取飞书(需 --remote-debugging-port=9222,默认:false
CHROME_CDP_LOGIN 启用 CDP Cookie 提取,feedgrab login 优先从运行中的 Chrome 提取(默认:false
CHROME_CDP_PORT Chrome CDP 端口(默认:9222
X_DOWNLOAD_MEDIA Twitter 图片/视频下载到本地 attachments/ 子目录(默认:false
XHS_DOWNLOAD_MEDIA 小红书图片下载到本地 attachments/ 子目录(默认:false
MPWEIXIN_DOWNLOAD_MEDIA 微信公众号视频下载到本地 attachments/ 子目录(默认:false
BROWSER_USER_AGENT 全局浏览器 UA(推荐 feedgrab detect-ua 自动检测)
TG_API_ID 仅 Telegram https://my.telegram.org 获取
TG_API_HASH 仅 Telegram https://my.telegram.org 获取
GROQ_API_KEY 仅 Whisper https://console.groq.com/keys 免费获取
GEMINI_API_KEY 仅 AI 分析 从 Google AI Studio 获取
FEEDGRAB_DATA_DIR Cookie/Session 存储目录(默认:sessions
OUTPUT_DIR Markdown 输出目录(默认:./output
OBSIDIAN_VAULT Obsidian 笔记库路径(内容写入对应平台子目录)

架构

feedgrab/
├── feedgrab/                  # Python 包
│   ├── cli.py                 # CLI 入口
│   ├── config.py              # 集中配置(路径、开关、stealth headers)
│   ├── reader.py              # URL 调度器(UniversalReader)
│   ├── schema.py              # 统一数据模型(UnifiedContent + Inbox)
│   ├── login.py               # 浏览器登录管理器(+ CDP Cookie 提取)
│   ├── fetchers/
│   │   ├── jina.py            # Jina Reader(万能兜底)
│   │   ├── browser.py         # 隐身浏览器引擎(patchright Tier 1 → playwright Tier 3 + 52 stealth flags)
│   │   ├── bilibili.py        # B 站 API
│   │   ├── youtube.py         # yt-dlp 字幕提取
│   │   ├── github.py          # GitHub REST API(仓库元数据 + 中文 README 优先 + 子目录搜索 + 图片链接补全)
│   │   ├── rss.py             # RSS 解析(feedparser)
│   │   ├── telegram.py        # Telegram 频道(Telethon)
│   │   ├── twitter.py         # X/Twitter 六级兜底调度器
│   │   ├── twitter_cookies.py # Cookie 多源管理(环境变量/文件/Playwright/CDP)
│   │   ├── twitter_fxtwitter.py # FxTwitter API 客户端(Tier 0.3 兜底 + circuit breaker)
│   │   ├── twitter_graphql.py # X GraphQL API 客户端(TweetDetail, UserTweets, Bookmarks, SearchTimeline, 动态 queryId + x-client-transaction-id)
│   │   ├── twitter_thread.py  # 线程重建 + 评论分类(分页 + 去重 + 根推文追溯)
│   │   ├── twitter_bookmarks.py# 书签批量抓取(全部/文件夹,分页+去重+分类)
│   │   ├── twitter_user_tweets.py# 用户推文批量抓取(分页+日期过滤+会话去重+RT跳过)
│   │   ├── twitter_list_tweets.py# List 列表批量抓取(按天数过滤+会话去重+线程深度抓取)
│   │   ├── twitter_search_tweets.py# 浏览器搜索补充(突破 UserTweets 800 条限制,按月分片+响应拦截)
│   │   ├── twitter_keyword_search.py# 关键词搜索(x-so 命令,纯 GraphQL + 互动排序汇总表格)
│   │   ├── twitter_api.py       # TwitterAPI.io 付费 API 客户端(搜索+用户推文)
│   │   ├── twitter_api_user_tweets.py# 付费 API 补充/全量抓取(替代浏览器搜索)
│   │   ├── twitter_markdown.py# 线程 Markdown 渲染器(YAML front matter + 媒体)
│   │   ├── wechat.py          # Jina → Playwright WeChat JS 提取
│   │   ├── wechat_search.py   # 搜狗微信搜索(markdownify 富文本转换)
│   │   ├── mpweixin_account.py # 公众号按账号批量(MP 后台 API + 断点续传)
│   │   ├── mpweixin_album.py  # 公众号专辑批量(mpweixin-zhuanji + 断点续传)
│   │   ├── xhs.py             # API (xhshow) → Pinia Store 注入 → Jina → Playwright 四级兜底
│   │   ├── xhs_api.py         # 小红书 API 客户端(xhshow 签名 + 评论 + xsec_token 缓存)
│   │   ├── xhs_pinia.py       # 小红书 Pinia Store 注入(浏览器原生请求兜底,CDP 优先)
│   │   ├── xhs_user_notes.py  # 小红书作者批量抓取(API → Pinia → 浏览器三层策略)
│   │   ├── xhs_search_notes.py# 小红书搜索批量抓取(xhs-so API/Pinia 搜索 + 搜索结果页滚动)
│   │   ├── feishu.py          # 飞书单篇(Open API → CDP 直连 → Playwright PageMain → Jina + Block→MD + 图片下载)
│   │   └── feishu_wiki.py     # 飞书知识库批量(Open API 递归 + CDP/Playwright 兜底 + 断点续传)
│   └── utils/
│       ├── storage.py         # 按平台分目录 Markdown + JSON 双重输出
│       ├── dedup.py           # 全局去重索引(跨模式统一 item_id 追踪)
│       ├── http_client.py     # 统一 HTTP 客户端(curl_cffi TLS 指纹 → requests fallback)
│       └── media.py           # 媒体文件下载(Twitter/XHS 图片视频本地化)
├── sessions/                  # Cookie/Session 存储(自动创建,git 忽略)
├── skills/                    # Claude Code 技能(npx skills add iBigQiang/feedgrab)
│   ├── feedgrab/              # 核心抓取 — /feedgrab <URL>
│   ├── feedgrab-batch/        # 批量抓取 — /feedgrab-batch
│   ├── feedgrab-setup/        # 安装引导 — /feedgrab-setup
│   ├── video/                 # 视频/播客 → 转录 + 摘要
│   └── analyzer/              # 内容 → 结构化分析
├── mcp_server.py              # MCP 服务器入口
└── pyproject.toml

各层级协作方式

用户发送 URL
    │
    ├─ 文本内容(文章、推文、微信)
    │   └─ Python 抓取器 → UnifiedContent → Markdown
    │
    ├─ X/Twitter 推文或线程
    │   └─ GraphQL(完整线程 + 媒体)→ FxTwitter → Syndication → oEmbed → Jina → Playwright
    │
    ├─ GitHub 仓库
    │   └─ REST API → 仓库元数据 + 中文 README 优先(根目录 + 子目录语言链接)→ 相对图片补全 → Markdown
    │
    ├─ 视频(YouTube、B站、X 视频)
    │   ├─ Python 抓取器 → 元数据(标题、描述)
    │   └─ Video 技能 → 通过字幕/Whisper 生成完整转录
    │
    ├─ 播客(小宇宙、Apple Podcasts)
    │   └─ Video 技能 → 通过 Whisper 生成完整转录
    │
    └─ 需要分析
        └─ Analyzer 技能 → 结构化报告 + 行动建议

致谢

feedgrab 基于以下项目融合升级而来:

  • x-reader — 由 @runes_leo 开发的多平台万能内容阅读器,提供了核心架构、CLI、MCP 服务器和 7+ 平台的抓取器。
  • baoyu-danger-x-to-markdown — 由 @dotey(宝玉)开发的 X/Twitter 深度抓取技能,提供了逆向工程的 GraphQL API 访问、线程重建和 Markdown 渲染能力。

作者

@iBigQiang 维护

捐赠打赏

如果 feedgrab 对你有帮助,欢迎请作者喝杯咖啡 :)

打赏码

许可证

MIT

Star History

Star History Chart

About

Universal content grabber — fetch, normalize, and digest content from 7+ platforms (WeChat, XHS, X/Twitter, YouTube, Bilibili, Telegram, RSS)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages