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) -
Gute Idee! Ein Crawler für RTS.ch und RSI.ch würde MediathekView super ergänzen.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden