Vorschlag > Python Script > rss nach m3u8
-
Hallo,
ich habe gester mit der KI das Script erstellt, wollte es euch zu Verfügung stellen. Das Script läuft bei mir auf einem aktuelle Ubuntu mit Python. Die m3u8 laufen in Kodi oder IPTV apps.from flask import Flask, render_template_string, send_from_directory import feedparser import os from crontab import CronTab from datetime import datetime app = Flask(__name__) # Liste der Feed-URLs mit Dateinamen und Anzahl der Einträge FEEDS = [ ("12", "wiso.m3u8", "https://mediathekviewweb.de/feed?query=!ZDF%20wiso%20%3E20W"), ("2", "Nachrichten.m3u8", "http://www.zdf.de/rss/podcast/video/zdf/nachrichten/heute-19-uhr"), ("5", "lanz.m3u8", "https://mediathekviewweb.de/feed?query=!ZDF%20lanz%20%3E40"), ("20", "lesch.m3u8", "https://mediathekviewweb.de/feed?query=!ZDF%20lesch%20%3E40"), ("10", "nano.m3u8", "https://mediathekviewweb.de/feed?query=!3sat%20nano%20%3C30"), ("10", "wunderschoen.m3u8", "https://mediathekviewweb.de/feed?query=!WDR%20Wundersch%C3%B6n"), ("20", "arte_wissenschaft.m3u8", "https://mediathekviewweb.de/feed?query=!ARTE%20Wissenschaft%20%3E30"), ("20", "zdf_filme.m3u8", "https://mediathekviewweb.de/feed?query=!ZDF%20Filme"), ("30", "regenwald.m3u8","https://mediathekviewweb.de/feed?query=Regenwald%20%3E30"), ("20", "google.m3u8","https://mediathekviewweb.de/feed?query=Google%20%3E30"), ("30", "terrax.m3u8","https://mediathekviewweb.de/feed?query=Terra%20X%20%3E30"), ("20", "ki.m3u8","https://mediathekviewweb.de/feed?query=Kuenstliche%20Intelligenz%20%3E30"), ("20", "norwegen.m3u8","https://mediathekviewweb.de/feed?query=*norwegen%20fjorde%20%3E30"), ("5", "tagesschau.m3u8","https://mediathekviewweb.de/feed?query=!ARD%20Tagesschau"), ("30", "ard_filme.m3u8","https://mediathekviewweb.de/feed?query=!ARD%20Filme"), ("20", "alena.m3u8","https://mediathekviewweb.de/feed?query=Alena%20Buyx"), ("5", "wetter.m3u8","https://mediathekviewweb.de/feed?query=Wetter%20vor%20acht"), ("5", "hessen.m3u8","https://mediathekviewweb.de/feed?query=hessenschau"), ("5", "wetter2.m3u8","https://mediathekviewweb.de/feed?query=Morgenmagazin%20wetter") # Hier weitere Einträge einfügen ] def fetch_feed_items(url, max_entries): feed = feedparser.parse(url) items = [] for entry in feed.entries: if hasattr(entry, 'enclosures') and entry.enclosures: items.append({ 'title': entry.title, 'url': entry.enclosures[0].href }) if len(items) >= max_entries: break return items def generate_m3u8_playlists(): for max_entries, playlist_file, url in FEEDS: items = fetch_feed_items(url, int(max_entries)) with open(playlist_file, 'w', encoding='utf-8') as f: f.write("#EXTM3U\n") f.write("#EXTVLCOPT:http-reconnect=true\n") for item in items: f.write(f"#EXTINF:-1,{item['title']}\n") f.write(f"{item['url']}\n") @app.route('/') def index(): # HTML-Menü mit Links zu den Playlists template = """ <!DOCTYPE html> <html> <head> <title>Playlist-Menü</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } h1 { color: #333; } ul { list-style-type: none; padding: 0; } li { margin: 10px 0; } a { text-decoration: none; color: #0066cc; font-size: 18px; } a:hover { text-decoration: underline; } </style> </head> <body> <h1>Playlist-Menü</h1> <p>Wähle eine Playlist aus:</p> <ul> {% for max_entries, playlist_file, _ in FEEDS %} <li> <a href="/{{ playlist_file }}">{{ playlist_file.replace('.m3u8', '').replace('_', ' ').title() }} ({{ max_entries }} Einträge)</a> </li> {% endfor %} </ul> </body> </html> """ return render_template_string(template, FEEDS=FEEDS) @app.route('/<playlist_name>') def serve_playlist(playlist_name): return send_from_directory('.', playlist_name) def setup_cron_job(): cron = CronTab(user=True) job = cron.new(command=f'cd {os.getcwd()} && /usr/bin/python3 {os.path.abspath(__file__)} --update') job.setall('0 3 * * *') # Jeden Tag um 3 Uhr cron.write() if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('--update', action='store_true') args = parser.parse_args() if args.update: print(f"[{datetime.now()}] Aktualisiere Playlists...") generate_m3u8_playlists() else: # Initial Playlists generieren generate_m3u8_playlists() # Cron-Job einrichten setup_cron_job() print("Server gestartet auf http://0.0.0.0:5555") print("Verfügbare Playlists:") for max_entries, playlist_file, _ in FEEDS: print(f"- http://0.0.0.0:5555/{playlist_file} ({max_entries} Einträge)") app.run(host='0.0.0.0', port=5555)