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)