Complete digest system
This commit is contained in:
273
README.md
273
README.md
@@ -1,138 +1,231 @@
|
||||
# Zpravobot Digest Bot
|
||||
# Zprávobot AI Digest
|
||||
|
||||
Automatický denní digest z Mastodon postů pomocí Claude AI.
|
||||
Automatický denní digest systém pro Mastodon boty používající Claude AI.
|
||||
|
||||
## Struktura
|
||||
## 🎯 Co to dělá
|
||||
|
||||
```
|
||||
/app/data/zpravobot-digest/
|
||||
├── export-daily.sh # Export postů z DB do CSV
|
||||
├── digest-bot.py # Hlavní script (Claude + Mastodon)
|
||||
├── run-digest.sh # Wrapper s config
|
||||
├── config.env.example # Template konfigurace
|
||||
└── README.md
|
||||
```
|
||||
Systém 3× denně:
|
||||
1. Načte včerejší posty z CSV exportu
|
||||
2. Automaticky je kategorizuje podle témat (🌍 Politika, 🏒 Sport, 🎬 Kultura...)
|
||||
3. Analyzuje pomocí Claude AI
|
||||
4. Publikuje 2-toot thread na Mastodon
|
||||
|
||||
## Instalace
|
||||
### Tři boty s různými styly
|
||||
|
||||
### 1. Klonuj repo
|
||||
| Bot | Čas | Styl | Účel |
|
||||
|-----|-----|------|------|
|
||||
| @zpravobot | 7:30 | Neutrální | Ranní přehled zpráv |
|
||||
| @pozitivni | 12:00 | Pozitivní | Polední motivace |
|
||||
| @sarkasticky | 19:00 | Sarkastický | Večerní komentář |
|
||||
|
||||
## 📋 Požadavky
|
||||
|
||||
- Ruby 3.0+
|
||||
- mastodon-api gem
|
||||
- PostgreSQL s Mastodon daty
|
||||
- Claude API klíč
|
||||
- 3 Mastodon bot tokeny
|
||||
|
||||
## 🚀 Instalace (Cloudron)
|
||||
|
||||
### 1. Připrav prostředí
|
||||
|
||||
V Mastodon terminalu (Cloudron):
|
||||
```bash
|
||||
cd /app/data
|
||||
git clone https://gitea.tvoje-domena.cz/user/zpravobot-digest.git
|
||||
git clone https://gitea.vhsky.cz/user/zpravobot-digest.git
|
||||
cd zpravobot-digest
|
||||
```
|
||||
|
||||
### 2. Konfigurace
|
||||
### 2. Nainstaluj Ruby gem
|
||||
```bash
|
||||
export GEM_HOME=$HOME/.gem
|
||||
export PATH=$GEM_HOME/bin:$PATH
|
||||
gem install mastodon-api --user-install
|
||||
```
|
||||
|
||||
Ověř instalaci:
|
||||
```bash
|
||||
ruby -e "require 'mastodon'; puts 'OK'"
|
||||
```
|
||||
|
||||
### 3. Konfigurace
|
||||
```bash
|
||||
cp config.env.example config.env
|
||||
nano config.env
|
||||
```
|
||||
|
||||
Vyplň:
|
||||
|
||||
- `ANTHROPIC_API_KEY` - Claude API token
|
||||
- `TOKEN_ZPRAVOBOT` - Mastodon token pro @zpravobot
|
||||
- `TOKEN_POZITIVNI` - Mastodon token pro @pozitivni
|
||||
- `TOKEN_SARKASTICKY` - Mastodon token pro @sarkasticky
|
||||
|
||||
### 3. Práva
|
||||
|
||||
Vyplň tokeny:
|
||||
```bash
|
||||
chmod +x export-daily.sh run-digest.sh digest-bot.py
|
||||
export ANTHROPIC_API_KEY="sk-ant-api03-..."
|
||||
export ZPRAVOBOT_TOKEN="token-zde"
|
||||
export POZITIVNI_TOKEN="token-zde"
|
||||
export SARKASTICKY_TOKEN="token-zde"
|
||||
```
|
||||
|
||||
**Jak vytvořit Mastodon tokeny:**
|
||||
1. Přihlásit se jako bot účet
|
||||
2. Settings → Development → New application
|
||||
3. Scopes: `read:statuses` + `write:statuses`
|
||||
4. Zkopírovat "Your access token"
|
||||
|
||||
### 4. Spustitelné práva
|
||||
```bash
|
||||
chmod +x export-daily.sh publish_digest.rb run-digest.sh
|
||||
chmod 600 config.env
|
||||
```
|
||||
|
||||
### 4. Test
|
||||
## 🧪 Testování
|
||||
|
||||
### Dry-run (bez publikace)
|
||||
```bash
|
||||
./export-daily.sh # Export CSV
|
||||
./run-digest.sh zpravobot # Test digestu
|
||||
source config.env
|
||||
./run-digest.sh zpravobot --dry-run
|
||||
./run-digest.sh pozitivni --dry-run
|
||||
./run-digest.sh sarkasticky --dry-run
|
||||
```
|
||||
|
||||
## Použití
|
||||
|
||||
### Manuální spuštění
|
||||
|
||||
### Live test (skutečná publikace)
|
||||
```bash
|
||||
./run-digest.sh zpravobot # Neutrální digest
|
||||
./run-digest.sh pozitivni # Pozitivní digest
|
||||
./run-digest.sh sarkasticky # Sarkastický digest
|
||||
./run-digest.sh zpravobot
|
||||
```
|
||||
|
||||
### Automatizace (Cloudron Cron)
|
||||
Zkontroluj na Mastodonu že se thread publikoval.
|
||||
|
||||
## ⏰ Automatizace (Cron)
|
||||
|
||||
V Cloudron UI → Mastodon app → Cron tab:
|
||||
```
|
||||
0 6 * * * /app/data/zpravobot-digest/export-daily.sh
|
||||
0 7 * * * /app/data/zpravobot-digest/run-digest.sh zpravobot
|
||||
30 7 * * * /app/data/zpravobot-digest/run-digest.sh zpravobot
|
||||
0 12 * * * /app/data/zpravobot-digest/run-digest.sh pozitivni
|
||||
0 18 * * * /app/data/zpravobot-digest/run-digest.sh sarkasticky
|
||||
0 19 * * * /app/data/zpravobot-digest/run-digest.sh sarkasticky
|
||||
```
|
||||
|
||||
## Výstup
|
||||
|
||||
### Export CSV
|
||||
|
||||
- **Lokace:** `/app/data/posts-latest.csv`
|
||||
- **Formát:** `id,created_at,text,uri,url,account_id`
|
||||
- **Rozsah:** Posledních 48 hodin
|
||||
- **Archiv:** `/app/data/archive/posts-YYYY-MM-DD.csv` (7 dní)
|
||||
|
||||
### Digest
|
||||
|
||||
- 2-toot thread (summary + odkazy)
|
||||
- Publikováno na příslušný bot účet
|
||||
- Styl podle bot personality
|
||||
|
||||
## Jak to funguje
|
||||
|
||||
1. **Export (6:00):** SQL → CSV export z PostgreSQL
|
||||
2. **Digest (7:00/12:00/18:00):**
|
||||
- Načte CSV
|
||||
- Pošle data Claude API
|
||||
- Claude analyzuje témata
|
||||
- Publikuje 2-toot thread na Mastodon
|
||||
|
||||
## Struktura souborů
|
||||
**Rozvrh:**
|
||||
- 6:00 - Export postů z databáze
|
||||
- 7:30 - Neutrální digest (@zpravobot)
|
||||
- 12:00 - Pozitivní zprávy (@pozitivni)
|
||||
- 19:00 - Sarkastický komentář (@sarkasticky)
|
||||
|
||||
## 📁 Struktura souborů
|
||||
```
|
||||
/app/data/
|
||||
├── zpravobot-digest/ # Git repo
|
||||
│ ├── export-daily.sh
|
||||
│ ├── digest-bot.py
|
||||
│ ├── run-digest.sh
|
||||
│ ├── config.env # Gitignored!
|
||||
│ └── README.md
|
||||
├── posts-latest.csv # Denní export
|
||||
├── archive/ # 7-denní historie
|
||||
│ └── posts-YYYY-MM-DD.csv
|
||||
├── zpravobot-digest/
|
||||
│ ├── export-daily.sh # CSV export z PostgreSQL
|
||||
│ ├── publish_digest.rb # Hlavní Ruby script
|
||||
│ ├── run-digest.sh # Wrapper (načte config)
|
||||
│ ├── config.env # Tokeny (gitignored!)
|
||||
│ └── config.env.example # Template
|
||||
├── posts-latest.csv # Denní export (2 dny postů)
|
||||
├── archive/
|
||||
│ └── posts-YYYY-MM-DD.csv # 7 denní historie
|
||||
└── logs/
|
||||
└── export.log
|
||||
└── export.log # Logy exportu
|
||||
```
|
||||
|
||||
## Požadavky
|
||||
## 🔧 Ruční použití
|
||||
|
||||
- Python 3.x (v Cloudron Mastodonu je)
|
||||
- Mastodon instance (zpravobot.news)
|
||||
- Claude API přístup
|
||||
- 3× Mastodon bot účty s tokeny
|
||||
### Publikovat digest
|
||||
```bash
|
||||
source config.env
|
||||
./run-digest.sh zpravobot # Neutrální
|
||||
./run-digest.sh pozitivni # Pozitivní
|
||||
./run-digest.sh sarkasticky # Sarkastický
|
||||
```
|
||||
|
||||
## Bezpečnost
|
||||
### Použít specifické datum
|
||||
```bash
|
||||
./run-digest.sh zpravobot --date=2026-01-05 --dry-run
|
||||
```
|
||||
|
||||
- ⚠️ `config.env` obsahuje citlivé tokeny → chmod 600
|
||||
- ⚠️ Nepublikuj `config.env` do Gitu (je v .gitignore)
|
||||
- ✅ DB přístup jen pro export script
|
||||
- ✅ Digest script čte pouze CSV (bez DB přístupu)
|
||||
### Export CSV
|
||||
```bash
|
||||
./export-daily.sh
|
||||
```
|
||||
|
||||
## TODO
|
||||
## 🎨 Vlastnosti
|
||||
|
||||
- [ ] Prompt optimalizace pro Clauda
|
||||
- [ ] Error handling v digest-bot.py
|
||||
- [ ] Notifikace při selhání
|
||||
- [ ] Web dashboard pro statistiky
|
||||
- ✅ **Automatická kategorizace témat** (Politik, Sport, Kultura...)
|
||||
- ✅ **Claude AI analýza** s fallbackem při selhání API
|
||||
- ✅ **Style filtering** - pozitivní bot filtruje negativní zprávy
|
||||
- ✅ **2-toot threads** - summary + odkazy
|
||||
- ✅ **URL extraction** z postů
|
||||
- ✅ **Error handling** a logging
|
||||
- ✅ **Dry-run mode** pro testování
|
||||
|
||||
## Autor
|
||||
## 📊 Monitoring
|
||||
|
||||
Kolega + Claude
|
||||
### Zkontrolovat dnešní běhy
|
||||
```bash
|
||||
# V logu exportu
|
||||
tail -50 /app/data/logs/export.log
|
||||
|
||||
# Ověřit CSV
|
||||
ls -lh /app/data/posts-latest.csv
|
||||
wc -l /app/data/posts-latest.csv
|
||||
```
|
||||
|
||||
### Zkontrolovat publikace
|
||||
|
||||
Navštiv:
|
||||
- https://zpravobot.news/@zpravobot
|
||||
- https://zpravobot.news/@pozitivni
|
||||
- https://zpravobot.news/@sarkasticky
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### "CSV file not found"
|
||||
```bash
|
||||
# Ověř že export běžel
|
||||
ls -la /app/data/posts-latest.csv
|
||||
|
||||
# Spusť manuálně
|
||||
./export-daily.sh
|
||||
```
|
||||
|
||||
### "Missing token"
|
||||
```bash
|
||||
# Ověř environment
|
||||
source config.env
|
||||
echo $ZPRAVOBOT_TOKEN
|
||||
```
|
||||
|
||||
### "The access token is invalid"
|
||||
|
||||
Token vypršel nebo je neplatný. Vygeneruj nový v Mastodon → Settings → Development.
|
||||
|
||||
### Ruby gem chyba
|
||||
```bash
|
||||
# Reinstaluj gem
|
||||
export GEM_HOME=$HOME/.gem
|
||||
export PATH=$GEM_HOME/bin:$PATH
|
||||
gem install mastodon-api --user-install
|
||||
```
|
||||
|
||||
## 💰 Náklady
|
||||
|
||||
- **Claude API**: ~$3/měsíc (3 requesty/den)
|
||||
- **Infrastruktura**: $0 (běží na Mastodon serveru)
|
||||
|
||||
## 🔒 Bezpečnost
|
||||
|
||||
- ✅ Žádný přímý DB přístup (používá CSV export)
|
||||
- ✅ Tokeny v `config.env` (gitignored)
|
||||
- ✅ Read-only přístup k datům
|
||||
- ✅ Minimální oprávnění
|
||||
|
||||
## 📝 Licence
|
||||
|
||||
Open source - vytvořeno pro Zprávobot.news komunitu.
|
||||
|
||||
## 🙏 Credits
|
||||
|
||||
- **Zprávobot.news** - České/Slovenské Mastodon zpravodajství
|
||||
- **Anthropic Claude** - AI analýza
|
||||
- **Mastodon** - Decentralizovaná sociální síť
|
||||
|
||||
---
|
||||
|
||||
**Verze:** 1.0.0
|
||||
**Aktualizováno:** Leden 2026
|
||||
|
||||
Reference in New Issue
Block a user