diff --git a/sites/neo.io/neo.io.config.js b/sites/neo.io/neo.io.config.js new file mode 100644 index 00000000..28d41e8d --- /dev/null +++ b/sites/neo.io/neo.io.config.js @@ -0,0 +1,73 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'neo.io', + timezone: 'Europe/Ljubljana', + days: 5, + url({ date, channel }) { return 'https://stargate.telekom.si/api/titan.tv.WebEpg/GetWebEpgData' }, + request: { + method: 'POST', + headers: { + 'Host': 'stargate.telekom.si', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0', + 'Accept': 'application/json, text/plain, */*', + 'Accept-Language': 'nl,en-US;q=0.7,en;q=0.3', + 'Content-Type': 'application/json', + 'X-AppLayout': '1', + 'x-language': 'sl', + 'Origin': 'https://neo.io', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-GPC': '1', + 'Connection': 'keep-alive' + }, + data({ channel, date }) { + const todayEpoch = date.startOf('day').unix(); + const nextDayEpoch = date.add(1, 'day').startOf('day').unix(); + return JSON.stringify({ + ch_ext_id: channel.site_id, + from: todayEpoch, + to: nextDayEpoch + }) + } + }, + parser: function ({ content }) { + const programs = []; + const data = JSON.parse(content); + data.shows.forEach(show => { + const start = dayjs.unix(show.show_start).utc(); + const stop = dayjs.unix(show.show_end).utc(); + const programData = { + title: show.title, + description: show.summary || 'No description available', + start: start.toISOString(), + stop: stop.toISOString(), + thumbnail: show.thumbnail + } + programs.push(programData) + }) + return programs + }, + async channels() { + const response = await axios.post('https://stargate.telekom.si/api/titan.tv.WebEpg/ZapList', JSON.stringify({ includeRadioStations: true }), { + headers: this.request.headers + }); + + const data = response.data.data; + return data.map(item => ({ + lang: 'sq', + name: String(item.channel.title), + site_id: String(item.channel.id), + //logo: String(item.channel.logo) + })) + } +}