Füge Cron-Version des SERMAN RSS Feed Generators hinzu, einschließlich automatischem Setup, Logging und Quiet-Mode-Unterstützung. Entferne das Setup-Script und aktualisiere die README.md für bessere Benutzeranleitung.

This commit is contained in:
2025-07-06 10:08:56 +02:00
parent fd9b7fc55b
commit f1078d825a
4 changed files with 434 additions and 126 deletions

113
main.py
View File

@ -2,12 +2,68 @@
"""
SERMAN RSS Feed Generator - Lokale Version
Generiert RSS-Feeds aus lokalen MP3-Dateien für Podcast-Apps.
Optimiert für Cron-Jobs.
"""
from local_podcast_generator import LocalPodcastGenerator
import argparse
import sys
import os
import contextlib
from io import StringIO
class QuietLocalPodcastGenerator(LocalPodcastGenerator):
"""Erweiterte Version des Generators mit Quiet-Mode-Unterstützung."""
def __init__(self, audio_dir="../httpdocs/_audio", output_file="podcast_feed.xml",
base_url="https://www.serman.club", quiet=False):
super().__init__(audio_dir, output_file, base_url)
self.quiet = quiet
self.errors = []
def log(self, message):
"""Logging-Funktion die das quiet-Flag berücksichtigt."""
if not self.quiet:
print(message)
def log_error(self, message):
"""Error-Logging das immer ausgegeben wird."""
print(message)
self.errors.append(message)
def get_mp3_files(self):
"""Überschreibt die Original-Methode für besseres Logging."""
from pathlib import Path
audio_path = Path(self.audio_dir)
if not audio_path.exists():
self.log_error(f"❌ Audio-Verzeichnis '{self.audio_dir}' existiert nicht!")
return []
mp3_files = list(audio_path.glob("*.mp3"))
self.log(f"🎵 {len(mp3_files)} MP3-Dateien gefunden in '{self.audio_dir}/'")
# Sortiere nach Änderungsdatum (neueste zuerst)
mp3_files.sort(key=lambda x: x.stat().st_mtime, reverse=True)
return mp3_files
def create_rss_feed_quiet(self, podcast_title="SERMAN - Organic House Podcast",
podcast_description=None, podcast_author="SERMAN"):
"""RSS-Feed-Erstellung mit unterdrückter Ausgabe für Cron-Jobs."""
if self.quiet:
# Unterdrücke alle print-Ausgaben während der Feed-Erstellung
with contextlib.redirect_stdout(StringIO()), contextlib.redirect_stderr(StringIO()):
try:
return super().create_rss_feed(podcast_title, podcast_description, podcast_author)
except Exception as e:
self.log_error(f"❌ Fehler beim Erstellen des RSS-Feeds: {e}")
return False
else:
# Normale Ausgabe
return super().create_rss_feed(podcast_title, podcast_description, podcast_author)
def main():
@ -18,50 +74,59 @@ def main():
help="Ausgabedatei für den RSS-Feed (Standard: serman_podcast.xml)")
parser.add_argument("-u", "--base-url", default="https://www.serman.club",
help="Basis-URL für Audio-Dateien (Standard: https://www.serman.club)")
parser.add_argument("--serve", action="store_true",
help="Startet automatisch einen HTTP-Server nach der Generierung")
parser.add_argument("--port", type=int, default=8087,
help="Port für den HTTP-Server (Standard: 8087)")
parser.add_argument("-t", "--title", default="SERMAN - Organic House Podcast",
help="Titel des Podcasts")
parser.add_argument("--author", default="SERMAN",
help="Autor des Podcasts")
parser.add_argument("-q", "--quiet", action="store_true",
help="Unterdrückt Ausgaben (nützlich für Cron-Jobs)")
args = parser.parse_args()
print("🎵 SERMAN RSS Feed Generator - Lokale Version")
print("=" * 50)
# Unterdrücke Ausgaben wenn --quiet gesetzt ist
def log(message):
if not args.quiet:
print(message)
log("🎵 SERMAN RSS Feed Generator - Lokale Version")
log("=" * 50)
# Prüfe ob Audio-Verzeichnis existiert
if not os.path.exists(args.audio_dir):
print(f"❌ Audio-Verzeichnis '{args.audio_dir}' existiert nicht!")
print(f"💡 Erstelle das Verzeichnis und lege deine MP3-Dateien dort ab.")
log(f"❌ Audio-Verzeichnis '{args.audio_dir}' existiert nicht!")
log(f"💡 Erstelle das Verzeichnis und lege deine MP3-Dateien dort ab.")
return 1
# Erstelle den Generator
generator = LocalPodcastGenerator(
generator = QuietLocalPodcastGenerator(
audio_dir=args.audio_dir,
output_file=args.output,
base_url=args.base_url
base_url=args.base_url,
quiet=args.quiet
)
# Generiere den RSS-Feed
print(f"📂 Scanne '{args.audio_dir}/' nach MP3-Dateien...")
success = generator.create_rss_feed(
podcast_title="SERMAN - Organic House Podcast",
podcast_author="SERMAN"
log(f"📂 Scanne '{args.audio_dir}/' nach MP3-Dateien...")
success = generator.create_rss_feed_quiet(
podcast_title=args.title,
podcast_author=args.author
)
if not success:
print("❌ Fehler beim Erstellen des RSS-Feeds!")
log("❌ Fehler beim Erstellen des RSS-Feeds!")
# Zeige Fehler auch im quiet-Modus
if args.quiet and hasattr(generator, 'errors') and generator.errors:
for error in generator.errors:
print(error)
return 1
print("\n🎉 RSS-Feed erfolgreich erstellt!")
print(f"📄 Datei: {args.output}")
print(f"🌐 URL: {args.base_url}/{args.output}")
log("\n🎉 RSS-Feed erfolgreich erstellt!")
log(f"📄 Datei: {args.output}")
log(f"🌐 URL: {args.base_url}/{args.output}")
if args.serve:
print("\n🚀 Starte HTTP-Server...")
generator.serve_feed(args.port)
else:
print(f"\n💡 Zum Starten des Servers: python main.py --serve")
print(f"💡 Oder direkt: python local_podcast_generator.py --serve")
# Im quiet-Modus nur Erfolg bei Fehlern ausgeben
if args.quiet and success:
print(f"✅ RSS-Feed erfolgreich erstellt: {args.output}")
return 0