58 lines
1.9 KiB
Python
Executable File
58 lines
1.9 KiB
Python
Executable File
import subprocess
|
|
from flask import Flask, request, jsonify
|
|
from lxml import etree
|
|
from datetime import datetime, timedelta
|
|
|
|
app = Flask(__name__)
|
|
|
|
EPG_FILE = "sky_epg.xml"
|
|
|
|
@app.route('/update_sky', methods=['POST'])
|
|
def update_sky():
|
|
data = request.json
|
|
channel_name = data.get('channel', 'Unbekannt')
|
|
content_title = data.get('content', 'Keine Information')
|
|
|
|
# Zeitstempel für XMLTV (Start jetzt, Ende in 1 Std als Platzhalter)
|
|
now = datetime.now()
|
|
start_time = now.strftime("%Y%m%d%H%M%S +0100")
|
|
stop_time = (now + timedelta(hours=12)).strftime("%Y%m%d%H%M%S +0100")
|
|
|
|
# XML Struktur aufbauen
|
|
root = etree.Element("tv")
|
|
|
|
# Kanal Info
|
|
channel = etree.SubElement(root, "channel", id="cftv")
|
|
etree.SubElement(channel, "display-name").text = "cftv" #+ channel_name
|
|
|
|
# Programm Info
|
|
prog = etree.SubElement(root, "programme",
|
|
start=start_time,
|
|
stop=stop_time,
|
|
channel="cftv") #channel_name.replace(" ", ""))
|
|
etree.SubElement(prog, "title").text = content_title
|
|
if data.get('image'):
|
|
etree.SubElement(prog, "icon", src=data['image'])
|
|
|
|
# Datei speichern
|
|
tree = etree.ElementTree(root)
|
|
tree.write(EPG_FILE, pretty_print=True, xml_declaration=True, encoding="utf-8")
|
|
|
|
print(f"EPG aktualisiert: {channel_name} - {content_title}")
|
|
|
|
script_path = "/home/sandro/m3u/aktualisiere_epg.py"
|
|
|
|
try:
|
|
# Wir rufen es asynchron auf, damit die API sofort "success" an HA zurückgeben kann
|
|
subprocess.Popen(["python3", script_path])
|
|
print(f"Externes Skript gestartet: {script_path}")
|
|
except Exception as e:
|
|
print(f"Fehler beim Aufruf des EPG-Skripts: {e}")
|
|
|
|
return jsonify({"status": "XML erstellt, Sync gestartet"}), 200
|
|
|
|
return jsonify({"status": "xml_updated"}), 200
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host='0.0.0.0', port=5000)
|