Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Python Script / Eigene IPTV M3U aus verschiedenen Listen aktualisieren

Hallöchen,

Ich bin`s nochmal.


Dein script fügt ja wunderbar die m3u zusammen. (y)
Ist es mit dem Script möchlich zwei EPG.xml URL:´ zusammen zufügen, für die NEU erstellte m3u???

Gruß icman75
 
nein, das kann das Script nicht

schonmal was von ChatGPT gehört?


(ungeprüft)
Python:
import requests
import xml.etree.ElementTree as ET
import gzip
import io
import os

# Liste der Quellen (URLs oder lokale Dateien, auch .gz)
sources = [
    "http://xyz.com/epg1.xml.gz",  # Gzip-komprimierte Datei
    "https://abc.com/epg2.xml",     # Normale XML-Datei
    "/home/user/epg3.xml.gz"       # Lokale Gzip-Datei
]

# Zielpfad für die neue Datei
output_file = "/var/www/html/epg/merged_epg.xml"


def fetch_epg(source):
    """Lädt eine EPG-Datei von einer URL oder lokalem Pfad, unterstützt auch .gz Dateien."""
    if source.startswith("http://") or source.startswith("https://"):
        response = requests.get(source, stream=True)
        if response.status_code == 200:
            if source.endswith(".gz"):
                with gzip.GzipFile(fileobj=io.BytesIO(response.content)) as f:
                    return ET.parse(f).getroot()
            else:
                return ET.fromstring(response.content)
        else:
            print(f"Fehler beim Abrufen von {source}: HTTP {response.status_code}")
            return None
    else:
        try:
            if source.endswith(".gz"):
                with gzip.open(source, "rb") as f:
                    return ET.parse(f).getroot()
            else:
                return ET.parse(source).getroot()
        except Exception as e:
            print(f"Fehler beim Laden der Datei {source}: {e}")
            return None

def merge_epg(sources, output_path):
    """Fügt mehrere EPG-Dateien zusammen und speichert sie im angegebenen Ordner."""
    root = ET.Element("tv")  # Neues XMLTV-Root-Element
   
    for source in sources:
        epg = fetch_epg(source)
        if epg is None:
            continue  # Überspringe fehlerhafte Quellen

        # Sender hinzufügen (falls noch nicht vorhanden)
        for channel in epg.findall("channel"):
            root.append(channel)

        # Programme hinzufügen
        for programme in epg.findall("programme"):
            root.append(programme)

    # Sicherstellen, dass der Zielordner existiert
    os.makedirs(os.path.dirname(output_path), exist_ok=True)

    # Neue XML-Datei speichern
    tree = ET.ElementTree(root)
    tree.write(output_path, encoding="utf-8", xml_declaration=True)
    print(f"Neue EPG-Datei gespeichert: {output_path}")


# EPGs zusammenführen und speichern
merge_epg(sources, output_file)
 
@iceman75

Musst mal meine Beiträge durchwühlen.
Da gibt ein Script mit allen Rytec Sources, die du dir dann nach Belieben zusammenstellen kannst.
 
Vielen Dank, für deine Antwort.

Manchmal ist es wirklich hilfreich, mit anderen Usern zu kommunizieren und Ideen auszutauschen. Ein Foren bieten halt den Vorteil, dass man verschiedene Perspektiven auf ein und dasselbe Thema bekommt und von den Erfahrungen anderer profitieren kann. Ich suche gerne den Kontakt zu anderen Usern, um Fragen zu stellen und Antworten zu erhalten. Der Austausch in einer Community kann oft neue Einsichten und Inspiration bieten, die eine KI allein nicht geben kann. ;) (in meinen Augen gesehen)
Die KI-Chat GPT kann helfen, wenn man spezifische Fragen hat oder Unterstützung zu einem bestimmten Thema benötigt, jedoch ziehe ich den Austausch im DEB Forum vor.


Besten Gruß iceman75
 
Die KI-Chat GPT kann helfen,
da ich im Grunde fast keine Ahnung von Python habe, lasse ich ChatGPT alle meine Scripte erstellen :LOL:

So auch das im Eingangspost dieses Threads.

Aber es ist richtig, man muss ChatGPT wirklich die "richtigen" Fragen stellen, sonst wird das auch ein langer Weg.
 
Hihi

Deswegen stelle ich ja hier paar Fragen. Vieles ist bei mir learning by doing, damit bin ich oft sehr gut gefahren. Nur ab und an kommt es auch bei mir vor, dass man eine kleine Gedankenblockade hat.
 
hier nun ein getestetes Script

Python:
# EPG Quellen zusammenführen
# by Smiley007 Version 1.0 22.02.2025

import requests
import xml.etree.ElementTree as ET
import gzip
import io
import os


# Liste der Quellen (URLs oder lokale Dateien, auch .gz)
sources = [
    "http://xyz.com/epg1.xml.gz",  # Gzip-komprimierte Datei
    "http://abc.com/epg2.xml",     # Normale XML-Datei
    "/home/user/epg3.xml.gz"       # Lokale Gzip-Datei
]

# Zielpfad für die komprimierte Datei
output_file = "/var/www/html/epg/merged_epg.xml.gz"

def fetch_epg(source):
    """Lädt eine EPG-Datei von einer URL oder lokalem Pfad, unterstützt auch .gz Dateien."""
    if source.startswith("http://") or source.startswith("https://"):
        response = requests.get(source, stream=True)
        if response.status_code == 200:
            if source.endswith(".gz"):
                with gzip.GzipFile(fileobj=io.BytesIO(response.content)) as f:
                    return ET.parse(f).getroot()
            else:
                return ET.fromstring(response.content)
        else:
            print(f"Fehler beim Abrufen von {source}: HTTP {response.status_code}")
            return None
    else:
        try:
            if source.endswith(".gz"):
                with gzip.open(source, "rb") as f:
                    return ET.parse(f).getroot()
            else:
                return ET.parse(source).getroot()
        except Exception as e:
            print(f"Fehler beim Laden der Datei {source}: {e}")
            return None

def merge_epg(sources, output_path):
    """Fügt mehrere EPG-Dateien zusammen und speichert sie als GZIP-komprimierte XML-Datei."""
    root = ET.Element("tv")  # Neues XMLTV-Root-Element
    
    for source in sources:
        epg = fetch_epg(source)
        if epg is None:
            continue  # Überspringe fehlerhafte Quellen

        # Sender hinzufügen (falls noch nicht vorhanden)
        for channel in epg.findall("channel"):
            root.append(channel)

        # Programme hinzufügen
        for programme in epg.findall("programme"):
            root.append(programme)

    # Sicherstellen, dass der Zielordner existiert
    os.makedirs(os.path.dirname(output_path), exist_ok=True)

    # XML als String speichern
    xml_str = ET.tostring(root, encoding="utf-8", xml_declaration=True)

    # XML GZIP-komprimiert speichern
    with gzip.open(output_path, "wb") as f:
        f.write(xml_str)

    print(f"Neue GZIP-komprimierte EPG-Datei gespeichert: {output_path}")

# EPGs zusammenführen und speichern
merge_epg(sources, output_file)
 
Coole Sache . Vielen Dank so wünscht man sich seinen Top Support

Funktioniert ganz gut(y)

1. Script von @ Smiley007 in den Zeilen 13, 14 und 15 anpassen und unter merge_epg.py Speichern
2. auf dem Server unter /var/www/html/ einen Neuen Ordner Anlegen /epg
3. merge_epg.py Datei nach /var/www/html/epg kopieren
4. zusätliche Pakete installieren,

sudo apt update && upgrade
sudo apt install python3
sudo apt install gzip
sudo apt install python3-pip

sudo apt install python3-requests

5. Script ausführen mit
cd /var/www/html/epg && python3 merge_epg.py


6. neu erstellte xml liegt im Ordner /var/www/html/epg
 
Zuletzt bearbeitet:
da ich im Grunde fast keine Ahnung von Python habe, lasse ich ChatGPT alle meine Scripte erstellen :LOL:

So auch das im Eingangspost dieses Threads.

Aber es ist richtig, man muss ChatGPT wirklich die "richtigen" Fragen stellen, sonst wird das auch ein langer Weg.

Wo bekommt man denn die ungedrosselte Version von Chatgpt? wenn ich Fragen zu iptv oder macs stelle kommen nur Schwachsinnsantworten und Belehrungen wie schlimm das alles ist. Würde der Pc mit der Ki vor mir stehen ich hätte schon längst den Stecker gezogen.
 
Zurück
Oben