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

EPG für Dachregion D/A/CH und UK/US

Hallo
Ich habe genauso in Tivimate epg quelle eingetragen
und zur Wiedergabeliste hinzugefügt.
Nach Aktualisierung bekomme ich immer die Meldung, Stelle sicher dass die epg-url korrekt ist.
Was mache ich falsch?

Achte auf die Groß- und Kleinschreibung und dass nicht irgendwo eine Lücke dazwischen ist..Es ist ein bisschen Tricky, manchmal verselbständigt es sich beim Eingeben.

Sky Select wäre noch schön.
 
gibt's imho keine quelle für epgs zum grabben. nicht, dass ich wüsste.

Magenta Sport und Magenta Musik wären noch nett
welche channels meinst denn genau?

edit: nevermind. seh schon, dass das eigene kanäle sind. habs hinzugefügt und geupdated! myTeamSport 1-18 sind jetzt auch dabei - gehören denke ich auch zu Telekom? Falls wer braucht....
 
Hallo,

Wo gint es die myteam sport epg bitte.

Dürfte ich die bitte bekommen?

LG
Jenny_007
 

is hier drin :)

habs hinzugefügt.
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet von einem Moderator:
@mattmor,

vielen Dank für die umfangreiche Liste. Bei travelxp 4K steht leider da: Keine Daten und bei just cooking und DAZN 1: EPG nicht verfügbar. Höhenrausch ist wohl nicht in der Liste?
Alles andere wird mir angezeigt, super Arbeit und nochmals vielen Dank.

Gruß Bernd60
 
welche software nützt du denn zum schauen wenn ich fragen darf? denn für dazn 1 hab ich eigentlich mehrere instanzen im epg. probier mal ne andere. wenn die quelle wovon ich grabbe, grad nicht mehr ausspuckt, kann ich leider auch nix machen, darum hab ich für viele sender mehrere versionen drinnen. das war mein hintergedanke.

just cooking adde ich
 
Dazn 1 hat kein epg egal welche epg man nimmt von dir, alle Dazn 1 ausprobiert, entweder keine Information oder falsche EPG also wenn z.b. fussball dran ist steht da z.b. Darten u.s.w. Trotz alledem hast du es super gemacht vielen dank.
 
Zuletzt bearbeitet von einem Moderator:
Also Dazn steht bei mir in epg Fussball super cup von 20:40Uhr bis 00:00Uhr obwohl da jetzt Atalanta gegen Paris gezeigt wird. Habe alle deswird epg ausprobiert. Dazn 2 zeigt es richtig an. Ich weiß das Dazn 1 vorhin supercup lief, mal sehen ob um 00:00 NFK extracts läuft, wenn ja dann ist Dazn jetzt doch richtig.

Also es läuft auf Dazn1 jetzt Italienische Liga meinte ich obwohl da super cup steht.

Ne die epg stimmt nicht, Dazn1 hat sendepause und bei mir steht NNFL extracts, alle von deswird.org ausprobiert aber keine Information oder falsche epg was @mattmor mir ja vor 2-3 tagen bestätigt hat
 
Zuletzt bearbeitet von einem Moderator:
jo wie gesagt. ich grab mit webgrab+ und tempest. wenn die quellen falsche infos grabben, kann ich auch nix machen. ich update die config files eh ständig und schaue nach, ob es updates gibt.
 
DAZN kann man direkt von DAZN grabben, dann hat man auch das deutsche EPG wenn man es so einstellt.

Zudem hat man auch gleich das EPG für die Events.
 
Script schreiben.
Mit der API vertraut machen etc.
Das führt hier echt zu weit.
Nutze einfach das, was vorhanden ist.

Nur mal als Beispiel.
So hole ich das wohl für die speziellen Dazn Sender.

NUR ZUR INFO:
DAS SCRIPT FUNKTIONIERT SO NICHT, DA ICH EINIGES HIER WEGGELASSEN HABE!
IST NUR ZU INFORMATIONSZWECKEN!

Python:
import os
import re
import requests
import xml.etree.ElementTree as ET
from xml.dom import minidom
from datetime import datetime, timezone
import warnings


TARGET_CHANNELS = [
    "NBA TV", "NFL Network", "Unbeaten", "MLB Network", "PLL Network",
    "PowerSports World", "Boxing TV", "Matchroom Boxing", "PDC Darts",
    "Billiard TV", "ACL Cornhole TV"
]

def sanitize_id(name: str) -> str:
    base = name.strip().split(".", 1)[0]
    base_clean = re.sub(r'[^A-Za-z0-9]', '', base)
    return f"{base_clean}.de"

def format_xmltv_time(iso_str: str) -> str:
    try:
        dt = datetime.fromisoformat(iso_str.replace("Z", "+00:00"))
        if dt.tzinfo is not None:
            dt = dt.astimezone(timezone.utc)
        else:
            dt = dt.replace(tzinfo=timezone.utc)
        return dt.strftime("%Y%m%d%H%M%S") + " +0000"
    except Exception:
        return ""

