Dateien nach "/" hochladen

This commit is contained in:
2026-02-05 14:40:03 +01:00
parent bfb4ecaa19
commit ee31e3f119
2 changed files with 71 additions and 0 deletions

70
convertjson2xmltv-gz.py Normal file
View File

@@ -0,0 +1,70 @@
import json
import xml.etree.ElementTree as ET
from datetime import datetime
import gzip
import io
import re
def clean_html(text):
if not text:
return ""
# <br> zu Zeilenumbruch machen
text = re.sub(r'<br\s*/?>', '\n', text, flags=re.IGNORECASE)
# alle anderen HTML-Tags entfernen
text = re.sub(r'<.*?>', '', text)
return text.strip()
def format_time(xmltv_time):
dt = datetime.fromisoformat(xmltv_time.replace('Z', '+00:00'))
return dt.strftime('%Y%m%d%H%M%S %z')
def convert_to_xmltv(json_data):
tv = ET.Element("tv", {"generator-info-name": "Pluxbox EPG Exporter"})
# Einmaliger Channel-Eintrag
channel = ET.SubElement(tv, "channel", {"id": "stadtfilter"})
display_name = ET.SubElement(channel, "display-name")
display_name.text = "Radio Stadtfilter"
for day in json_data["days"]:
for item in day["results"]:
programme = ET.SubElement(tv, "programme", {
"start": format_time(item["start"]),
"stop": format_time(item["stop"]),
"channel": "stadtfilter"
})
ET.SubElement(programme, "title", {"lang": "de"}).text = item["title"]
desc = item.get("description", "")
if desc:
#clean_desc = clean_html(desc)
ET.SubElement(programme, "desc", {"lang": "de"}).text = clean_html(desc)
if item.get("language"):
ET.SubElement(programme, "language").text = item["language"]
if item.get("genre_id"):
ET.SubElement(programme, "category", {"lang": "de"}).text = str(item["genre_id"])
# Presenter
if item.get("presenters"):
credits = ET.SubElement(programme, "credits")
for presenter in item["presenters"]:
ET.SubElement(credits, "presenter").text = presenter["name"]
return ET.ElementTree(tv)
# Einlesen und Schreiben
with open("/export/scripts/weeklyepg.json", "r", encoding="utf-8") as f:
json_data = json.load(f)
# XML generieren
xmltv_tree = convert_to_xmltv(json_data)
# In String schreiben
xml_io = io.StringIO()
xmltv_tree.write(xml_io, encoding="unicode", xml_declaration=True)
xml_string = xml_io.getvalue()
# Als .xml.gz speichern
with gzip.open("/var/www/html/stream/api/epg_stadtfilter.xml.gz", "wt", encoding="utf-8") as f:
f.write(xml_string)

1
sample.json Normal file

File diff suppressed because one or more lines are too long