diff --git a/sites/port.hu/port.hu.config.js b/sites/port.hu/port.hu.config.js new file mode 100644 index 00000000..fe3c1fae --- /dev/null +++ b/sites/port.hu/port.hu.config.js @@ -0,0 +1,65 @@ +const axios = require('axios') +const dayjs = require('dayjs') + +module.exports = { + site: 'port.hu', + url({ channel, date }) { + return `https://port.hu/tvapi?channel_id[]=tvchannel-${ + channel.site_id + }&i_datetime_from=${date.format('YYYY-MM-DD')}&i_datetime_to=${date.format('YYYY-MM-DD')}` + }, + parser({ content, channel }) { + const items = parseItems(content, channel) + + let programs = [] + + items.forEach(item => { + programs.push({ + title: item.title, + subtitle: item.episode_title, + description: item.description || item.short_description, + category: item.restriction?.category, + start: dayjs.unix(item.start_ts), + stop: dayjs(item.end_datetime) + }) + }) + + return programs + }, + async channels() { + const data = await axios + .get('https://port.hu/tvapi/init-new') + .then(r => r.data) + .catch(console.error) + + return data.channels.map(channel => { + const [, site_id] = channel.id.split('-') + + return { + site_id, + name: channel.name, + lang: 'hu' + } + }) + } +} + +function parseItems(content, channel) { + try { + const data = JSON.parse(content) + if (!data) return [] + + const firstElement = Object.values(data)[0] + if (!firstElement || !Array.isArray(firstElement.channels)) return [] + + const channelData = firstElement.channels.find( + _channel => _channel.id === `tvchannel-${channel.site_id}` + ) + + if (!channelData || !Array.isArray(channelData.programs)) return [] + + return channelData.programs + } catch { + return [] + } +}