Fetch Twitter/X post content including long-form Articles with full images and metadata. Use when Claude needs to retrieve tweet/article content, author info, engagement metrics, and embedded media. Supports individual posts and X Articles (long-form content). Automatically downloads all images to local attachments folder and generates complete Markdown with proper image references. Preferred over Jina for X Articles with images.
67
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fetch Twitter/X post and article content with full media support.
For plain post text, prefer the fxtwitter mirror API — login-free, key-free,
works direct, and returns the full note_tweet body in tweet.text (the
full_text key does not exist; a 2,324-char long-form announcement came back
complete):
curl -sS --max-time 20 "https://api.fxtwitter.com/<user>/status/<id>" \
| python3 -c "import json,sys; t=json.load(sys.stdin)['tweet']; print(t['created_at']); print(t['text'])"replies is a count, not the reply thread. For X Articles with images, use
fetch_article.py below — fxtwitter does not carry article bodies.
For X Articles with images, use the new fetch_article.py script:
uv run --with pyyaml python scripts/fetch_article.py <article_url> [output_dir]Example:
uv run --with pyyaml python scripts/fetch_article.py \
https://x.com/HiTw93/status/2040047268221608281 \
./ClippingsThis will:
twitter-cli (likes, retweets, bookmarks)jina.ai APIattachments/YYYY-MM-DD-AUTHOR-TITLE/Fetching: https://x.com/HiTw93/status/2040047268221608281
--------------------------------------------------
Getting metadata...
Title: 你不知道的大模型训练:原理、路径与新实践
Author: Tw93
Likes: 1648
Getting content and images...
Images: 15
Downloading 15 images...
✓ 01-image.jpg
✓ 02-image.jpg
...
✓ Saved: ./Clippings/2026-04-03-文章标题.md
✓ Images: ./Clippings/attachments/2026-04-03-HiTw93-.../ (15 downloaded)⚠️ Known reliability risk (2026-08-30 live tests): anonymous r.jina.ai
access to x.com gets 403-globally-banned for hours when third-party
users abuse the domain — the ban blocks every anonymous caller, then
expires. Verified working again after expiry (anonymous fetch then returns
post text), so treat Jina as intermittent, never a load-bearing path.
The shared key in this repo is also currently out of balance (402
InsufficientBalanceError), which makes fetch_tweets.sh — it hard-requires
JINA_API_KEY — unusable until recharged.
For simple text-only fetching:
# Single tweet
curl "https://r.jina.ai/https://x.com/USER/status/TWEET_ID" \
-H "Authorization: Bearer ${JINA_API_KEY}"
# Batch fetching
scripts/fetch_tweets.sh url1 url2 url3JINA_API_KEYuv (Python package manager)export JINA_API_KEY="your_api_key_here"
# Get from https://jina.ai/output_dir/
├── YYYY-MM-DD-article-title.md # Main Markdown file
└── attachments/
└── YYYY-MM-DD-author-title/
├── 01-image.jpg
├── 02-image.jpg
└── ...https://x.com/USER/status/ID (posts)https://x.com/USER/article/ID (long-form articles)https://twitter.com/USER/status/ID (legacy)Full-featured article fetcher with image download:
uv run --with pyyaml python scripts/fetch_article.py <url> [output_dir]Simple text-only fetcher using Jina API:
python scripts/fetch_tweet.py <tweet_url> [output_file]Batch fetch multiple tweets (Jina API):
scripts/fetch_tweets.sh <url1> <url2> ...Old workflow:
curl "https://r.jina.ai/https://x.com/..."
# Manual image extraction and downloadNew workflow:
uv run --with pyyaml python scripts/fetch_article.py <url>
# Automatic image download, complete Markdowna0af111
Also appears in
last in sync Jan 28, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.