Note: This project is a labor of love that transforms tweets into RSS feeds. While it might raise an eyebrow at Twitter HQ, we're all about making content more accessible! 🎭
XRSS is your passport to a cleaner, more organized Twitter experience. It transforms the chaotic Twitter timeline into a structured, filterable RSS feed that puts YOU in control. Perfect for researchers, developers, and anyone who loves their content well-organized!
- 🎯 Laser-Focused: Get exactly the content you want, nothing more
- 🚀 Blazing Fast: Redis-powered caching keeps everything snappy
- 🛠️ Highly Customizable: Filter by post types, users, and more
- 🐳 Deploy Anywhere: Docker-ready for instant deployment
- 🤝 Developer Friendly: Clean API with comprehensive documentation
Transform your Twitter experience with:
- 🎭 Smart Feed Conversion: Seamlessly transform Twitter/X feeds into clean RSS format
- 🎯 Precision Filtering: Cherry-pick exactly what you want to see (posts, replies, retweets, quotes)
- ⚡ Lightning Fast: Redis-powered caching system for instant responses
- 🛡️ API Friendly: Built-in rate limiting to keep you within bounds
- 🐳 Deploy & Forget: One-click deployment with Docker
- 🤖 Always Fresh: Background refresh keeps your content up-to-date
You'll need:
- 🐳 Docker & Docker Compose installed
- 🔑 Twitter/X account credentials
- ☕ A few minutes of your time
-
Clone & Configure
# Get the example config curl -O https://raw.githubusercontent.com/thytu/xrss/main/.env.example mv .env.example .env # Edit .env with your Twitter credentials
-
Choose Your Path
# Using Docker Compose (recommended) curl -O https://raw.githubusercontent.com/thytu/xrss/main/docker-compose.yml docker compose up -d # Or using Docker directly docker run -d \ --name xrss \ -p 8000:8000 \ --env-file .env \ vdematos/xrss:latest
# Create your virtual environment python -m venv venv source venv/bin/activate # Windows: .\venv\Scripts\activate # Install what you need pip install . # Basic setup # OR pip install ".[dev]" # Developer setup with testing goodies # Launch! python main.py
Once running, your feeds are available at:
- 📰 RSS Feed:
http://localhost:8000/feed.xml
- 📚 API Documentation:
http://localhost:8000/docs
Your gateway to RSS-formatted Twitter feeds.
GET /feed.xml?usernames=ylecun&usernames=karpathy&include_replies=false
Parameter | Type | Default | Description |
---|---|---|---|
usernames |
List[str] |
["ylecun"] |
Twitter handles to follow |
include_posts |
bool |
true |
Include regular tweets |
include_replies |
bool |
true |
Include reply tweets |
include_retweets |
bool |
true |
Include retweets |
include_quotes |
bool |
true |
Include quote tweets |
Raw API endpoint for advanced users.
{
"usernames": ["user1", "user2"],
"include_posts": true,
"include_replies": true,
"include_retweets": true,
"include_quotes": true
}
Variable | Description |
---|---|
TWITTER_USERNAME |
Your Twitter handle |
TWITTER_EMAIL |
Your Twitter email |
TWITTER_PASSWORD |
Your Twitter password |
REDIS_URL |
Redis connection string |
Variable | Default | What it Does |
---|---|---|
CACHE_TTL |
1800 |
How long to cache (seconds) |
BACKGROUND_REFRESH_INTERVAL |
1500 |
How often to refresh (seconds) |
COOKIES_FILE |
cookies.json |
Path to store authentication cookies |
XRSS stores authentication cookies to maintain your session. By default, they are stored in cookies.json
in the current directory, but you can customize this:
# Store in your config directory
export COOKIES_FILE=~/.config/xrss/cookies.json
# Or in a local data directory
export COOKIES_FILE=./data/cookies/cookies.json
The directory structure will be created automatically if it doesn't exist.
We've optimized XRSS to be blazing fast:
- 🗄️ Smart Caching: Redis-powered with configurable TTL
- 🔄 Proactive Updates: Background refresh before cache expires
- 🚦 Traffic Control: Rate limiting (2 concurrent, 1s delay)
- ⚡ Parallel Power: Concurrent request processing
- 🔌 Connection Smarts: Efficient connection pooling
- 📦 Data Efficiency: Optimized serialization
# Get the dev goodies
pip install ".[dev]"
# Run the test suite
pytest
# Check the coverage
pytest # Coverage included by default
We love contributions! Here's how you can help:
- 🍴 Fork it
- 🌿 Create your branch:
git checkout -b feature/amazing-feature
- 🔄 Commit changes:
git commit -m 'Add amazing feature'
⤴️ Push to the branch:git push origin feature/amazing-feature
- 🎯 Open a Pull Request
Check our Contributing Guidelines for more details!
If this project helps you tame your Twitter feed, consider giving it a star! It helps others discover the project and makes our day! 🌟