def extract_target_tiles(epg_data):
    found = {}
    def match_title(title):
        return any(title.strip().lower() == ch.lower() for ch in TARGET_CHANNELS)

    if isinstance(epg_data, dict):
        if "Tiles" in epg_data and isinstance(epg_data["Tiles"], list):
            for tile in epg_data["Tiles"]:
                title = (tile.get("Title") or tile.get("Name") or "").strip()
                if title and match_title(title):
                    found[title] = tile
        for val in epg_data.values():
            if isinstance(val, list):
                for entry in val:
                    if not isinstance(entry, dict):
                        continue
                    title = (entry.get("Title") or entry.get("Name") or "").strip()
                    if title and match_title(title):
                        found[title] = entry
    elif isinstance(epg_data, list):
        for entry in epg_data:
            if not isinstance(entry, dict):
                continue
            title = (entry.get("Title") or entry.get("Name") or "").strip()
            if title and match_title(title):
                found[title] = entry
    return list(found.values())


        f'https://rail-router.discovery.indazn.com/eu/v10/Rail'
        f'?platform=web&id=Livetvschedule&country={country}&languageCode={country}'
    )
    resp = requests.get(url, headers=headers, proxies=proxies, verify=False, timeout=10)
    resp.raise_for_status()
    return resp.json()

def build_xmltv(epg_data):
    tiles = extract_target_tiles(epg_data)
    if not tiles:
        print("No matching target channels found in EPG JSON.")
        return
    tv = ET.Element("tv", {"generator-info-name": "dazn_epg_from_json"})

    channel_map = {}
    for tile in tiles:
        title = (tile.get("Title") or tile.get("Name") or "").strip()
        if not title:
            continue
        ch_id = sanitize_id(title)
        channel_map[title] = ch_id
        ch_elem = ET.SubElement(tv, "channel", {"id": ch_id})
        dn = ET.SubElement(ch_elem, "display-name")
        dn.text = title
        desc = tile.get("Description") or tile.get("LongDescription") or tile.get("ShortDescription")
        if desc:
            d = ET.SubElement(ch_elem, "desc")
            d.text = desc

    for tile in tiles:
        title = (tile.get("Title") or tile.get("Name") or "").strip()
        ch_id = channel_map.get(title)
        if not ch_id:
            continue
        linear = tile.get("LinearSchedule", {}) or {}
        programs = []
        if linear.get("Now"):
            programs.append(linear["Now"])
        if linear.get("Next"):
            programs.append(linear["Next"])
        if isinstance(linear.get("Later"), list):
            programs.extend(linear["Later"])
        if not programs:
            for key in ("Programs", "Programmes", "Items", "Entries"):
                alt = tile.get(key)
                if isinstance(alt, list):
                    programs.extend(alt)
        for prog in programs:
            if not isinstance(prog, dict):
                continue
            prog_title = (prog.get("Title") or "").strip()
            episode = (prog.get("EpisodeTitle") or "").strip()
            full_title = prog_title if not episode else f"{prog_title} - {episode}"
            desc = (prog.get("Description") or "").strip()
            start = prog.get("Start")
            end = prog.get("End")
            if not start or not end:
                continue
            start_fmt = format_xmltv_time(start)
            end_fmt = format_xmltv_time(end)
            if not start_fmt or not end_fmt:
                continue
            p_attrib = {"start": start_fmt, "stop": end_fmt, "channel": ch_id}
            p_elem = ET.SubElement(tv, "programme", p_attrib)
            t_elem = ET.SubElement(p_elem, "title")
            t_elem.text = full_title or prog_title or "Unknown"
            if desc:
                d_elem = ET.SubElement(p_elem, "desc")
                d_elem.text = desc
            genres = prog.get("Genre") or prog.get("Genres") or []
            if isinstance(genres, list):
                for g in genres:
                    if isinstance(g, dict):
                        name = g.get("name") or g.get("Name")
                    else:
                        name = str(g)
                    if name:
                        c = ET.SubElement(p_elem, "category")
                        c.text = name
            elif isinstance(genres, str) and genres.strip():
                c = ET.SubElement(p_elem, "category")
                c.text = genres.strip()
            year = prog.get("EventYear") or prog.get("Year")
            if year:
                y = ET.SubElement(p_elem, "year")
                y.text = str(year)

    rough = ET.tostring(tv, encoding="utf-8")
    reparsed = minidom.parseString(rough)
    pretty = reparsed.toprettyxml(indent="  ")
    try:
        base_dir = os.path.dirname(os.path.abspath(__file__))
        target_dir = os.path.abspath(os.path.join(base_dir, "..", "manager", "temp"))
        os.makedirs(target_dir, exist_ok=True)
        target_path = os.path.join(target_dir, "daznepg.xml")
        with open(target_path, "w", encoding="utf-8") as f:
            f.write(pretty)
        try:
            import pwd, grp
            uid = pwd.getpwnam("http").pw_uid
            gid = grp.getgrnam("http").gr_gid
            os.chown(target_path, uid, gid)
        except Exception as e:
            print(f"Warning: could not chown to http:http: {e}")
        try:
            os.chmod(target_path, 0o755)
        except Exception as e:
            print(f"Warning: could not chmod 755: {e}")
        print(f"Written XMLTV EPG to {target_path} (owner http:http, mode 755 attempted)")
    except Exception as e:
        print(f"Failed writing XMLTV: {e}")

def main():
    

if __name__ == "__main__":
    main()
 
Zuletzt bearbeitet:
@mattmor,
ich habe Televizio und auch die Robin Hood Variante. Bei beiden das gleiche. just cooking kommt jetzt, DAZN 1 bleibt leider leer, kann man man aber vernachlässigen;).

Gruß Bernd60
 
Zurück
Oben