Zweck
Aus konfigurierten RSS-Feeds und Web-Quellen Artikel abrufen, nach Kategorien
sortieren und als HTML/PDF-Tageszeitung rendern. Artikel werden lokal in
tageszeitung/store.db gespeichert und als gelesen markiert.
Trigger
| Phrase |
Aktion |
| „Erstell meine Tageszeitung" |
Artikel abrufen + PDF rendern |
| „Tageszeitung für heute" |
Heutige Zeitung rendern |
| „Füge Feed hinzu [URL]" |
RSS-Quelle registrieren |
| „Zeig meine Quellen" |
Quellen-Liste ausgeben |
| „Fetch News" |
Alle Quellen abrufen (kein Render) |
Workflow
- Quellen prüfen: Alle aktiven Quellen aus
news_sources lesen.
- Fetch: RSS via feedparser (oder xml.etree-Fallback), Web via urllib.
- Deduplizierung: UNIQUE(source_id, url) verhindert Duplikate.
- Render: Ungelesene Artikel nach Kategorie gruppieren → HTML → PDF.
- Liefern: HTML/PDF im Ausgabe-Ordner ablegen (konfigurierbarer Pfad).
CLI-Einstieg
# Quelle hinzufügen
python tageszeitung_core.py add-source "Heise" rss https://www.heise.de/rss/heise-atom.xml --category tech
# Alle Quellen abrufen
python tageszeitung_core.py fetch
# Tageszeitung rendern (HTML + PDF wenn Edge verfügbar)
python tageszeitung_core.py render [--date 2026-06-22] [--out /pfad/]
# Quellen auflisten
python tageszeitung_core.py sources
# Ungelesene Artikel
python tageszeitung_core.py items [--limit 50] [--category tech]
# Artikel als gelesen markieren
python tageszeitung_core.py read <item_id>
# Alternativer Store (z.B. für Tests)
python tageszeitung_core.py --store /tmp/t.db sources --dry-run
Store
| Eigenschaft |
Wert |
| Typ |
SQLite |
| Pfad (Standard) |
skills/assist/tageszeitung/store.db |
| Override |
--store <pfad> oder Env TAGESZEITUNG_STORE |
| Tabellen |
news_sources, news_items |
Schema (aus BACH news.py portiert)
CREATE TABLE IF NOT EXISTS news_sources (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'rss', -- rss | web
url TEXT NOT NULL UNIQUE,
category TEXT DEFAULT 'Allgemein',
schedule TEXT DEFAULT 'daily',
is_active INTEGER DEFAULT 1,
last_fetched TEXT,
fetch_count INTEGER DEFAULT 0,
error_count INTEGER DEFAULT 0,
last_error TEXT,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS news_items (
id TEXT PRIMARY KEY,
source_id TEXT NOT NULL REFERENCES news_sources(id),
title TEXT NOT NULL,
content TEXT,
summary TEXT,
url TEXT,
author TEXT,
published_at TEXT,
fetched_at TEXT NOT NULL,
is_read INTEGER DEFAULT 0,
category TEXT,
UNIQUE(source_id, url)
);
Haltung
- feedparser wird bevorzugt; ohne feedparser greift ein xml.etree-Fallback für einfache RSS 2.0-Feeds.
- PDF-Erzeugung erfordert
msedge.exe im System-PATH oder MSEDGE_PATH-Env. Ohne Edge wird nur HTML gerendert.
- Maximale Artikel pro Kategorie: konfigurierbar via
assist/prefs.json (tageszeitung_max_per_category, Standard: 5).
Datenschutz
- Artikel-Inhalte bleiben lokal in
store.db.
- Keine externen Analyse-Dienste — nur die konfigurierten RSS-/Web-Quellen werden aufgerufen.
Verwandte Ressourcen
- BACH
hub/news.py — Origin (read-only)
- BACH
hub/_services/newspaper/newspaper_generator.py — Origin (read-only)
Changelog
| Version |
Datum |
Änderung |
| 0.1.0 |
2026-06-22 |
Erstanlage — BACH-Schema portiert, eigener Store, feedparser optional |