diff --git a/sites/roya-tv.com/roya-tv.com.config.js b/sites/roya-tv.com/roya-tv.com.config.js new file mode 100644 index 000000000..562cda871 --- /dev/null +++ b/sites/roya-tv.com/roya-tv.com.config.js @@ -0,0 +1,66 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +module.exports = { + site: 'roya-tv.com', + days: 2, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1 hour + } + }, + url({ date }) { + const diff = date.diff(dayjs.utc().startOf('d'), 'd') + + return `https://backend.roya.tv/api/v01/channels/schedule-pagination?day_number=${diff}` + }, + parser({ content, date, channel }) { + const items = parseItems(content, date, channel) + + return items.map(item => { + return { + title: item.name, + description: item.description, + image: item.thumbnail_web, + start: dayjs.unix(item.start_timestamp), + stop: dayjs.unix(item.end_timestamp) + } + }) + }, + async channels() { + const data = await axios + .get('https://backend.roya.tv/api/v01/channels/schedule-pagination?day_number=0') + .then(r => r.data) + .catch(console.error) + + return data.data[0].channel.map(channel => { + return { + site_id: channel.id, + name: channel.title, + lang: 'ar' + } + }) + } +} + +function parseItems(content, date, channel) { + const dateString = date.format('YYYY-MM-DD') + + try { + const data = JSON.parse(content) + if (!data || !Array.isArray(data.data)) return [] + const dayData = data.data.find(item => item.date === dateString) + if (!dayData || !Array.isArray(dayData.channel)) return [] + const channelData = dayData.channel.find(item => item.id == channel.site_id) + if (!channelData || !Array.isArray(channelData.programs)) return [] + + return channelData.programs + } catch { + return [] + } +}