feedgrab — Universal Content Grabber
Give it a URL, get back structured Markdown. Supports 17+ platforms with deep extraction.
Trigger
Activate when user provides a URL and wants content fetched/extracted/read:
/feedgrab <URL>
- "Grab this article"
- "Read this tweet/post"
- "抓取这个链接"
- Any URL from supported platforms
Prerequisites Check
Before fetching, verify feedgrab is installed:
which feedgrab 2>/dev/null || command -v feedgrab 2>/dev/null
If NOT installed, tell the user:
feedgrab is not installed. Run `/feedgrab-setup` or manually:
pip install feedgrab[all]
feedgrab setup
Then stop — do not proceed without feedgrab.
Supported Platforms
| Platform |
URL Pattern |
Method |
| X/Twitter |
x.com/*/status/*, twitter.com/* |
GraphQL → FxTwitter → Syndication → oEmbed → Jina → Playwright |
| WeChat (微信公众号) |
mp.weixin.qq.com/* |
Playwright JS evaluate → Jina |
| Xiaohongshu (小红书) |
xiaohongshu.com/explore/*, xhslink.com/* |
API (xhshow) → Pinia Store injection → Jina → Playwright |
| YouTube |
youtube.com/watch?v=*, youtu.be/*, Shorts |
InnerTube API → yt-dlp subtitles → Groq Whisper |
| GitHub |
github.com/*/* |
REST API (Chinese README priority + subdirectory scan) |
| LinuxDo / Discourse |
linux.do/t/* |
Discourse topic JSON API → CDP → Playwright in-page fetch → Jina |
| IDCFlare / Discourse |
idcflare.com/t/* |
Discourse topic JSON API → CDP → Playwright in-page fetch → Jina |
| Feishu/Lark (飞书) |
feishu.cn/docx/*, feishu.cn/wiki/* |
Open API → CDP → Playwright PageMain → Jina |
| KDocs (金山文档) |
kdocs.cn/l/* |
Playwright ProseMirror DOM (virtual scroll + CDP) |
| FlowUs (息流) |
flowus.cn/share/*, flowus.cn/*/<uuid> |
HTTP API → CDP/Launch browser → Jina; online signed images or local attachments |
| Youdao Note (有道云笔记) |
share.note.youdao.com/* |
JSON API → Playwright iframe → Jina |
| Zhihu (知乎) |
zhihu.com/question/*/answer/*, zhuanlan.zhihu.com/p/* |
API v4 → Playwright CDP/DOM → Jina |
| Bilibili (B站) |
bilibili.com/video/*, b23.tv/* |
API metadata + 3-tier subtitle fallback (v2 → WBI v2 → Whisper) |
| Xiaoyuzhou (小宇宙) |
xiaoyuzhoufm.com/episode/* |
SSR __NEXT_DATA__ + Groq Whisper transcription |
| Ximalaya (喜马拉雅) |
ximalaya.com/sound/*, m.ximalaya.com/sound/* |
Web Revision API + canPlay degradation + Groq Whisper |
| Telegram |
t.me/* |
Telethon |
| HackerNews |
news.ycombinator.com/item?id=* |
Firebase API v0 (item.json + first-layer comments + hn top/new/best/ask/show/jobs list batch) |
| Medium |
medium.com/*, *.medium.com/* |
Jina Reader → JSON-LD articleBody → Stealth Browser; user/publication batch via RSS |
| Reddit |
reddit.com/r/*/comments/*, redd.it/* |
old.reddit.com .json + self-UA → CDP → Stealth Playwright + saved session → Jina (REDDIT_REPLY_MODE=top/tree/all; batch/search via reddit-sub / reddit-so) |
| Weibo |
weibo.com/*, weibo.cn/*, m.weibo.cn/status/* |
m.weibo.cn /statuses/show + container/getIndex + SSR $render_data fallback (SUB cookie optional) |
| Douyin (抖音) |
douyin.com/video/*, v.douyin.com/* (short link) |
CDP → Stealth Playwright + saved session → SSR RENDER_DATA → Jina (browser-side signing, no algorithm break) |
| Zsxq (知识星球) |
articles.zsxq.com/id_*.html, wx.zsxq.com/group/*/topic/*, t.zsxq.com/* (short) |
HTTP cookie (articles SSR HTML / api.zsxq.com topic JSON) → CDP → Stealth Playwright → Jina (auth-walled, login required) |
| RSS |
RSS/Atom feed URLs |
feedparser |
| Paywall news (300+) |
NYT/WSJ/FT/Economist/Bloomberg... |
JSON-LD → Googlebot/Bingbot UA → AMP → EU IP → archive.today → Google Cache → Jina |
| Any web page |
Any other URL |
JSON-LD pre-scan → Jina Reader fallback |
Pipeline
Step 1: Fetch Content
feedgrab "$ARGUMENTS"
The CLI auto-detects the platform and routes to the appropriate fetcher.
Step 2: Locate Output File
feedgrab saves output to OUTPUT_DIR (default: ./output/). Check the CLI output for the saved file path, typically:
output/X/author_date:title.md
output/mpweixin/author_date:title.md
output/XHS/author_date:title.md
output/YouTube/author_date:title.md
output/GitHub/author_date:title.md
output/LinuxDo/author_date:title.md
output/IDCFlare/author_date:title.md
output/Feishu/author_date:title.md
output/KDocs/author_date:title.md
output/FlowUs/author_date:title.md
output/NoteYouDao/author_date:title.md
output/Zhihu/author_date:title.md
output/Bilibili/author_date:title.md
output/Xiaoyuzhou/author_date:title.md
output/Ximalaya/author_date:title.md
output/Web/author_date:title.md (paywall / generic pages)
Step 3: Read and Present
Read the output .md file and present the content to the user. The file includes:
- YAML front matter (title, source, author, published, likes, tags, etc.)
- Full article/tweet/post content in Markdown
- Images (as remote URLs or local paths if media download is enabled)
Clipboard Mode
If the user says "grab from clipboard" or the URL contains & (which breaks PowerShell):
feedgrab clip
This reads the URL from the system clipboard.
Error Handling
| Error |
Solution |
feedgrab: command not found |
Run /feedgrab-setup |
| Cookie expired / 401 / 403 |
feedgrab login <platform> to refresh |
| Jina timeout (30s) |
feedgrab auto-retries with Playwright |
| Rate limit (429) |
feedgrab auto-rotates cookies if configured |
OUTPUT_DIR not set |
feedgrab setup to configure |
Tips
- For Twitter deep extraction (views, bookmarks, threads): configure cookies via
feedgrab login twitter
- For WeChat articles: no login needed for single articles
- For Xiaohongshu:
pip install xhshow for API mode (faster, no browser needed)
- For GitHub: set
GITHUB_TOKEN for higher rate limits (5000/hr vs 60/hr)
- For LinuxDo / Discourse:
feedgrab login linuxdo if the topic is private or the site requires a browser session / Cloudflare cookie
- For IDCFlare / Discourse:
feedgrab login idcflare if the topic is private or the site requires a browser session / Cloudflare cookie
- For Discourse forums: default reply mode is OP + topic-author follow-up replies only; switch with
LINUXDO_REPLY_MODE / IDCFLARE_REPLY_MODE (author / all / none)
- For Reddit: use
REDDIT_REPLY_MODE=tree for nested replies or REDDIT_REPLY_MODE=all for extra morechildren expansion; use /feedgrab-batch for reddit-so search
- For Feishu: set
FEISHU_APP_ID + FEISHU_APP_SECRET for Open API access
- For KDocs:
feedgrab login kdocs to save session (or enable KDOCS_CDP_ENABLED=true to reuse running Chrome)
- For FlowUs:
feedgrab login flowus for paid/private docs; default images use signed online URLs, set FLOWUS_DOWNLOAD_IMAGES=true for local attachments
- For Zhihu:
feedgrab login zhihu to save session (enables full answer content)
- For Bilibili subtitles: free tier (
player/v2 + WBI) works out of the box; set BILIBILI_SUBTITLE_WHISPER=true for Whisper fallback on videos without subtitles
- For Xiaoyuzhou / Ximalaya: set
GROQ_API_KEY for Whisper transcription (free tier = metadata + shownotes only)
- For paywall sites:
PAYWALL_ENABLED=true by default, no extra config
- Run
feedgrab doctor to diagnose issues
1---2name: feedgrab3description: Universal content grabber — fetch any URL and return structured Markdown. Supports X/Twitter, WeChat, Xiaohongshu, YouTube, GitHub, LinuxDo/IDCFlare/Discourse, Feishu/Lark, KDocs, FlowUs, Youdao Note, Zhihu, Bilibili (with subtitle transcription), Xiaoyuzhou podcasts, Ximalaya podcasts, Telegram, HackerNews, Medium, Reddit, Weibo, Douyin, Zsxq (Knowledge Planet), RSS, 300+ paywall news sites, and any web page. Use when user provides a URL and wants its content extracted.4---56# feedgrab — Universal Content Grabber78> Give it a URL, get back structured Markdown. Supports 17+ platforms with deep extraction.910## Trigger1112Activate when user provides a URL and wants content fetched/extracted/read:13- `/feedgrab <URL>`14- "Grab this article"15- "Read this tweet/post"16- "抓取这个链接"17- Any URL from supported platforms1819## Prerequisites Check2021Before fetching, verify feedgrab is installed:2223```bash24which feedgrab 2>/dev/null || command -v feedgrab 2>/dev/null25```2627**If NOT installed**, tell the user:28```29feedgrab is not installed. Run `/feedgrab-setup` or manually:30 pip install feedgrab[all]31 feedgrab setup32```33Then stop — do not proceed without feedgrab.3435## Supported Platforms3637| Platform | URL Pattern | Method |38|----------|------------|--------|39| X/Twitter | `x.com/*/status/*`, `twitter.com/*` | GraphQL → FxTwitter → Syndication → oEmbed → Jina → Playwright |40| WeChat (微信公众号) | `mp.weixin.qq.com/*` | Playwright JS evaluate → Jina |41| Xiaohongshu (小红书) | `xiaohongshu.com/explore/*`, `xhslink.com/*` | API (xhshow) → Pinia Store injection → Jina → Playwright |42| YouTube | `youtube.com/watch?v=*`, `youtu.be/*`, Shorts | InnerTube API → yt-dlp subtitles → Groq Whisper |43| GitHub | `github.com/*/*` | REST API (Chinese README priority + subdirectory scan) |44| LinuxDo / Discourse | `linux.do/t/*` | Discourse topic JSON API → CDP → Playwright in-page fetch → Jina |45| IDCFlare / Discourse | `idcflare.com/t/*` | Discourse topic JSON API → CDP → Playwright in-page fetch → Jina |46| Feishu/Lark (飞书) | `feishu.cn/docx/*`, `feishu.cn/wiki/*` | Open API → CDP → Playwright PageMain → Jina |47| KDocs (金山文档) | `kdocs.cn/l/*` | Playwright ProseMirror DOM (virtual scroll + CDP) |48| FlowUs (息流) | `flowus.cn/share/*`, `flowus.cn/*/<uuid>` | HTTP API → CDP/Launch browser → Jina; online signed images or local attachments |49| Youdao Note (有道云笔记) | `share.note.youdao.com/*` | JSON API → Playwright iframe → Jina |50| Zhihu (知乎) | `zhihu.com/question/*/answer/*`, `zhuanlan.zhihu.com/p/*` | API v4 → Playwright CDP/DOM → Jina |51| Bilibili (B站) | `bilibili.com/video/*`, `b23.tv/*` | API metadata + 3-tier subtitle fallback (v2 → WBI v2 → Whisper) |52| Xiaoyuzhou (小宇宙) | `xiaoyuzhoufm.com/episode/*` | SSR `__NEXT_DATA__` + Groq Whisper transcription |53| Ximalaya (喜马拉雅) | `ximalaya.com/sound/*`, `m.ximalaya.com/sound/*` | Web Revision API + canPlay degradation + Groq Whisper |54| Telegram | `t.me/*` | Telethon |55| HackerNews | `news.ycombinator.com/item?id=*` | Firebase API v0 (item.json + first-layer comments + `hn top/new/best/ask/show/jobs` list batch) |56| Medium | `medium.com/*`, `*.medium.com/*` | Jina Reader → JSON-LD articleBody → Stealth Browser; user/publication batch via RSS |57| Reddit | `reddit.com/r/*/comments/*`, `redd.it/*` | old.reddit.com .json + self-UA → CDP → Stealth Playwright + saved session → Jina (`REDDIT_REPLY_MODE=top/tree/all`; batch/search via `reddit-sub` / `reddit-so`) |58| Weibo | `weibo.com/*`, `weibo.cn/*`, `m.weibo.cn/status/*` | m.weibo.cn /statuses/show + container/getIndex + SSR $render_data fallback (SUB cookie optional) |59| Douyin (抖音) | `douyin.com/video/*`, `v.douyin.com/*` (short link) | CDP → Stealth Playwright + saved session → SSR RENDER_DATA → Jina (browser-side signing, no algorithm break) |60| Zsxq (知识星球) | `articles.zsxq.com/id_*.html`, `wx.zsxq.com/group/*/topic/*`, `t.zsxq.com/*` (short) | HTTP cookie (articles SSR HTML / api.zsxq.com topic JSON) → CDP → Stealth Playwright → Jina (auth-walled, login required) |61| RSS | RSS/Atom feed URLs | feedparser |62| Paywall news (300+) | NYT/WSJ/FT/Economist/Bloomberg... | JSON-LD → Googlebot/Bingbot UA → AMP → EU IP → archive.today → Google Cache → Jina |63| Any web page | Any other URL | JSON-LD pre-scan → Jina Reader fallback |6465## Pipeline6667### Step 1: Fetch Content6869```bash70feedgrab "$ARGUMENTS"71```7273The CLI auto-detects the platform and routes to the appropriate fetcher.7475### Step 2: Locate Output File7677feedgrab saves output to `OUTPUT_DIR` (default: `./output/`). Check the CLI output for the saved file path, typically:78- `output/X/author_date:title.md`79- `output/mpweixin/author_date:title.md`80- `output/XHS/author_date:title.md`81- `output/YouTube/author_date:title.md`82- `output/GitHub/author_date:title.md`83- `output/LinuxDo/author_date:title.md`84- `output/IDCFlare/author_date:title.md`85- `output/Feishu/author_date:title.md`86- `output/KDocs/author_date:title.md`87- `output/FlowUs/author_date:title.md`88- `output/NoteYouDao/author_date:title.md`89- `output/Zhihu/author_date:title.md`90- `output/Bilibili/author_date:title.md`91- `output/Xiaoyuzhou/author_date:title.md`92- `output/Ximalaya/author_date:title.md`93- `output/Web/author_date:title.md` (paywall / generic pages)9495### Step 3: Read and Present9697Read the output `.md` file and present the content to the user. The file includes:98- YAML front matter (title, source, author, published, likes, tags, etc.)99- Full article/tweet/post content in Markdown100- Images (as remote URLs or local paths if media download is enabled)101102## Clipboard Mode103104If the user says "grab from clipboard" or the URL contains `&` (which breaks PowerShell):105106```bash107feedgrab clip108```109110This reads the URL from the system clipboard.111112## Error Handling113114| Error | Solution |115|-------|----------|116| `feedgrab: command not found` | Run `/feedgrab-setup` |117| Cookie expired / 401 / 403 | `feedgrab login <platform>` to refresh |118| Jina timeout (30s) | feedgrab auto-retries with Playwright |119| Rate limit (429) | feedgrab auto-rotates cookies if configured |120| `OUTPUT_DIR` not set | `feedgrab setup` to configure |121122## Tips123124- For **Twitter deep extraction** (views, bookmarks, threads): configure cookies via `feedgrab login twitter`125- For **WeChat articles**: no login needed for single articles126- For **Xiaohongshu**: `pip install xhshow` for API mode (faster, no browser needed)127- For **GitHub**: set `GITHUB_TOKEN` for higher rate limits (5000/hr vs 60/hr)128- For **LinuxDo / Discourse**: `feedgrab login linuxdo` if the topic is private or the site requires a browser session / Cloudflare cookie129- For **IDCFlare / Discourse**: `feedgrab login idcflare` if the topic is private or the site requires a browser session / Cloudflare cookie130- For **Discourse forums**: default reply mode is OP + topic-author follow-up replies only; switch with `LINUXDO_REPLY_MODE` / `IDCFLARE_REPLY_MODE` (`author` / `all` / `none`)131- For **Reddit**: use `REDDIT_REPLY_MODE=tree` for nested replies or `REDDIT_REPLY_MODE=all` for extra morechildren expansion; use `/feedgrab-batch` for `reddit-so` search132- For **Feishu**: set `FEISHU_APP_ID` + `FEISHU_APP_SECRET` for Open API access133- For **KDocs**: `feedgrab login kdocs` to save session (or enable `KDOCS_CDP_ENABLED=true` to reuse running Chrome)134- For **FlowUs**: `feedgrab login flowus` for paid/private docs; default images use signed online URLs, set `FLOWUS_DOWNLOAD_IMAGES=true` for local attachments135- For **Zhihu**: `feedgrab login zhihu` to save session (enables full answer content)136- For **Bilibili subtitles**: free tier (`player/v2` + WBI) works out of the box; set `BILIBILI_SUBTITLE_WHISPER=true` for Whisper fallback on videos without subtitles137- For **Xiaoyuzhou / Ximalaya**: set `GROQ_API_KEY` for Whisper transcription (free tier = metadata + shownotes only)138- For **paywall sites**: `PAYWALL_ENABLED=true` by default, no extra config139- Run `feedgrab doctor` to diagnose issues