# Mastobot — Mastodon Feed Automation Service Automatically syncs RSS feeds from Finnish and international sources to your custom Mastodon instance. ## Features - **7 RSS feed rotors** - Pull updates from news, weather, and community sources - **Custom content formatting** - Each feed has tailored message formatting (e.g., hashtags for Finnish feeds) - **Intelligent tagging** - Uses OpenAI API to generate or translate hashtags for Yle.fi English news - **Static embed page** - Generate personalized Mastodon profile pages via S3 upload - **Health monitoring** - Built-in health check endpoint ## Available Feed Rotors | Router | Source | Language | Features | |--------|--------|----------|----------| | `yle_fi` | Yle.fi News | fi | Includes hashtags, custom cleaning | | `yle_en` | Yle.fi News | en | AI-generated translated tags | | `the_local` | The Local | en | Includes hashtags | | `taloustaito` | Taloustaito | fi | First 3 articles only | | `sur` | Sur Weather News | en | Includes hashtags | | `hn` | Hacker News | en | Title + link only | | `embed` | Your Mastodon | any | Static profile page generator | ## Tech Stack - **Backend**: FastAPI (Python) - **Database**: None (state stored in memory per request) - **Deployment**: Docker Compose with development hot-reload - **AI Integration**: OpenAI API for tag translation/generation - **Storage**: Amazon S3 for embed pages - **External APIs**: RSS feedparser, Mastodon v1 API, BeautifulSoup ## Setup ### Prerequisites - Docker (compose) - Custom Mastodon instance with API access - OpenAI API key (for `yle_en` rotor only) - AWS credentials (for `embed` rotor S3 upload) ### Development ```bash # Load environment variables # Copy .env.example to .env and fill in: # - mastodon_server: https://your.mastodon.local # - feeds__: {source_name: {url, account_id, token}} # - openai_api_key: sk-your-api-key # - aws_access_key_id / aws_secret_access_key (optional) # Run development server with hot-reload uvicorn app.main:app --host 0.0.0.0 --port 8000 # Or use Docker Compose docker compose up --build ``` ### Configuration Example ```yaml feeds__ : fuengirola__ : url: https://fuengirola.fi/fi/rss/ account_id: 12345678 token: your_mastodon_token hn__ : url: https://hacker-news.ycombinator.com/hlnews.xml account_id: 12345678 token: your_mastodon_token ``` ## Usage ### Health Check ```bash curl http://localhost:8000/health ``` Returns: `{"status": "healthy"}` ### Trigger Manual Feed Update Call specific rotors via HTTP: ```bash curl http://localhost:8000/rss?source=fuengirola ``` See individual router docs for endpoints. ## API Endpoints | Endpoint | Description | |----------|-------------| | `/` | Welcome message | | `/health` | Health check | | `/embed/generate` | Generate static embed page at S3 key | | `/rss?fource=fuengirola` | Fuengirola weather news | | `/rss?source=yle_fi` | Yle.fi Finnish news | | `/rss?source=yle_en` | Yle.fi English news (AI tags) | | `/rss?source=the_local` | The Local articles | | `/rss?source=taloustaito` | Taloustaito economics | | `/rss?source=sur` | Weather news with hashtags | | `/rss?source=hn` | Hacker News | ## License Proprietary - All Rights Reserved for John Ahlroos