Automatisches Frühwarnsystem für Reddit-Aktien-Hypes
Crawlt r/wallstreetbets nach Ticker-Erwähnungen, analysiert Trends und sendet Discord-Alerts bei ungewöhnlicher Aktivität.
Features • Quick Start • Docker • Konfiguration • Dokumentation
- Durchsucht konfigurierbare Subreddits (wallstreetbets, wallstreetbetsGER, etc.)
- Regex-basierte Ticker-Erkennung in Posts & Kommentaren
- Parallel-Processing für schnelle Analyse
- Deduplizierung und Blacklist-Filter
- Kursdaten: Live-Kurse + Pre/After-Market von Yahoo Finance
- Trend-Analyse: 1h, 24h, 7d Kursveränderungen
- News-Integration: Aktuelle Headlines via NewsAPI
- Historischer Vergleich: Erkennt signifikante Anstiege
- Discord Rich Embeds mit Farbcodierung und strukturierten Feldern
- Benachrichtigungen bei ungewöhnlicher Aktivität
- Konfigurierbare Schwellwerte (Nennungen, Kursänderungen)
- Kompaktes Format mit klickbaren Links
- Silent Status-Updates (Heartbeat ohne Ping)
- Vollständige Docker-Unterstützung
- Automatische Releases via GitHub Actions
- Semantic Versioning mit Auto-Increment
- Persistente Daten & Caching
# 1. Repository klonen
git clone https://github.com/fgrfn/reddit-wsb-crawler.git
cd reddit-wsb-crawler
# 2. Config erstellen
cp config/.env.example config/.env
nano config/.env # API-Keys eintragen (siehe unten)
# 3. Interaktives Start-Script verwenden
./start.sh
# → Wähle Option 2 (Scheduler starten)
# → Gib Intervall ein (Standard: 30 Minuten)
# Oder manuell starten:
# Einmaliger Crawl
docker-compose up
# Scheduler mit 30-Min-Intervall (empfohlen)
CRAWL_INTERVAL_MINUTES=30 docker-compose --profile scheduler up -d
# 4. Logs anschauen
docker-compose logs -f wsb-crawler-schedulerOder Pre-built Image nutzen:
# Latest Version von GitHub Container Registry
docker pull ghcr.io/fgrfn/reddit-wsb-crawler:latest
# Mit spezifischer Version für Reproduzierbarkeit
docker pull ghcr.io/fgrfn/reddit-wsb-crawler:v1.3.0# 1. Repository klonen
git clone https://github.com/fgrfn/reddit-wsb-crawler.git
cd reddit-wsb-crawler
# 2. Virtual Environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 3. Dependencies installieren
pip install -r requirements.txt
# 4. Config erstellen
cp config/.env.example config/.env
nano config/.env # API-Keys eintragen
# 5. Crawler starten
python src/run_crawler_headless.py| Variable | Beschreibung | Wo bekomme ich das? |
|---|---|---|
REDDIT_CLIENT_ID |
Reddit API Client ID | reddit.com/prefs/apps |
REDDIT_CLIENT_SECRET |
Reddit API Secret | reddit.com/prefs/apps |
REDDIT_USER_AGENT |
User Agent String | z.B. python:wsb-crawler:v1.0.0 (by /u/your_username) |
NEWSAPI_KEY |
NewsAPI Key | newsapi.org/register |
DISCORD_WEBHOOK_URL |
Discord Webhook URL | Discord Server Settings → Integrations → Webhooks |
# Subreddits (komma-separiert)
SUBREDDITS=wallstreetbets,wallstreetbetsGER,mauerstrassenwetten
# News-Einstellungen
NEWSAPI_LANG=en # Sprache für News (en, de, etc.)
NEWSAPI_WINDOW_HOURS=48 # Zeitfenster für News in Stunden
---
### Alert-Bedingungen
Ein Alert wird ausgelöst, wenn:
- **Neue Ticker:** ≥ 20 Nennungen (konfigurierbar: `ALERT_MIN_ABS`)
- **Bekannte Ticker:**
- Anstieg ≥ 10 Nennungen (`ALERT_MIN_DELTA`)
- **UND** ≥ 200% des vorherigen Werts (`ALERT_RATIO`)
- Optional: Kursveränderung ≥ 5% (`ALERT_MIN_PRICE_MOVE`)
Pro Crawl werden max. 3 Alerts gesendet (`ALERT_MAX_PER_RUN`) mit 4h Cooldown pro Ticker (`ALERT_COOLDOWN_H`)
---
## 🐳 Docker
### Pre-built Images
Das Projekt stellt automatisch gebaute Docker Images bereit:
| Tag | Beschreibung | Verwendung |
|-----|--------------|------------|
| `latest` | Neueste Version vom main branch | Empfohlen für Production |
| `v1.0.1` | Spezifische Release-Version | Für Reproduzierbarkeit |
| `v1.0` | Minor-Version (automatisch) | Latest Patch einer Minor-Version |
```bash
# Latest Version
docker pull ghcr.io/fgrfn/reddit-wsb-crawler:latest
docker run --env-file config/.env \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
ghcr.io/fgrfn/reddit-wsb-crawler:latest
# Spezifische Version für Reproduzierbarkeit
docker pull ghcr.io/fgrfn/reddit-wsb-crawler:v1.0.1Das Repo enthält ein vollständiges docker-compose.yml mit allen Konfigurationen.
1. Einmalig ausführen:
# Mit lokalem Build
docker-compose up
# Mit Pre-built Image
docker-compose -f docker-compose.prod.yml up2. Mit Scheduler (regelmäßige Crawls):
# Führt Crawler im Intervall aus (Standard: alle 60 Minuten)
docker-compose --profile scheduler up -d
# Logs anschauen
docker-compose logs -f wsb-crawler-scheduler
# Intervall anpassen (z.B. 15 Minuten)
CRAWL_INTERVAL=900 docker-compose --profile scheduler up -d3. Beispiel docker-compose.prod.yml:
version: '3.8'
services:
wsb-crawler:
image: ghcr.io/fgrfn/reddit-wsb-crawler:latest
container_name: wsb-crawler
restart: unless-stopped
environment:
- TZ=Europe/Berlin
env_file:
- config/.env
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./config/.env:/app/config/.env:ro
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"Erstelle config/.env mit folgenden Variablen:
Pflicht-Felder:
# Reddit API (https://www.reddit.com/prefs/apps)
REDDIT_CLIENT_ID=your_client_id_here
REDDIT_CLIENT_SECRET=your_client_secret_here
REDDIT_USER_AGENT=python:wsb-crawler:v1.0.0 (by /u/yourusername)
# NewsAPI (https://newsapi.org/register)
NEWSAPI_KEY=your_newsapi_key_here
# Discord Webhook
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_URLOptional (mit Defaults):
# Subreddits (komma-separiert)
SUBREDDITS=wallstreetbets,wallstreetbetsGER
# News-Einstellungen
NEWSAPI_LANG=en # Sprache (en, de, fr, etc.)
NEWSAPI_WINDOW_HOURS=48 # Zeitfenster für News
# Discord Status-Updates
DISCORD_STATUS_UPDATE=true # Silent Status (ohne @everyone)
# Alert-Schwellwerte
ALERT_MIN_ABS=20 # Min. Nennungen für neue Ticker
ALERT_MIN_DELTA=10 # Min. Anstieg für bekannte Ticker
ALERT_RATIO=2.0 # Min. Faktor (200% des Vorwerts)
ALERT_MIN_PRICE_MOVE=5.0 # Min. Kursänderung in %
ALERT_MAX_PER_RUN=3 # Max. Alerts pro Crawl
ALERT_COOLDOWN_H=4 # Cooldown pro Ticker in Stunden
# Scheduler (nur für --profile scheduler)
CRAWL_INTERVAL=3600 # Intervall in Sekunden (60 Min.)Vollständige Vorlage: config/.env.example
Mehr Details: DOCKER.md
# Docker
docker-compose logs -f
docker-compose logs --tail=50 wsb-crawler
# Lokal
tail -f logs/crawler.loglogs/crawler.log- Hauptloglogs/resolver.log- Ticker-Namensauflösunglogs/openai_costs.log- API-Kosten (falls verwendet)logs/archive/- Archivierte Logs
MIT License - siehe LICENSE
Entwickelt mit ❤️ für die WSB-Community
⭐ Wenn dir dieses Projekt gefällt, gib uns einen Star!