Skip to content
  • Kategorien
  • Aktuell
  • Tags
  • Beliebt
  • Benutzer
  • Gruppen
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
MediathekView Logo

MediathekView-Forum

  1. Übersicht
  2. Ideen, Anregungen, Verbesserungen
  3. Vorschlag > Python Script > rss nach m3u8

Vorschlag > Python Script > rss nach m3u8

Geplant Angeheftet Gesperrt Verschoben Ideen, Anregungen, Verbesserungen
1 Beiträge 1 Kommentatoren 55 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    dater
    schrieb zuletzt editiert von
    #1

    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)
    
    
    
    1 Antwort Letzte Antwort

    18

    Online

    6.8k

    Benutzer

    6.3k

    Themen

    40.1k

    Beiträge
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Kategorien
    • Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen