From 5d68c721d4034d910383b5f1ff4ada575428563f Mon Sep 17 00:00:00 2001 From: Sicilykill <95044302+Sicilykill@users.noreply.github.com> Date: Sun, 22 Oct 2023 16:14:31 -0500 Subject: [PATCH] Update beinsports.com.config.js Update beinsports.com config.js to pull from new api end point. --- sites/beinsports.com/beinsports.com.config.js | 131 ++++-------------- 1 file changed, 26 insertions(+), 105 deletions(-) diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js index 2b443798..f6cc721b 100644 --- a/sites/beinsports.com/beinsports.com.config.js +++ b/sites/beinsports.com/beinsports.com.config.js @@ -13,118 +13,39 @@ module.exports = { site: 'beinsports.com', days: 2, request: { - cache: { - ttl: 60 * 60 * 1000, // 1h - interpretHeader: false + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } }, url: function ({ date, channel }) { - let [region] = channel.site_id.split('#') - region = region ? `_${region}` : '' - - return `https://epg.beinsports.com/utctime${region}.php?mins=00&serviceidentity=beinsports.com&cdate=${date.format( - 'YYYY-MM-DD' - )}` + return `https://www.beinsports.com/api/opta/tv-event?&startBefore=${date.add(1, 'd').format( + "YYYY-MM-DDTHH:mm:ss.SSS")}Z&endAfter=${date.format( + "YYYY-MM-DDTHH:mm:ss.SSS")}Z&channelIds=${channel.site_id}` }, - parser: function ({ content, channel, date }) { + parser: function ({ content }) { let programs = [] - const items = parseItems(content, channel) - let i = 0 - items.forEach(item => { - const $item = cheerio.load(item) - const title = parseTitle($item) - if (!title) return - const category = parseCategory($item) - const prev = programs[programs.length - 1] - let start = parseStart($item, date) - if (i === 0 && start.hour() > 18) { - date = date.subtract(1, 'd') - start = start.subtract(1, 'd') - } - if (prev) { - if (start.isBefore(prev.start)) { - start = start.add(1, 'd') - date = date.add(1, 'd') - } - prev.stop = start - } - let stop = parseStop($item, start) - if (stop.isBefore(start)) { - stop = stop.add(1, 'd') - } - - programs.push({ title, category, start, stop }) - i++ - }) - - return programs - }, - async channels({ region, lang }) { - const suffix = region ? `_${region}` : '' - const content = await axios - .get( - `https://epg.beinsports.com/utctime${suffix}.php?mins=00&serviceidentity=beinsports.com&cdate=2022-05-08` - ) - .then(r => r.data) - .catch(console.log) - const $ = cheerio.load(content) - const items = $('.container > div, #epg_div > div').toArray() - return items - .map(item => { - const $item = cheerio.load(item) - const id = $item('*').attr('id') - if (!/^channels_[0-9]+$/.test(id)) return null - const channelId = id.replace('channels_', '') - const imgSrc = $item('img').attr('src') - const [, , name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] - - return { - lang, - site_id: `${region}#${channelId}`, - name - } + const items = parseItems(content) + if (!items.length == 0) { + items.forEach(item => { + const start = dayjs.utc(item.startDate) + const stop = dayjs.utc(item.endDate) + programs.push({ + title: item.title, + description: item.description, + start, + stop + }) }) - .filter(i => i) + } + return programs } } -function parseTitle($item) { - return $item('.title').text() -} - -function parseCategory($item) { - return $item('.format') - .map(function () { - return $item(this).text() - }) - .get() -} - -function parseStart($item, date) { - let time = $item('.time').text() - if (!time) return null - let [, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] - if (!start) return null - start = `${date.format('YYYY-MM-DD')} ${start}${period}` - const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' - - return dayjs.tz(start, format, 'Asia/Qatar') -} - -function parseStop($item, date) { - let time = $item('.time').text() - if (!time) return null - let [, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] - if (!stop) return null - stop = `${date.format('YYYY-MM-DD')} ${stop}${period}` - const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' - - return dayjs.tz(stop, format, 'Asia/Qatar') -} - -function parseItems(content, channel) { - const [, channelId] = channel.site_id.split('#') - const $ = cheerio.load(content) - - return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() +function parseItems(content) { + const data = JSON.parse(content) + if (data.length === 0) { + return [] + } + return data['rows'] }