From a55433d27bee3c26fd902a93384917c566366c8e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 22 Nov 2023 22:39:24 +0300 Subject: [PATCH] Create tvireland.ie.config.js --- sites/tvireland.ie/tvireland.ie.config.js | 99 +++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 sites/tvireland.ie/tvireland.ie.config.js diff --git a/sites/tvireland.ie/tvireland.ie.config.js b/sites/tvireland.ie/tvireland.ie.config.js new file mode 100644 index 00000000..93e712af --- /dev/null +++ b/sites/tvireland.ie/tvireland.ie.config.js @@ -0,0 +1,99 @@ +const cheerio = require('cheerio') +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: 'tvireland.ie', + days: 2, + url: function ({ date, channel }) { + return `https://www.tvireland.ie/tv/listings/channel/${channel.site_id}?dt=${date.format( + 'YYYY-MM-DD' + )}` + }, + parser: function ({ content, date, channel }) { + const programs = [] + const items = parseItems(content) + items.forEach(item => { + const prev = programs[programs.length - 1] + const $item = cheerio.load(item) + let start = parseStart($item, date, channel) + if (prev) { + if (start.isBefore(prev.start)) { + start = start.add(1, 'd') + date = date.add(1, 'd') + } + prev.stop = start + } + const stop = start.add(30, 'm') + programs.push({ + title: parseTitle($item), + start, + stop + }) + }) + + return programs + }, + async channels() { + const axios = require('axios') + const _ = require('lodash') + + const providers = ['-9000019', '-8000019', '-1000019', '-2000019', '-7000019'] + + const channels = [] + for (let provider of providers) { + const data = await axios + .post(`https://www.tvireland.ie/tv/schedule`, null, { + params: { + provider, + region: 'Ireland', + TVperiod: 'Night', + date: dayjs().format('YYYY-MM-DD'), + st: 0, + u_time: 2027, + is_mobile: 1 + } + }) + .then(r => r.data) + .catch(console.log) + + const $ = cheerio.load(data) + $('.channelname').each((i, el) => { + const name = $(el).find('center > a:eq(1)').text() + const url = $(el).find('center > a:eq(1)').attr('href') + const [, number, slug] = url.match(/\/(\d+)\/(.*)\.html$/) + + channels.push({ + lang: 'en', + name, + site_id: `${number}/${slug}` + }) + }) + } + + return _.uniqBy(channels, 'site_id') + } +} + +function parseStart($item, date, channel) { + const timeString = $item('td:eq(0)').text().trim() + const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` + + return dayjs.tz(dateString, 'YYYY-MM-DD H:mm a', 'Europe/Dublin') +} + +function parseTitle($item) { + return $item('td:eq(1)').text().trim() +} + +function parseItems(content) { + const $ = cheerio.load(content) + + return $('table.table > tbody > tr').toArray() +}