🦞 Fetch tweets and replies from X/Twitter without login or API keys. OpenClaw skill.
npx skills add https://github.com/ythx-101/x-tweet-fetcher --skill x-tweet-fetcherInstallez cette compétence avec la CLI et commencez à utiliser le flux de travail SKILL.md dans votre espace de travail.
Fetch tweets, lists, articles, and WeChat content — with smart backend routing.
Three backends · Auto fallback · Works everywhere (VPS / Mac / Windows / CI / Claude Code / OpenClaw)
Quick Start · Backends · Capabilities · Self-hosted Nitter · Claude Code & CC
You: fetch that tweet / list / article for me
AI: I can't access X/Twitter. Please copy-paste the content manually.
You: ...seriously?
X has no free API. Scraping gets you blocked. Browser automation is fragile and won't work in headless environments.
x-tweet-fetcher solves this with smart backend routing: Nitter for zero-dependency speed, Playwright for full-feature coverage, auto fallback between them.
# Auto mode (default) — Nitter first, browser fallback
python3 scripts/fetch_tweet.py --user elonmusk
# Nitter only — zero dependency, no browser
python3 scripts/fetch_tweet.py --user elonmusk --backend nitter
# Browser only — full features (lists, articles)
python3 scripts/fetch_tweet.py --list 1455045069516357634 --backend browser
| Backend | Deps | Speed | Features |
|---|---|---|---|
| nitter | None (stdlib only) | ⚡ Fast | Timeline, search, replies, profile, mentions |
| browser | Playwright/Chromium | 🐢 Slower | Everything above + Lists + Articles + fetch_china |
| auto (default) | Best available | ⚡→🐢 | Tries nitter first, falls back to browser |
OpenClaw users: Playwright + Chromium are built-in.
--backend autojust works — no extra install needed.
| Feature | Backend | Output |
|---|---|---|
| Single tweet | FxTwitter (always) | text, stats, media, quotes |
| Reply comments | nitter / browser | threaded comment list |
| User timeline | nitter / browser | paginated tweet list |
| @mentions monitor | nitter / browser | incremental new mentions |
| Keyword search | nitter / browser | real-time tweet stream |
| X Lists | browser only | list member tweets |
| X Articles | browser only | full long-form content |
| User profile analysis | nitter + LLM | MBTI, Big Five, topic graph |
| WeChat article search | Sogou (direct HTTP) | title, url, author, date |
| WeChat/Weibo/Bilibili | browser only | via fetch_china.py |
| Tweet growth tracker | FxTwitter API | growth curves, burst detection |
For AI Agents: All output is structured JSON. Import as Python modules for direct integration. Exit codes are cron-friendly (
0=nothing new,1=new content).
# Works immediately — no Nitter, no browser needed
python3 scripts/fetch_tweet.py --url https://x.com/elonmusk/status/123456789
# Set your Nitter instance URL (for nitter/auto mode)
export NITTER_URL=http://127.0.0.1:8788
# User timeline
python3 scripts/fetch_tweet.py --user elonmusk --limit 20
# Keyword search — real-time tweets
python3 scripts/nitter_client.py --search "AI agent"
# Tweet replies
python3 scripts/fetch_tweet.py --url https://x.com/elonmusk/status/123456789 --replies
# @mentions monitoring (cron-friendly)
python3 scripts/fetch_tweet.py --monitor @yourusername
# User profile analysis
python3 scripts/x-profile-analyzer.py --user elonmusk --count 100
# X List — requires Playwright
python3 scripts/fetch_tweet.py --list 1455045069516357634 --backend browser
# X Article
python3 scripts/fetch_tweet.py --article https://x.com/user/article/123 --backend browser
# WeChat / Weibo / Bilibili
python3 scripts/fetch_china.py --url "https://mp.weixin.qq.com/s/..."
python3 scripts/sogou_wechat.py --keyword "AI Agent" --limit 5 --json
Since x-tweet-fetcher has zero mandatory dependencies, it works perfectly in constrained environments:
| Environment | nitter mode | browser mode | Notes |
|---|---|---|---|
| Claude Code (CC) | ✅ | ❌ | No browser runtime |
| OpenClaw | ✅ | ✅ | Playwright built-in |
| VPS (headless Linux) | ✅ | ✅* | *needs pip install playwright |
| Mac / Windows | ✅ | ✅* | *needs pip install playwright |
| CI/CD pipelines | ✅ | ⚠️ | Possible but heavy |
| Docker containers | ✅ | ⚠️ | Needs Chromium in image |
| Termux (Android) | ✅ | ❌ | No Chromium |
# In Claude Code (nitter mode, zero deps):
export NITTER_URL=http://your-vps:8788
python3 scripts/fetch_tweet.py --user YuLin807 --limit 10
# In OpenClaw (auto mode, full features):
python3 scripts/fetch_tweet.py --user YuLin807 --limit 10
# → auto-detects Nitter, falls back to Playwright if needed
⚠️ Public Nitter instances are dead or unreliable (as of March 2026). Self-hosting is the only reliable option.
Twitter removed guest API access in 2023. Public Nitter instances get rate-limited because thousands of users share a few accounts. Your own instance = your own rate limits.
# Ubuntu/Debian
sudo apt install -y redis-server libpcre3-dev libsass-dev
# Install Nim
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
export PATH=$HOME/.nimble/bin:$PATH
git clone https://github.com/zedeus/nitter
cd nitter
nimble build -d:release
nimble scss
cp nitter.example.conf nitter.conf
Use a secondary account (not your main).
x.comauth_token and ct0sessions.jsonl:{"name":"myaccount","auth_token":"YOUR_AUTH_TOKEN","ct0":"YOUR_CT0"}
[Server]
address = "127.0.0.1" # Local only!
port = 8788
[Config]
hmacKey = "$(openssl rand -hex 32)"
[Tokens]
tokenFile = "sessions.jsonl"
sudo systemctl start redis-server
./nitter
# Test
curl http://127.0.0.1:8788/YuLin807
export NITTER_URL=http://127.0.0.1:8788
python3 scripts/nitter_client.py --search "test"
127.0.0.1 only — never expose to public internet ┌─────────────┐
--url │ FxTwitter │ ← Public API, no auth needed
│ (free) │
└──────┬──────┘
│ JSON
┌────────────┴────────────┐
│ --backend auto │
│ ┌───────┐ ┌────────┐ │ ┌──────────┐
--user │ │Nitter │→→│Browser │ │ │ Agent │
--replies │ │(fast) │ │(full) │ │──────▶│ (JSON) │
--monitor │ │ 0 dep │ │Playwrt │ │ │ │
--search │ └───────┘ └────────┘ │ └──────────┘
--list └─────────────────────────┘
--article
┌─────────────┐
sogou_wechat │ Sogou │ ← Direct HTTP, no API key
fetch_china │ (search) │
└─────────────┘
Python 3.7+ (that's it for nitter mode)
| Mode | Extra requirement |
|---|---|
--backend nitter |
Nothing (Python stdlib only) |
--backend browser |
pip install playwright + playwright install chromium |
--backend auto |
Uses whatever is available |
Exit codes for automation: 0=nothing new, 1=new content, 2=error.
# Check mentions every 30 min
*/30 * * * * NITTER_URL=http://127.0.0.1:8788 python3 fetch_tweet.py --monitor @username
# Discover tweets daily
0 9 * * * python3 nitter_client.py --search "AI Agent" >> ~/discoveries.jsonl
Issues and PRs welcome! Core platforms:
Other platforms welcome as community PRs.
Three backends. Auto fallback. Works everywhere. 🦞
GitHub · Issues · OpenClaw Q&A