diff --git a/sites/opto.sic.pt/opto.sic.pt.config.js b/sites/opto.sic.pt/opto.sic.pt.config.js new file mode 100644 index 00000000..8c14ec50 --- /dev/null +++ b/sites/opto.sic.pt/opto.sic.pt.config.js @@ -0,0 +1,53 @@ +const axios = require('axios') +const dayjs = require('dayjs') + +module.exports = { + site: 'opto.sic.pt', + days: 2, + url({ date, channel }) { + const startDate = date.unix() + const endDate = date.add(1, 'd').unix() + + return `https://opto.sic.pt/api/v1/content/epg?startDate=${startDate}&endDate=${endDate}&channels=${channel.site_id}` + }, + parser({ content }) { + let programs = [] + let items = parseItems(content) + items.forEach(item => { + programs.push({ + title: item.title, + episode: item.episode_number || null, + season: item.season_number || null, + start: dayjs.unix(item.start_time), + stop: dayjs.unix(item.end_time) + }) + }) + + return programs + }, + async channels() { + const data = await axios + .get('https://opto.sic.pt/api/v1/content/channel') + .then(r => r.data) + .catch(console.error) + + return data.map(channel => { + return { + lang: 'pt', + site_id: channel.id, + name: channel.name + } + }) + } +} + +function parseItems(content) { + try { + const data = JSON.parse(content) + if (!Array.isArray(data)) return [] + + return data + } catch { + return [] + } +}