NEWS
Js-Funktion in Blockly erweitern
-
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
-
Das weiß ich noch nicht
Bei der Tabelle nach Sender vermutlich nur einmal in der Überschrift. Da kann man es auch händisch einpflegen ^^.
Bei der Tabelle nach Zeit vor jeder Sendung anstatt den Sendernamen. -
so hat man ein json array für die sender und deren icons - nur so als beispiel
ab zeile 21
const uebersicht = []; let json = await parseAsync(); //fs.writeFile('/opt/iobroker/Downloads/tv.json', JSON.stringify(json), e => { }) json.tv.programme.forEach(p => { //log(JSON.stringify(p)); log(JSON.stringify(p.icon[0]['$']['src'])); 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]) 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]['_'] }) }) const senderIcons=[]; json.tv.channel.forEach(p => { //log(p) senderIcons.push({ "Sender": p['$'].id.replace('.de',''), "Bild": p['icon'][0]['$'].src }) log(JSON.stringify(senderIcons)) })
log:
[{"Sender":"123TV","Bild":"https://static.epg.best/de/123TV.de.png"},{"Sender":"3sat","Bild":"https://static.epg.best/de/3sat.de.png"},{"Sender":"ARD","Bild":"https://static.epg.best/de/ARD.de.png"},{"Sender":"CNN.uk","Bild":"https://static.epg.best/gb/CNN.uk.png"},{"Sender":"DisneyChannel","Bild":"https://static.epg.best/de/DisneyChannel.de.png"},{"Sender":"DMax","Bild":"https://static.epg.best/de/DMax.de.png"},{"Sender":"Euronews","Bild":"https://static.epg.best/de/Euronews.de.png"},{"Sender":"HR","Bild":"https://static.epg.best/de/HR.de.png"},{"Sender":"HSE24","Bild":"https://static.epg.best/de/HSE24.de.png"},{"Sender":"Kabel1","Bild":"https://static.epg.best/de/Kabel1.de.png"},{"Sender":"KabelEinsDoku","Bild":"https://static.epg.best/de/KabelEinsDoku.de.png"},{"Sender":"Kika","Bild":"https://static.epg.best/de/Kika.de.png"},{"Sender":"MDRSachsen","Bild":"https://static.epg.best/de/MDRSachsen.de.png"},{"Sender":"Nickelodeon","Bild":"https://static.epg.best/de/Nickelodeon.de.png"},{"Sender":"Phoenix","Bild":"https://static.epg.best/de/Phoenix.de.png"},{"Sender":"Pro7","Bild":"https://static.epg.best/de/Pro7.de.png"},{"Sender":"ProSiebenMaxx","Bild":"https://static.epg.best/de/ProSiebenMaxx.de.png"},{"Sender":"QVC","Bild":"https://static.epg.best/de/QVC.de.png"},{"Sender":"RTL","Bild":"https://static.epg.best/de/RTL.de.png"},{"Sender":"RTL2","Bild":"https://static.epg.best/de/RTL2.de.png"},{"Sender":"RTLNitro","Bild":"https://static.epg.best/de/RTLNitro.de.png"},{"Sender":"Sat1","Bild":"https://static.epg.best/de/Sat1.de.png"},{"Sender":"Sat1Gold","Bild":"https://static.epg.best/de/Sat1Gold.de.png"},{"Sender":"SuperRTL","Bild":"https://static.epg.best/de/SuperRTL.de.png"},{"Sender":"Tagesschau24","Bild":"https://static.epg.best/de/Tagesschau24.de.png"},{"Sender":"Vox","Bild":"https://static.epg.best/de/Vox.de.png"},{"Sender":"WDR","Bild":"https://static.epg.best/de/WDR.de.png"},{"Sender":"ZDF","Bild":"https://static.epg.best/de/ZDF.de.png"},{"Sender":"ZDFneo","Bild":"https://static.epg.best/de/ZDFneo.de.png"}]
-
Da kann man dann gut drauf zurückgreifen, wenn man sich das in eine Variable schreibt.
Komfortabler wäre es natürlich, wenn man es bei Beschreibung Bild etc mit reinbekommt. Aber das stelle ich mir auch schwierig vor.
-
mit dem channel bild im json
const uebersicht = []; let json = await parseAsync(); //fs.writeFile('/opt/iobroker/Downloads/tv.json', JSON.stringify(json), e => { }) json.tv.programme.forEach(p => { //log(JSON.stringify(p)); log(JSON.stringify(p.icon[0]['$']['src'])); 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]) 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]['_'], "ChannelIcon": "" }) }) const senderIcons=[]; json.tv.channel.forEach(p => { //log(p) senderIcons.push({ "Sender": p['$'].id.replace('.de',''), "Bild": p['icon'][0]['$'].src }) log(JSON.stringify(senderIcons)) }) for(let u=0;u<uebersicht.length;u++) { for (let i=0; i<senderIcons.length;i++){ if (uebersicht[u].Sender==senderIcons[i].Sender) uebersicht[u].ChannelIcon=senderIcons[i].Bild } }
dazu kommt:
zeile 19
zeile32 - 36Output:
{ "Sender": "123TV", "Start": "2023-04-28T04:00:00.000Z", "Ende": "2023-04-28T05:00:00.000Z", "Beschreibung": "Sendung.", "Bild": "https://staticqbr-at-prod.prod.cdn.dmdsdp.com/image-service/ImagesEPG/EventImages/p14664969_i_h8_ab.jpg", "Titel": "FashionNews", "ChannelIcon": "https://static.epg.best/de/123TV.de.png" }, { "Sender": "3sat", "Start": "2023-04-28T05:01:00.000Z", "Ende": "2023-04-28T05:30:00.000Z", "Beschreibung": "Deutschland 2023Fische umsiedeln - Wegen anhaltender Dürre und fallenden Pegelständen werden in Spanien jetzt Fische umgesiedelt.Fiebrige Seen - Der Sauerstoffgehalt in den Süßwasserseen nimmt rapide ab - um ein Vielfaches schneller als in den Ozeanen. Den Rückgang führen die Forschenden vor allem auf den Klimawandel zurück. Sie sehen die Artenvielfalt im Süßwasser und die Qualität des Trinkwassers gefährdet.Klimafreundlicher Beton - Beton trägt bis zu zehn Prozent der weltweiten CO2-Emissionen bei. In Zukunft wird der Bedarf noch mehr steigen, denn weltweit läuft ein Bau-Boom. Neuartige Betonmischungen sollen den Beton klimafreundlicher machen - unter anderem durch einen geringeren Zementanteil im Beton.Pestizide beeinträchtigen Insekten - Das Unkrautvernichtungsmittel Glyphosat halten Landwirte nach wie vor für unverzichtbar. Bienen nehmen das Gift auf und so gelangt es auch in den Honig. Aber auch den Insekten selbst schaden die Ackergifte wie Herbizide, Fungizide und Neonicotinoide. Auch wenn sie nicht direkt sterben, ist es doch schädlicher als gedacht.#gen - Die Rubrik hashtag# nimmt sich Begriffe und Gegenstände aus dem täglichen Leben vor und zeigt, was alles in ihnen steckt. Mit überraschenden Erkenntnissen.Moderation: Yve Fehring.", "Bild": "http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/2/3/p23538014_i_h9_ab.jpg", "Titel": "nano", "ChannelIcon": "https://static.epg.best/de/3sat.de.png" }, { "Sender": "3sat", "Start": "2023-04-28T05:30:00.000Z", "Ende": "2023-04-28T06:00:00.000Z", "Beschreibung": "\"Alpenpanorama\" zeigt über zahlreiche Web- und Panoramakameras täglich Livebilder aus ausgewählten Urlaubsorten.Die Sendung informiert auch über Temperatur- und Wetterbedingungen vor Ort.", "Bild": "http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/2/3/p23537981_i_h9_aa.jpg", "Titel": "Alpenpanorama", "ChannelIcon": "https://static.epg.best/de/3sat.de.png" }, { "Sender": "3sat", "Start": "2023-04-28T06:00:00.000Z", "Ende": "2023-04-28T06:08:00.000Z", "Beschreibung": "Die \"Früh-ZIB\" informiert von Montag bis Freitag über das aktuelle Geschehen aus Innen- und Außenpolitik, Wirtschaft, Wissenschaft, Kultur und Chronik.Reportagen und Hintergrundberichte vertiefen das Verständnis der aktuellen Ereignisse.", "Bild": "http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/2/3/p23416154_i_h9_ab.jpg", "Titel": "ZIB", "ChannelIcon": "https://static.epg.best/de/3sat.de.png" }, { "Sender": "3sat", "Start": "2023-04-28T06:08:00.000Z", "Ende": "2023-04-28T06:30:00.000Z", "Beschreibung": "\"Alpenpanorama\" zeigt über zahlreiche Web- und Panoramakameras täglich Livebilder aus ausgewählten Urlaubsorten.Die Sendung informiert auch über Temperatur- und Wetterbedingungen vor Ort.", "Bild": "http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/2/3/p23537981_i_h9_aa.jpg", "Titel": "Alpenpanorama", "ChannelIcon": "https://static.epg.best/de/3sat.de.png" }, { "Sender": "3sat", "Start": "2023-04-28T06:30:00.000Z", "Ende": "2023-04-28T06:33:00.000Z", "Beschreibung": "Die \"Früh-ZIB\" informiert von Montag bis Freitag über das aktuelle Geschehen aus Innen- und Außenpolitik, Wirtschaft, Wissenschaft, Kultur und Chronik.Reportagen und Hintergrundberichte vertiefen das Verständnis der aktuellen Ereignisse.", "Bild": "http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/2/3/p23416154_i_h9_ab.jpg", "Titel": "ZIB", "ChannelIcon": "https://static.epg.best/de/3sat.de.png" }, { "Sender": "3sat", "Start": "2023-04-28T06:33:00.000Z", "Ende": "2023-04-28T07:00:00.000Z", "Beschreibung": "\"Alpenpanorama\" zeigt über zahlreiche Web- und Panoramakameras täglich Livebilder aus ausgewählten Urlaubsorten.Die Sendung informiert auch über Temperatur- und Wetterbedingungen vor Ort.", "Bild": "http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/2/3/p23537981_i_h9_aa.jpg", "Titel": "Alpenpanorama", "ChannelIcon": "https://static.epg.best/de/3sat.de.png" },
jetzt muss ich formel 1 kucken
-
Nur zu, vielen lieben Dank.
Bist für heute meine Pole ^^ -
Hab mir die XML eben nochmal angesehen uns bemerkt, dass es den display_name gibt in dem Bereich wo auch die Senderlogos sind.
Kann man die auch einbauen?
Im Moment Mappe ich die Namen von Best.epg im Blockly damit diese zu den Namen aus dem TV passen und ich das aktuell laufende Programm auswerten kann.Über Display_name könnte man das schon über das Portal von Best.epg managen.
Dürfte auch den aktuellen Sender ersetzen, oder noch zusätzlich.
P. S.
Ich hoffe, dass Rennen ist nach deinen Wünschen ausgegangen.
Ich habe nur Rennen zwischen meinen Kids am Fahrrad bestaunt.
Da kab es doch einige Kollisionen und ich durfte als Safetycar fungierenEDIT
Die Abfrage müsstdann ja auch über den display_name ausgeführt werden....
Und diesen auch mit ausgeben. -
mit display-name
zeile hinzufügen:
zeile 11
zeile 19
zeile 27let 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]['_'], "ChannelIcon": "", "DisplayName": "" }) }) const senderIcons=[]; json.tv.channel.forEach(p => { //log(p) senderIcons.push({ "Sender": p['$'].id.replace('.de',''), "Bild": p['icon'][0]['$'].src, "DisplayName": p['display-name'][0] }) // log(JSON.stringify(senderIcons)) }) for(let u=0;u<uebersicht.length;u++) { for (let i=0; i<senderIcons.length;i++){ if (uebersicht[u].Sender==senderIcons[i].Sender) {uebersicht[u].ChannelIcon=senderIcons[i].Bild; uebersicht[u].DisplayName=senderIcons[i].DisplayName; }} }
-
Gelöscht
-
Jetzt habe ich mich mal soweit an die Tabellen begeben.
Jetzt fehlt noch der letzte Feinschliff.
Bekommt man technisch folgendes umgesetzt?
- Die Uhrzeiten von Zulu nach UTC umrechnen
- Dein Script zum sortieren der Senter mit integrierten https://forum.iobroker.net/topic/65024/gel%C3%B6st-json-sortieren-nicht-alphabetisch
Den Teil zum Suchen was zu einer speziellen Zeit läuft habe ich bei mir entfernt.
-
@david-g sagte in Js-Funktion in Blockly erweitern:
Die Uhrzeiten von Zulu nach UTC umrechnen
hatte mich schon gewundert - wenn du das in einer tabelle anzeigen willst, wäre es nicht besser, nur die anfangs- und endzeit zu haben - das datum ist ja klar definiert - heute. aber das datum könnte man auch in einem extra schlüssel speichernstimmt nicht - muss mir das nochmal in ruhe ansehen
-
Wenn das Datum enthalten bleibt, kann man die Tabelle auf mehrere Tage erweitern. Bzw sich das Programm von morgen oder übermorgen anzeigen lassen.
Außer man macht eine extra Variable "Datum".
-
schau dir den output mal hier an https://tableconvert.com/json-to-html - einfach den inhalt des datenpunktes hier einsetzen, dann belommst du mal eine übersichtstabelle - und kontrolliere mal, ob die zeiten auch richtig sind
hier das momentane blockly zum import !!! Vorsicht - du mußt im script den datenpunkt wieder angleichen und auch den pfad zur datei - ist bei mir anders, wie bei dir !!!
-
Danke,
werde ich nachher mal testen.
Habe es in meiner Abfrage für die Tabelle jetzt zwar hinbekommen dank @paul53 , jedoch ist es so natürlich leichter.So kann ich die Uhrzeiten schön abfragen (Für einen Tag später dann einfach die 86400000ms für einen Tag aufrechnen):
-
Sieht klasse aus.
Scheint zu klappen.2 Kleinigkeiten, eine hatte ich in meiner Version schon geändert:
- Kann man bei DisplayName am ende pauschal das " DE am ende entfernen?
- Kann man beim Sortieren nach dem DisplayName gehen? Diesen kann man bei bestepg selber anpassen.
Mit den neuen Zeitangaben experimentiere ich noch in meinem Blockly. Mal noch bekomme ich es nicht gefiltert weil ich das Datum von start und ende wieder zusammenbasteln muss.