NEWS
Js-Funktion in Blockly erweitern
-
Hallo,
ich habe mit @fastfoot vor einiger Zeit folgendes Blockly mit einer Js-Funktion entwickelt.
Funktion:
/** * Zweck: erstellt Tabelle(json) aus XML TV-Daten von epg.best * Datum: 20.04.2022 * Autor: @fastfoot * Forum: https://forum.iobroker.net/post/792865 */ const fs = require('fs'); const xml2js = require('xml2js'); // eintragen in Adapter-Instanz const parser = new xml2js.Parser(); //const Sender = '3sat.de'; // Senderfilter const now = Datum; // Zeitfilter function parseAsync() { let data = fs.readFileSync('/opt/iobroker/node_modules/iobroker.javascript/EPG/epg.xml'); return new Promise((resolve, reject) => { parser.parseString(data, function (err, result) { if (err) { log('Fehler ' + err); } resolve(result); }) }); } const uebersicht = []; let json = await parseAsync(); //fs.writeFile('/opt/iobroker/Downloads/tv.json', JSON.stringify(json), e => { }) json.tv.programme.forEach(p => { let start = p['$'].start.match(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\s(\+\d{2})/); let stop = p['$'].stop.match(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\s(\+\d{2})/); start = new Date(start[1] + '-' + start[2] + '-' + start[3] + ' ' + start[4] + ':' + start[5] + ':' + start[6] + ' UTC' + start[7]) stop = new Date(stop[1] + '-' + stop[2] + '-' + stop[3] + ' ' + stop[4] + ':' + stop[5] + ':' + stop[6] + ' UTC' + stop[7]) uebersicht.push({ "Sender": p['$'].channel.replace('.de',''), "Start": start, "Ende": stop, "Bild": p.icon[0]['_'], "Titel": p.title[0]['_'] }) }) //als Tabelle für VIS speichern //setState('0_userdata.0.TV.epg', JSON.stringify(uebersicht)); //Filtern nach Sender und Zeit let jetzt = uebersicht.filter(p => { return p.Sender === Sender.replace('.de','') && p.Start <= now && p.Ende > now; }) if (jetzt.length > 0) return jetzt[0]; else return { "Sender": null, "Start": null, "Ende": null, "Titel": "Kein laufendes Programm gefunden!" }
Die Funktion würde ich gerne noch erweitern um "icon" abzurufen. Dafür habe ich in Zeile 37 (Zwischen Ende und Titel) einfach mal getestet und was ergänzt. Auf gut Glück. Das klappt aber nicht.
Kann mir ggf jmd weiterhelfen?
Hier ein Auszug aus der xml:
<programme start="20230428180000 +0200" stop="20230428190000 +0200" channel="123TV.de"> <title lang="de">Gastro</title> <desc lang="de">In dieser Sendung werden die besten Produkte aus der Kategorie \.</desc> <category lang="de">Einkauf</category> <icon src="https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/p11138558_bd_h10_aa.jpg"/> <country lang="de">DE</country> </programme>
EDIT
"desc" darf auch gerne mit bei, wenn mal einmal bei ist. -
-
Das ist jetzt mitten raus. Am Anfang kommen noch andere Dinge (wenn das reicht) .
Das ist riesig was raus kommt (muss die sendenich reduzieren...)https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/p15110568_i_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501090000 +0200","stop":"20230501100000 +0200","channel":"123TV.de"},"title":[{"_":"By Stefano Ghilardi","$":{"lang":"de"}}],"desc":[{"_":"Eine Shoppingsendung.","$":{"lang":"de"}}],"category":[{"_":"Einkauf","$":{"lang":"de"}}],"icon":[{"$":{"src":"https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/g187_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501100000 +0200","stop":"20230501110000 +0200","channel":"123TV.de"},"title":[{"_":"By Stefano Ghilardi","$":{"lang":"de"}}],"desc":[{"_":"Eine Shoppingsendung.","$":{"lang":"de"}}],"category":[{"_":"Einkauf","$":{"lang":"de"}}],"icon":[{"$":{"src":"https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/g187_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501110000 +0200","stop":"20230501120000 +0200","channel":"123TV.de"},"title":[{"_":"Eau de Paris","$":{"lang":"de"}}],"desc":[{"_":"In dieser Shopping-Sendung werden Beauty-Produkte vorgestellt und zum Kauf angeboten.","$":{"lang":"de"}}],"icon":[{"$":{"src":"https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/p14664966_i_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501120000 +0200","stop":"20230501130000 +0200","channel":"123TV.de"},"title":[{"_":"gastro Garten","$":{"lang":"de"}}],"desc":[{"_":"Eine Verkaufssendung.","$":{"lang":"de"}}],"category":[{"_":"Einkauf","$":{"lang":"de"}},{"_":"Natur","$":{"lang":"de"}}],"icon":[{"$":{"src":"https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/g187_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501130000 +0200","stop":"20230501140000 +0200","channel":"123TV.de"},"title":[{"_":"gastro Garten","$":{"lang":"de"}}],"desc":[{"_":"Eine Verkaufssendung.","$":{"lang":"de"}}],"category":[{"_":"Einkauf","$":{"lang":"de"}},{"_":"Natur","$":{"lang":"de"}}],"icon":[{"$":{"src":"https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/g187_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501140000 +0200","stop":"20230501150000 +0200","channel":"123TV.de"},"title":[{"_":"Eau de Paris","$":{"lang":"de"}}],"desc":[{"_":"In dieser Shopping-Sendung werden Beauty-Produkte vorgestellt und zum Kauf angeboten.","$":{"lang":"de"}}],"icon":[{"$":{"src":"https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/p14664966_i_h10_aa.jpg"}}],"country":[{"_":"DE","$":{"lang":"de"}}]},{"$":{"start":"20230501150000 +0200","stop":"20230501160000 +0200","channel":"123TV.de"},"title":[{"_":"Bistro - Frühstück für Genießer"
icon und desc wäre cool.
-
lass mal - habe eine datei gefunden
-
sorry - poste die datei doch mal - egal wie lange - poste es als ganze datei - nicht in code tags
-
Kann ich das aus dem Skript direkt in eine Datei schreiben? Arbeite das We über nur vom Smartphone, das kackt mir da ab
-
@david-g warte mal
-
@liv-in-sky
Bei der Hilfe warte ich gerneDie Daten kommen von https://epg.best
Sind wirklich sehr umfangreich, wäre einen Adapter wert. Die meisten sind vermutlich aber nicht bereit 99ct im Monat auszugeben. -
-
-
@david-g sagte in Js-Funktion in Blockly erweitern:
@liv-in-sky
Bei der Hilfe warte ich gerneDie Daten kommen von https://epg.best
Sind wirklich sehr umfangreich, wäre einen Adapter wert. Die meisten sind vermutlich aber nicht bereit 99ct im Monat auszugeben.würde da schon darüber nachdenken, die 12€ pro jahr - mache aber keine adapter
wenn ich zeit habe, muss ich mir das mal näher ansehen - seit hoerzu die seite geändert hat, habe ich keine tv anzeige mehr
-
Manchen Usern schon. Hatte da bei dem WhatsApp Ding mal was mitbekommen. Oder jedes Jahr bei iobroker.pro.....
Die Beschreibung klappt.
Das Bild möchte aber nicht...javascript.0 2023-04-30 10:54:12.055 error at script.js.Eigene_Scripte.Tvtest:72:12 javascript.0 2023-04-30 10:54:12.055 error at processTicksAndRejections (node:internal/process/task_queues:95:5) javascript.0 2023-04-30 10:54:12.055 error at parser (script.js.Eigene_Scripte.Tvtest:32:23) javascript.0 2023-04-30 10:54:12.054 error at Array.forEach (<anonymous>) javascript.0 2023-04-30 10:54:12.054 error at script.js.Eigene_Scripte.Tvtest:42:27 javascript.0 2023-04-30 10:54:12.054 error script.js.Eigene_Scripte.Tvtest: TypeError: Cannot read properties of undefined (reading '0')
-
@david-g hast du beide varianten getestet ?
-
Jepp, grade im Moment. Hatte nur die erste gesehen.
Beide nichtGanz am Anfang des epg werden die Senderlogos definiert. Die nennen sich auch icon. Kann das daran liegen?
-
seltsam:
das ist der input
"icon": [ { "$": { "src": "https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/g187_h10_aa.jpg" } } ]
das sollte klappen
p.icon[0]['$']['src'] p.icon[0]['$'].src
ist der fehler schon in der richtigen zeile
@david-g sagte in Js-Funktion in Blockly erweitern:
Ganz am Anfang des epg werden die Senderlogos definiert. Die nennen sich auch icon. Kann das daran liegen?
glaub ich nicht - man gibt ja den pfad an
-
Möchte auch nicht klappen.
Hier mal mein komplettes Blockly (Noch 1,2 deaktivierte Sachen drinnen) und die XML mit den Daten:
-
bin dem fehler auf der spur
-
füge das mal in die function ein:
start = new Date(start[1] + '-' + start[2] + '-' + start[3] + ' ' + start[4] + ':' + start[5] + ':' + start[6] + ' UTC' + start[7]) stop = new Date(stop[1] + '-' + stop[2] + '-' + stop[3] + ' ' + stop[4] + ':' + stop[5] + ':' + stop[6] + ' UTC' + stop[7]) let myIcon; !p.hasOwnProperty("icon") ? myIcon="" : myIcon=p.icon[0]['$']['src'] uebersicht.push({ "Sender": p['$'].channel.replace('.de',''), "Start": start, "Ende": stop, "Beschreibung": p.desc[0]['_'], "Bild": myIcon, "Titel": p.title[0]['_'] }) })
zeile 3
zeile4
und zeile 10 muss bei dir rein -
Jo, das klappt.
Dank dir.Weiß noch nicht, wie die Tabelle aussehen wird.
Deshalb man zur Vorsicht ^^.
Bekommt man das Senderlogo auch raus?
Das seht ja in einem anderen "Block" (ka wie man das nennt). -
ja - da müßte man mit einer anderen schleife draufkommen und das dann speichern in einem array- dann könnte man das gaze zusammensortieren - hängt davon ab, wie man das ganze dann als tabelle rausgibt