Fetch full tweets, long tweets, quoted tweets, and X Articles from X/Twitter without login or API keys, using no dependencies and zero configuration.
OpenClaw skills run inside an OpenClaw container. EasyClawd deploys and manages yours — no server setup needed.
Initial release—fetches tweets and articles from X/Twitter with no API keys or dependencies. - Fetches regular tweets, long tweets (Twitter Blue), quoted tweets, and complete X Articles. - Returns full tweet stats: likes, retweets, bookmarks, views, and reply counts. - CLI and importable Python API supported; outputs JSON or plain text. - Zero dependencies: runs on Python 3.7+ standard library. - Requires no authentication; leverages the public FxTwitter API. - Cannot fetch reply threads (only reply counts) or access deleted/private tweets.
---
name: x-tweet-fetcher
description: >
Fetch tweets from X/Twitter without login or API keys.
Supports regular tweets, long tweets, quoted tweets, and full X Articles.
Zero dependencies, zero configuration.
---
# X Tweet Fetcher
Fetch tweets from X/Twitter without authentication. Uses FxTwitter API.
## What It Can Fetch
| Content Type | Support |
|-------------|---------|
| Regular tweets | ✅ Full text + stats |
| Long tweets (Twitter Blue) | ✅ Full text |
| X Articles (long-form) | ✅ Complete article text |
| Quoted tweets | ✅ Included |
| Stats (likes/RT/views) | ✅ Included |
## Usage
### CLI
```bash
# JSON output
python3 scripts/fetch_tweet.py --url "https://x.com/user/status/123456"
# Pretty JSON
python3 scripts/fetch_tweet.py --url "https://x.com/user/status/123456" --pretty
# Text only (human readable)
python3 scripts/fetch_tweet.py --url "https://x.com/user/status/123456" --text-only
```
### From Agent Code
```python
from scripts.fetch_tweet import fetch_tweet
result = fetch_tweet("https://x.com/user/status/123456")
tweet = result["tweet"]
# Regular tweet
print(tweet["text"])
# X Article (long-form)
if tweet["is_article"]:
print(tweet["article"]["title"])
print(tweet["article"]["full_text"]) # Complete article
print(tweet["article"]["word_count"])
```
## Output Format
```json
{
"url": "https://x.com/user/status/123",
"username": "user",
"tweet_id": "123",
"tweet": {
"text": "Tweet content...",
"author": "Display Name",
"screen_name": "username",
"likes": 100,
"retweets": 50,
"bookmarks": 25,
"views": 10000,
"replies_count": 30,
"created_at": "Mon Jan 01 12:00:00 +0000 2026",
"is_note_tweet": false,
"is_article": true,
"article": {
"title": "Article Title",
"full_text": "Complete article content...",
"word_count": 4847,
"char_count": 27705
}
}
}
```
## Requirements
- Python 3.7+
- No external packages (stdlib only)
- No API keys
- No login required
## How It Works
Uses [FxTwitter](https://github.com/FxEmbed/FxEmbed) public API (`api.fxtwitter.com`) which proxies X/Twitter content. Articles are returned as structured blocks and reassembled into full text.
## Limitations
- Cannot fetch reply threads (only reply counts available via `replies_count` field)
- Reply content would require browser automation dependencies (Camofox/Nitter)
- These were removed to maintain zero-dependency architecture
- `--replies` flag exists but returns an explanatory error message
- Cannot fetch deleted or private tweets
- Rate limits depend on FxTwitter service availability
- If FxTwitter goes down, the skill won't work (no fallback)
## File Structure
```
skills/x-tweet-fetcher/
├── SKILL.md (this file)
└── scripts/
└── fetch_tweet.py (single file, zero deps)
```