Skip to content
  • Version 2 (multiple bouquets):

    [{"id":"91a90c49.76ec4","type":"tab","label":"XML TV","disabled":false,"info":""},{"id":"97eeed77.29e7b","type":"http request","z":"91a90c49.76ec4","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://192.168.0.50/web/epgnownext","tls":"","proxy":"","authType":"","x":550,"y":140,"wires":[["56d0bbcf.c05a6c","ce0abcb1.4c1628"]]},{"id":"b0ad1ea1.2d57e8","type":"debug","z":"91a90c49.76ec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":470,"y":620,"wires":[]},{"id":"d116200.48cfa6","type":"function","z":"91a90c49.76ec4","name":"Query","func":"\nmsg.headers = [];\nmsg.headers[\"Content-Type\"] = \"application/x-www-form-urlencoded; charset=UTF-8\";\n\nmsg.payload = 'bRef=1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet';\n\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":140,"wires":[["97eeed77.29e7b"]]},{"id":"8e262d6d.235bc8","type":"split","z":"91a90c49.76ec4","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":140,"y":480,"wires":[["9450518.512acb"]]},{"id":"5c45264d.6d4328","type":"function","z":"91a90c49.76ec4","name":"Make Array","func":"function onlyUnique(value, index, self) { \n    return self.indexOf(value) === index;\n}\n\nfunction notEmpty(value, index, self) {\n    return value.title[0]._ != \"None\";\n}\n\n// get all shows\nlet shows = msg.payload;\n\n// get all channels from the shows\nlet channels = [];\nshows.forEach((ele) => {\n    channels.push(ele[\"$\"].channel)\n})\n\n// keep only one entry of each channel\nchannels = channels.filter(onlyUnique);\n\n// keep only shows with info\nshows = shows.filter(notEmpty);\n\n\n// generate xml structure\nlet xmlchannel = [];\nchannels.forEach((ele) => {\n    let tmp = {\n        \"$\": {\n            \"id\": ele,\n        },\n        \"display-name\": [{\n            \"_\": ele\n        }]\n    }\n    \n    xmlchannel.push(tmp)\n})\n\n// make xml payload\nmsg.payload = {\n  \"tv\": {\n    \"$\": {\n      \"generator-info-name\": \"nodered\",\n      \"generator-info-url\": \"http://www.xmltv.org/\"\n    },\n    channel: xmlchannel,\n    programme: shows\n  }\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":480,"wires":[["91891875.1c15d"]]},{"id":"91891875.1c15d","type":"xml","z":"91a90c49.76ec4","name":"","property":"payload","attr":"","chr":"","x":130,"y":600,"wires":[["fcfd4c3e.23e2e8"]]},{"id":"9450518.512acb","type":"function","z":"91a90c49.76ec4","name":"make entry","func":"let eventstart = Number(msg.payload.e2eventstart[0]) * 1000;\nlet eventend = (Number(msg.payload.e2eventstart[0]) + Number(msg.payload.e2eventduration[0])) * 1000;\n\nlet start = 0;\nlet end = 0;\n\nif (isNaN(eventstart) || isNaN(eventend)) {\n    start = new Date();\n    end = new Date();\n}\nelse {\n    start = new Date(eventstart);\n    end = new Date(eventend);\n}\n\nfunction pad2(n) { return n < 10 ? '0' + n : String(n) }\n\nlet start_str = start.getFullYear() + pad2(start.getMonth()+1) + pad2(start.getDate()) + pad2(start.getHours()) + pad2(start.getMinutes()) + \"00\";\nlet end_str = end.getFullYear() + pad2(end.getMonth()+1) + pad2(end.getDate()) + pad2(end.getHours()) + pad2(end.getMinutes()) + \"00\";\n\nlet channel_entry = {\n    \"$\": {\n        \"channel\": msg.payload.e2eventservicename[0],\n        \"start\": start_str + \" +0000\",\n        \"stop\": end_str + \" +0000\"\n    },\n    \"title\": [{\n        \"_\": msg.payload.e2eventtitle[0],\n        \"$\": {\n            \"lang\": \"de\"\n        }\n    }],\n    \"desc\": [{\n        \"_\": msg.payload.e2eventdescription[0],\n        \"$\": {\n            \"lang\": \"de\"\n        }\n    }],\n    \"date\": [{\n        \"_\": start.getFullYear() + pad2(start.getMonth()+1) + pad2(start.getDate()),\n        \"$\": {\n            \"lang\": \"de\"\n        }\n    }]\n}\n\nmsg.payload = channel_entry;\n\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":480,"wires":[["bc5ce1af.b6cdb"]]},{"id":"bc5ce1af.b6cdb","type":"join","z":"91a90c49.76ec4","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":"false","timeout":"","count":"","reduceRight":false,"x":430,"y":480,"wires":[["5c45264d.6d4328"]]},{"id":"bd99d0fb.2e96c","type":"http in","z":"91a90c49.76ec4","name":"","url":"/xmltv","method":"get","upload":false,"swaggerDoc":"","x":140,"y":140,"wires":[["d116200.48cfa6"]]},{"id":"e70a9dc8.b0fe9","type":"http response","z":"91a90c49.76ec4","name":"","statusCode":"","headers":{},"x":470,"y":580,"wires":[]},{"id":"fcfd4c3e.23e2e8","type":"function","z":"91a90c49.76ec4","name":"add xml header","func":"\nconst search = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\nconst addition = '<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE tv SYSTEM \"xmltv.dtd\">';\n\nmsg.payload = msg.payload.replace(search, addition);\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm, '')\n\nmsg.headers = [];\nmsg.headers[\"Content-type\"] = \"text/xml\"\n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":600,"wires":[["e70a9dc8.b0fe9","b0ad1ea1.2d57e8"]]},{"id":"d2acd31c.7bb6b","type":"comment","z":"91a90c49.76ec4","name":"get data from DreamBox","info":"","x":190,"y":220,"wires":[]},{"id":"85b577b2.ba58e8","type":"comment","z":"91a90c49.76ec4","name":"generate entries","info":"","x":160,"y":440,"wires":[]},{"id":"57cdb393.5f99ac","type":"comment","z":"91a90c49.76ec4","name":"Back to XML","info":"","x":150,"y":560,"wires":[]},{"id":"db91f685.68d8b","type":"function","z":"91a90c49.76ec4","name":"Query","func":"\nmsg.headers = [];\nmsg.headers[\"Content-Type\"] = \"application/x-www-form-urlencoded; charset=UTF-8\";\n\nmsg.payload = 'bRef=1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.sky__tv_.tv\" ORDER BY bouquet';\n\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":380,"wires":[["957b1a5.6a3cde8"]]},{"id":"966e72a0.43483","type":"comment","z":"91a90c49.76ec4","name":"HTTP in","info":"","x":130,"y":60,"wires":[]},{"id":"56d0bbcf.c05a6c","type":"debug","z":"91a90c49.76ec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":770,"y":100,"wires":[]},{"id":"c508a153.bc814","type":"function","z":"91a90c49.76ec4","name":"get payload","func":"\nmsg.payload = msg.payload.e2eventlist.e2event;\n\n// msg.payload = [msg.payload[0], msg.payload[1]]\n\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":260,"wires":[["f5033caf.f3cb88"]]},{"id":"167a736.f6b350d","type":"xml","z":"91a90c49.76ec4","name":"","property":"payload","attr":"","chr":"","x":210,"y":260,"wires":[["c508a153.bc814"]]},{"id":"957b1a5.6a3cde8","type":"http request","z":"91a90c49.76ec4","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://192.168.0.50/web/epgnownext","tls":"","proxy":"","authType":"","x":550,"y":380,"wires":[["8a09860b.eb2338"]]},{"id":"f5033caf.f3cb88","type":"function","z":"91a90c49.76ec4","name":"merge both lists","func":"\nif (msg.first_data) {\n    msg.payload = msg.payload.concat(msg.first_data);\n    msg.first_data = null;\n    \n    return [null, msg];\n}\n\nmsg.first_data = msg.payload;\n\nreturn [msg, null];","outputs":2,"noerr":0,"x":160,"y":360,"wires":[["db91f685.68d8b"],["8e262d6d.235bc8"]]},{"id":"8a09860b.eb2338","type":"link out","z":"91a90c49.76ec4","name":"","links":["3ee7d872.498ad"],"x":695,"y":380,"wires":[]},{"id":"ce0abcb1.4c1628","type":"link out","z":"91a90c49.76ec4","name":"","links":["3ee7d872.498ad"],"x":735,"y":140,"wires":[]},{"id":"3ee7d872.498ad","type":"link in","z":"91a90c49.76ec4","name":"","links":["ce0abcb1.4c1628","8a09860b.eb2338"],"x":95,"y":260,"wires":[["167a736.f6b350d"]]},{"id":"fe8e8f5d.ef9da8","type":"inject","z":"91a90c49.76ec4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":100,"wires":[["d116200.48cfa6"]]},{"id":"34369ffe.b68b8","type":"comment","z":"91a90c49.76ec4","name":"get second data from DreamBox","info":"","x":450,"y":340,"wires":[]}]
  • Version 3 (24h data + multiple bouquets):

    [{"id":"91a90c49.76ec4","type":"tab","label":"XML TV","disabled":false,"info":""},{"id":"97eeed77.29e7b","type":"http request","z":"91a90c49.76ec4","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://192.168.0.50/web/epgmulti","tls":"","proxy":"","authType":"","x":550,"y":140,"wires":[["ce0abcb1.4c1628"]]},{"id":"b0ad1ea1.2d57e8","type":"debug","z":"91a90c49.76ec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":470,"y":620,"wires":[]},{"id":"d116200.48cfa6","type":"function","z":"91a90c49.76ec4","name":"Query","func":"\nmsg.headers = [];\nmsg.headers[\"Content-Type\"] = \"application/x-www-form-urlencoded; charset=UTF-8\";\n\nvar ts = Math.round((new Date()).getTime() / 1000);\n\nmsg.payload = 'bRef=1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet&time=' + ts + '&endTime=1440';\n\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":140,"wires":[["97eeed77.29e7b"]]},{"id":"8e262d6d.235bc8","type":"split","z":"91a90c49.76ec4","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":140,"y":480,"wires":[["9450518.512acb"]]},{"id":"5c45264d.6d4328","type":"function","z":"91a90c49.76ec4","name":"Make Array","func":"function onlyUnique(value, index, self) { \n    return self.indexOf(value) === index;\n}\n\nfunction notEmpty(value, index, self) {\n    return value.title[0]._ != \"None\";\n}\n\n// get all shows\nlet shows = msg.payload;\n\n// get all channels from the shows\nlet channels = [];\nshows.forEach((ele) => {\n    channels.push(ele[\"$\"].channel)\n})\n\n// keep only one entry of each channel\nchannels = channels.filter(onlyUnique);\n\n// keep only shows with info\nshows = shows.filter(notEmpty);\n\n\n// generate xml structure\nlet xmlchannel = [];\nchannels.forEach((ele) => {\n    let tmp = {\n        \"$\": {\n            \"id\": ele,\n        },\n        \"display-name\": [{\n            \"_\": ele\n        }]\n    }\n    \n    xmlchannel.push(tmp)\n})\n\n// make xml payload\nmsg.payload = {\n  \"tv\": {\n    \"$\": {\n      \"generator-info-name\": \"nodered\",\n      \"generator-info-url\": \"http://www.xmltv.org/\"\n    },\n    channel: xmlchannel,\n    programme: shows\n  }\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":480,"wires":[["91891875.1c15d"]]},{"id":"91891875.1c15d","type":"xml","z":"91a90c49.76ec4","name":"","property":"payload","attr":"","chr":"","x":130,"y":600,"wires":[["fcfd4c3e.23e2e8"]]},{"id":"9450518.512acb","type":"function","z":"91a90c49.76ec4","name":"make entry","func":"let eventstart = Number(msg.payload.e2eventstart[0]) * 1000;\nlet eventend = (Number(msg.payload.e2eventstart[0]) + Number(msg.payload.e2eventduration[0])) * 1000;\n\nlet start = 0;\nlet end = 0;\n\nif (isNaN(eventstart) || isNaN(eventend)) {\n    start = new Date();\n    end = new Date();\n}\nelse {\n    start = new Date(eventstart);\n    end = new Date(eventend);\n}\n\nfunction pad2(n) { return n < 10 ? '0' + n : String(n) }\n\nlet start_str = start.getFullYear() + pad2(start.getMonth()+1) + pad2(start.getDate()) + pad2(start.getHours()) + pad2(start.getMinutes()) + \"00\";\nlet end_str = end.getFullYear() + pad2(end.getMonth()+1) + pad2(end.getDate()) + pad2(end.getHours()) + pad2(end.getMinutes()) + \"00\";\n\nlet channel_entry = {\n    \"$\": {\n        \"channel\": msg.payload.e2eventservicename[0],\n        \"start\": start_str + \" +0000\",\n        \"stop\": end_str + \" +0000\"\n    },\n    \"title\": [{\n        \"_\": msg.payload.e2eventtitle[0],\n        \"$\": {\n            \"lang\": \"de\"\n        }\n    }],\n    \"desc\": [{\n        \"_\": msg.payload.e2eventdescription[0],\n        \"$\": {\n            \"lang\": \"de\"\n        }\n    }],\n    \"date\": [{\n        \"_\": start.getFullYear() + pad2(start.getMonth()+1) + pad2(start.getDate()),\n        \"$\": {\n            \"lang\": \"de\"\n        }\n    }]\n}\n\nmsg.payload = channel_entry;\n\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":480,"wires":[["bc5ce1af.b6cdb"]]},{"id":"bc5ce1af.b6cdb","type":"join","z":"91a90c49.76ec4","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":"false","timeout":"","count":"","reduceRight":false,"x":430,"y":480,"wires":[["5c45264d.6d4328"]]},{"id":"bd99d0fb.2e96c","type":"http in","z":"91a90c49.76ec4","name":"","url":"/xmltv","method":"get","upload":false,"swaggerDoc":"","x":140,"y":140,"wires":[["d116200.48cfa6"]]},{"id":"e70a9dc8.b0fe9","type":"http response","z":"91a90c49.76ec4","name":"","statusCode":"","headers":{},"x":470,"y":580,"wires":[]},{"id":"fcfd4c3e.23e2e8","type":"function","z":"91a90c49.76ec4","name":"add xml header","func":"\nconst search = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\nconst addition = '<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE tv SYSTEM \"xmltv.dtd\">';\n\nmsg.payload = msg.payload.replace(search, addition);\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm, '')\n\nmsg.headers = [];\nmsg.headers[\"Content-type\"] = \"text/xml\"\n\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":600,"wires":[["b0ad1ea1.2d57e8","e70a9dc8.b0fe9"]]},{"id":"d2acd31c.7bb6b","type":"comment","z":"91a90c49.76ec4","name":"get data from DreamBox","info":"","x":190,"y":220,"wires":[]},{"id":"85b577b2.ba58e8","type":"comment","z":"91a90c49.76ec4","name":"generate entries","info":"","x":160,"y":440,"wires":[]},{"id":"57cdb393.5f99ac","type":"comment","z":"91a90c49.76ec4","name":"Back to XML","info":"","x":150,"y":560,"wires":[]},{"id":"db91f685.68d8b","type":"function","z":"91a90c49.76ec4","name":"Query","func":"\nmsg.headers = [];\nmsg.headers[\"Content-Type\"] = \"application/x-www-form-urlencoded; charset=UTF-8\";\n\nvar ts = Math.round((new Date()).getTime() / 1000);\n\nmsg.payload = 'bRef=1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.sky__tv_.tv\" ORDER BY bouquet&time=' + ts + '&endTime=1440';\n\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":380,"wires":[["957b1a5.6a3cde8"]]},{"id":"966e72a0.43483","type":"comment","z":"91a90c49.76ec4","name":"HTTP in","info":"","x":130,"y":60,"wires":[]},{"id":"c508a153.bc814","type":"function","z":"91a90c49.76ec4","name":"get payload","func":"\nmsg.payload = msg.payload.e2eventlist.e2event;\n\n// msg.payload = [msg.payload[0], msg.payload[1]]\n\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":260,"wires":[["f5033caf.f3cb88"]]},{"id":"167a736.f6b350d","type":"xml","z":"91a90c49.76ec4","name":"","property":"payload","attr":"","chr":"","x":210,"y":260,"wires":[["c508a153.bc814"]]},{"id":"957b1a5.6a3cde8","type":"http request","z":"91a90c49.76ec4","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://192.168.0.50/web/epgmulti","tls":"","proxy":"","authType":"","x":550,"y":380,"wires":[["8a09860b.eb2338"]]},{"id":"f5033caf.f3cb88","type":"function","z":"91a90c49.76ec4","name":"merge both lists","func":"\nif (msg.first_data) {\n    msg.payload = msg.payload.concat(msg.first_data);\n    msg.first_data = null;\n    \n    return [null, msg];\n}\n\nmsg.first_data = msg.payload;\n\nreturn [msg, null];","outputs":2,"noerr":0,"x":160,"y":360,"wires":[["db91f685.68d8b"],["8e262d6d.235bc8"]]},{"id":"8a09860b.eb2338","type":"link out","z":"91a90c49.76ec4","name":"","links":["3ee7d872.498ad"],"x":695,"y":380,"wires":[]},{"id":"ce0abcb1.4c1628","type":"link out","z":"91a90c49.76ec4","name":"","links":["3ee7d872.498ad"],"x":735,"y":140,"wires":[]},{"id":"3ee7d872.498ad","type":"link in","z":"91a90c49.76ec4","name":"","links":["ce0abcb1.4c1628","8a09860b.eb2338"],"x":95,"y":260,"wires":[["167a736.f6b350d"]]},{"id":"fe8e8f5d.ef9da8","type":"inject","z":"91a90c49.76ec4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":100,"wires":[["d116200.48cfa6"]]},{"id":"34369ffe.b68b8","type":"comment","z":"91a90c49.76ec4","name":"get second data from DreamBox","info":"","x":450,"y":340,"wires":[]}]
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment