Initial Commit

This commit is contained in:
2023-09-10 21:48:48 +02:00
commit 227cca7d31
791 changed files with 165200 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
<script type=text/javascript>var max_sports=-1;var max_entertainment=-1;</script>
<script>currenthour='21'</script><div class='container container-tvguide categoryheadercss'><div class='row no-gutter' style='margin-top:20px'>
<div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'>
<div id='sports' style='width:50%' class=category_item onclick=setparams('2023-01-19','0','00','sports','bein.net')>Sports</div><div id='entertainment' style='width:50%' class=category_item_selected>Entertainment</div></div></div><div class='row no-gutter'>
<div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'>
<table width=100% border=0 class=day_table><tr><td><span id=day1t1 style=width:100% class=day_item><a href=javascript:selectday('day1');setparams('2023-01-18','0','00','entertainment','bein.net')>Wed</a></span><span id=day1t2 style=width:100% class=day_item1><a href=javascript:selectday('day1');setparams('2023-01-18','0','00','entertainment','bein.net')>18</a></div></td><script language=javascript>lastday='day2';</script><td><div id=day2t1 style=width:100% class=day_item_selected><a href=javascript:setparams('2023-01-19','0','00','entertainment','bein.net')>Thu</a></div><div id=day2t2 style=width:100% class=day_item1_selected><a href=javascript:setparams('2023-01-19','0','00','entertainment','bein.net')>19</a></div></td><td><span id=day3t1 style=width:100% class=day_item><a href=javascript:selectday('day3');setparams('2023-01-20','0','00','entertainment','bein.net')>Fri</a></span><span id=day3t2 style=width:100% class=day_item1><a href=javascript:selectday('day3');setparams('2023-01-20','0','00','entertainment','bein.net')>20</a></div></td><td><span id=day4t1 style=width:100% class=day_item><a href=javascript:selectday('day4');setparams('2023-01-21','0','00','entertainment','bein.net')>Sat</a></span><span id=day4t2 style=width:100% class=day_item1><a href=javascript:selectday('day4');setparams('2023-01-21','0','00','entertainment','bein.net')>21</a></div></td></table></div>
</div><div class='row no-gutter'>
<div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'>
<div style='background-color:#d1d0de;margin:0px auto;text-align:center;display:flex;width:100%'><div id=left style=width:25px;background-color:red;height:50px;padding-top:13px;background-color:#d1d0de;><img src=https://www.bein.com/mena/wp-content/uploads/sites/4/2015/06/left.png onclick=ptime()></div><div id='slider_timer' class='slider_time'>
<ul id='timer'></ul></div><div id=left style=width:25px;background-color:red;height:50px;padding-top:13px;background-color:#d1d0de><img src=https://www.bein.com/mena/wp-content/uploads/sites/4/2015/06/right.png onclick=ntime()></div></div>
</div>
</div><div class='row no-gutter' style='height:15px'></div>
</div><div class='container container-tvguide contentheadercss_entertainment'></div>
</div>

View File

@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="bein.com">
<channels>
<!-- If updating, note that the English and Arabic channels are in a different order so have different IDs -->
<channel lang="en" xmltv_id="beINSportsNews.qa" site_id="sports#1">BeIn Sports News</channel>
<channel lang="en" xmltv_id="beINSports.qa" site_id="sports#2">BeIn Sports</channel>
<channel lang="en" xmltv_id="beINSports1.qa" site_id="sports#3">BeIn Sports 1</channel>
<channel lang="en" xmltv_id="beINSports2.qa" site_id="sports#4">BeIn Sports 2</channel>
<channel lang="en" xmltv_id="beINSports3.qa" site_id="sports#5">BeIn Sports 3</channel>
<channel lang="en" xmltv_id="beINSports4.qa" site_id="sports#6">BeIn Sports 4</channel>
<channel lang="en" xmltv_id="beINSports5.qa" site_id="sports#7">BeIn Sports 5</channel>
<channel lang="en" xmltv_id="beINSports6.qa" site_id="sports#8">BeIn Sports 6</channel>
<channel lang="en" xmltv_id="beINSports7.qa" site_id="sports#9">BeIn Sports 7</channel>
<channel lang="en" xmltv_id="beINSportsPremium1.qa" site_id="sports#10">BeIn Sports Premium 1</channel>
<channel lang="en" xmltv_id="beINSportsPremium2.qa" site_id="sports#11">BeIn Sports Premium 2</channel>
<channel lang="en" xmltv_id="beINSportsPremium3.qa" site_id="sports#12">BeIn Sports Premium 3</channel>
<channel lang="en" xmltv_id="beINSportsXtra1.qa" site_id="sports#13">BeIn Sports Xtra 1</channel>
<channel lang="en" xmltv_id="beINSportsXtra2.qa" site_id="sports#14">BeIn Sports Xtra 2</channel>
<channel lang="en" xmltv_id="beIN4K.qa" site_id="sports#15">BeIn 4K</channel>
<channel lang="en" xmltv_id="beINSportsAFC.qa" site_id="sports#16">BeIN Sports AFC</channel>
<channel lang="en" xmltv_id="beINSportsAFC1.qa" site_id="sports#17">BeIN Sports AFC 1</channel>
<channel lang="en" xmltv_id="beINSportsAFC2.qa" site_id="sports#18">BeIN Sports AFC 2</channel>
<channel lang="en" xmltv_id="beINSportsAFC3.qa" site_id="sports#19">BeIN Sports AFC 3</channel>
<channel lang="en" xmltv_id="beINSportsEnglish1.qa" site_id="sports#20">BeIn Sports English 1</channel>
<channel lang="en" xmltv_id="beINSportsEnglish2.qa" site_id="sports#21">BeIn Sports English 2</channel>
<channel lang="en" xmltv_id="beINSportsEnglish3.qa" site_id="sports#22">BeIn Sports English 3</channel>
<channel lang="en" xmltv_id="beINSportsNBA.qa" site_id="sports#23">BeIn NBA</channel>
<channel lang="en" xmltv_id="beINSportsFrench1.qa" site_id="sports#24">BeIn Sports French 1</channel>
<channel lang="en" xmltv_id="beINSportsFrench2.qa" site_id="sports#25">BeIn Sports French 2</channel>
<channel lang="en" xmltv_id="beINSportsFrench3.qa" site_id="sports#26">BeIn Sports French 3</channel>
<channel lang="en" xmltv_id="beINSportsMax1.qa" site_id="sports#27">beIN Sports Max 1</channel>
<channel lang="en" xmltv_id="beINSportsMax2.qa" site_id="sports#28">beIN Sports Max 2</channel>
<channel lang="en" xmltv_id="beINSportsMax3.qa" site_id="sports#29">beIN Sports Max 3</channel>
<channel lang="en" xmltv_id="beINSportsMax4.qa" site_id="sports#30">beIN Sports Max 4</channel>
<channel lang="en" xmltv_id="beINSportsMax5.qa" site_id="sports#31">beIN Sports Max 5</channel>
<channel lang="en" xmltv_id="beINSportsMax6.qa" site_id="sports#32">beIN Sports Max 6</channel>
<channel lang="en" xmltv_id="AlkassOne.qa" site_id="sports#33">Alkass One</channel>
<channel lang="en" xmltv_id="AlkassTwo.qa" site_id="sports#34">Alkass Two</channel>
<channel lang="en" xmltv_id="AlkassThree.qa" site_id="sports#35">Alkass Three</channel>
<channel lang="en" xmltv_id="AlkassFour.qa" site_id="sports#36">Alkass Four</channel>
<channel lang="en" xmltv_id="AlkassFive.qa" site_id="sports#37">Alkass Five</channel>
<channel lang="en" xmltv_id="AlkassSix.qa" site_id="sports#38">Alkass Six</channel>
<channel lang="en" xmltv_id="AlkassSeven.qa" site_id="sports#39">Alkass Seven</channel>
<channel lang="en" xmltv_id="AlkassEight.qa" site_id="sports#40">Alkass Eight</channel>
<channel lang="ar" xmltv_id="beINSportsNews.qa" site_id="sports#1">BeIn Sports News</channel>
<channel lang="ar" xmltv_id="beINSports.qa" site_id="sports#2">BeIn Sports</channel>
<channel lang="ar" xmltv_id="beINSports1.qa" site_id="sports#3">BeIn Sports 1</channel>
<channel lang="ar" xmltv_id="beINSports2.qa" site_id="sports#4">BeIn Sports 2</channel>
<channel lang="ar" xmltv_id="beINSports3.qa" site_id="sports#5">BeIn Sports 3</channel>
<channel lang="ar" xmltv_id="beINSports4.qa" site_id="sports#6">BeIn Sports 4</channel>
<channel lang="ar" xmltv_id="beINSports5.qa" site_id="sports#7">BeIn Sports 5</channel>
<channel lang="ar" xmltv_id="beINSports6.qa" site_id="sports#8">BeIn Sports 6</channel>
<channel lang="ar" xmltv_id="beINSports7.qa" site_id="sports#9">BeIn Sports 7</channel>
<channel lang="ar" xmltv_id="beINSportsPremium1.qa" site_id="sports#10">BeIn Sports Premium 1</channel>
<channel lang="ar" xmltv_id="beINSportsPremium2.qa" site_id="sports#11">BeIn Sports Premium 2</channel>
<channel lang="ar" xmltv_id="beINSportsPremium3.qa" site_id="sports#12">BeIn Sports Premium 3</channel>
<channel lang="ar" xmltv_id="beINSportsXtra1.qa" site_id="sports#13">BeIn Sports Xtra 1</channel>
<channel lang="ar" xmltv_id="beINSportsXtra2.qa" site_id="sports#14">BeIn Sports Xtra 2</channel>
<channel lang="ar" xmltv_id="beIN4K.qa" site_id="sports#15">BeIn 4K</channel>
<channel lang="ar" xmltv_id="beINSportsAFC.qa" site_id="sports#16">BeIN Sports AFC</channel>
<channel lang="ar" xmltv_id="beINSportsAFC1.qa" site_id="sports#17">BeIN Sports AFC 1</channel>
<channel lang="ar" xmltv_id="beINSportsAFC2.qa" site_id="sports#18">BeIN Sports AFC 2</channel>
<channel lang="ar" xmltv_id="beINSportsAFC3.qa" site_id="sports#19">BeIN Sports AFC 3</channel>
<channel lang="ar" xmltv_id="beINSportsEnglish1.qa" site_id="sports#20">BeIn Sports English 1</channel>
<channel lang="ar" xmltv_id="beINSportsEnglish2.qa" site_id="sports#21">BeIn Sports English 2</channel>
<channel lang="ar" xmltv_id="beINSportsEnglish3.qa" site_id="sports#22">BeIn Sports English 3</channel>
<channel lang="ar" xmltv_id="beINSportsNBA.qa" site_id="sports#23">BeIn NBA</channel>
<channel lang="ar" xmltv_id="beINSportsFrench1.qa" site_id="sports#24">BeIn Sports French 1</channel>
<channel lang="ar" xmltv_id="beINSportsFrench2.qa" site_id="sports#25">BeIn Sports French 2</channel>
<channel lang="ar" xmltv_id="beINSportsFrench3.qa" site_id="sports#26">BeIn Sports French 3</channel>
<channel lang="ar" xmltv_id="beINSportsMax1.qa" site_id="sports#27">beIN Sports Max 1</channel>
<channel lang="ar" xmltv_id="beINSportsMax2.qa" site_id="sports#28">beIN Sports Max 2</channel>
<channel lang="ar" xmltv_id="beINSportsMax3.qa" site_id="sports#29">beIN Sports Max 3</channel>
<channel lang="ar" xmltv_id="beINSportsMax4.qa" site_id="sports#30">beIN Sports Max 4</channel>
<channel lang="ar" xmltv_id="beINSportsMax5.qa" site_id="sports#31">beIN Sports Max 5</channel>
<channel lang="ar" xmltv_id="beINSportsMax6.qa" site_id="sports#32">beIN Sports Max 6</channel>
<channel lang="ar" xmltv_id="AlkassThree.qa" site_id="sports#33">Alkass Three</channel>
<channel lang="ar" xmltv_id="AlkassOne.qa" site_id="sports#34">Alkass One</channel>
<channel lang="ar" xmltv_id="AlkassTwo.qa" site_id="sports#35">Alkass Two</channel>
<channel lang="ar" xmltv_id="AlkassFour.qa" site_id="sports#36">Alkass Four</channel>
<channel lang="ar" xmltv_id="AlkassFive.qa" site_id="sports#37">Alkass Five</channel>
<channel lang="ar" xmltv_id="AlkassSix.qa" site_id="sports#38">Alkass Six</channel>
<channel lang="ar" xmltv_id="AlkassSeven.qa" site_id="sports#39">Alkass Seven</channel>
<channel lang="ar" xmltv_id="AlkassEight.qa" site_id="sports#40">Alkass Eight</channel>
<channel lang="en" xmltv_id="beINMovies1Premiere.qa" site_id="entertainment#1">beIN Movies Premiere</channel>
<channel lang="en" xmltv_id="beINMovies2Action.qa" site_id="entertainment#2">beIN Movies Action</channel>
<channel lang="en" xmltv_id="beINMovies3Drama.qa" site_id="entertainment#3">bein Movies Drama</channel>
<channel lang="en" xmltv_id="beINMovies4Family.qa" site_id="entertainment#4">beIN Movies Family</channel>
<channel lang="en" xmltv_id="FoxMoviesMiddleEast.us" site_id="entertainment#5">FOX Movies</channel>
<channel lang="en" xmltv_id="FoxActionMoviesMiddleEast.hk" site_id="entertainment#6">FOX Action Movies</channel>
<channel lang="en" xmltv_id="StarMoviesMiddleEast.ae" site_id="entertainment#7">Star Movies</channel>
<channel lang="en" xmltv_id="beINSeries1.qa" site_id="entertainment#8">beIN Series 1</channel>
<channel lang="en" xmltv_id="beINSeries2.qa" site_id="entertainment#9">beIN Series 2</channel>
<channel lang="en" xmltv_id="beINDrama1.qa" site_id="entertainment#10">beIN Drama 1</channel>
<channel lang="en" xmltv_id="beINGourmet.qa" site_id="entertainment#11">beIN Gourmet</channel>
<channel lang="en" xmltv_id="TravelChannelEMEA.uk" site_id="entertainment#12">Travel Channel</channel>
<channel lang="en" xmltv_id="FoxArabia.ae" site_id="entertainment#13">FOX</channel>
<channel lang="en" xmltv_id="FoodNetworkEMEA.us" site_id="entertainment#14">Food Network</channel>
<channel lang="en" xmltv_id="HGTVArabia.us" site_id="entertainment#15">HGTV</channel>
<channel lang="en" xmltv_id="StarWorldMiddleEast.ae" site_id="entertainment#16">Star World</channel>
<channel lang="en" xmltv_id="Fatafeat.ae" site_id="entertainment#17">Fatafeat</channel>
<channel lang="en" xmltv_id="FoxLifeMiddleEast.ae" site_id="entertainment#18">FOX Life</channel>
<channel lang="en" xmltv_id="MTV80s.uk" site_id="entertainment#19">MTV 80s</channel>
<channel lang="en" xmltv_id="MTV90s.uk" site_id="entertainment#20">MTV 90s</channel>
<channel lang="en" xmltv_id="ClubMTVEurope.uk" site_id="entertainment#21">Club MTV</channel>
<channel lang="en" xmltv_id="BloombergTVMiddleEast.ae" site_id="entertainment#22">Bloomberg TV</channel>
<channel lang="en" xmltv_id="NationalGeographicMiddleEast.uk" site_id="entertainment#23">National Geographic</channel>
<channel lang="en" xmltv_id="NationalGeographicWildMiddleEast.uk" site_id="entertainment#24">National Geographic Wild</channel>
<channel lang="en" xmltv_id="BBCEarthMiddleEast.uk" site_id="entertainment#25">BBC Earth</channel>
<channel lang="en" xmltv_id="CNNArabic.ae" site_id="entertainment#26">CNN</channel>
<channel lang="en" xmltv_id="EuronewsEnglish.fr" site_id="entertainment#27">EuroNews</channel>
<channel lang="en" xmltv_id="DiscoveryChannelMiddleEastAfrica.us" site_id="entertainment#28">Discovery</channel>
<channel lang="en" xmltv_id="BeJunior.qa" site_id="entertainment#29">be Junior</channel>
<channel lang="en" xmltv_id="JeemTV.qa" site_id="entertainment#30">Jeem</channel>
<channel lang="en" xmltv_id="Baraem.qa" site_id="entertainment#31">Baraem</channel>
<channel lang="en" xmltv_id="CartoonNetworkMENA.uk" site_id="entertainment#32">Cartoon Network</channel>
<channel lang="en" xmltv_id="CartoonNetworkArabic.ae" site_id="entertainment#33">Cartoon Network Arabic</channel>
<channel lang="en" xmltv_id="CartoonNetworkHindi.in" site_id="entertainment#34">Cartoon Network Hindi</channel>
<channel lang="en" xmltv_id="BabyTV.uk" site_id="entertainment#35">Baby TV</channel>
<channel lang="en" xmltv_id="CBeebiesMiddleEast.uk" site_id="entertainment#36">CBeebies</channel>
<channel lang="en" xmltv_id="DreamWorksChannelMiddleEast.us" site_id="entertainment#37">DreamWorks</channel>
<channel lang="ar" xmltv_id="beINMovies1Premiere.qa" site_id="entertainment#1">beIN Movies Premiere</channel>
<channel lang="ar" xmltv_id="beINMovies2Action.qa" site_id="entertainment#2">beIN Movies Action</channel>
<channel lang="ar" xmltv_id="beINMovies3Drama.qa" site_id="entertainment#3">bein Movies Drama</channel>
<channel lang="ar" xmltv_id="beINMovies4Family.qa" site_id="entertainment#4">beIN Movies Family</channel>
<channel lang="ar" xmltv_id="FoxMoviesMiddleEast.us" site_id="entertainment#5">FOX Movies</channel>
<channel lang="ar" xmltv_id="FoxActionMoviesMiddleEast.hk" site_id="entertainment#6">FOX Action Movies</channel>
<channel lang="ar" xmltv_id="StarMoviesMiddleEast.ae" site_id="entertainment#7">Star Movies</channel>
<channel lang="ar" xmltv_id="beINSeries1.qa" site_id="entertainment#8">beIN Series 1</channel>
<channel lang="ar" xmltv_id="beINSeries2.qa" site_id="entertainment#9">beIN Series 2</channel>
<channel lang="ar" xmltv_id="beINDrama1.qa" site_id="entertainment#10">beIN Drama 1</channel>
<channel lang="ar" xmltv_id="beINGourmet.qa" site_id="entertainment#11">beIN Gourmet</channel>
<channel lang="ar" xmltv_id="TravelChannelEMEA.uk" site_id="entertainment#12">Travel Channel</channel>
<channel lang="ar" xmltv_id="FoxArabia.ae" site_id="entertainment#13">FOX</channel>
<channel lang="ar" xmltv_id="FoodNetworkEMEA.us" site_id="entertainment#14">Food Network</channel>
<channel lang="ar" xmltv_id="HGTVArabia.us" site_id="entertainment#15">HGTV</channel>
<channel lang="ar" xmltv_id="StarWorldMiddleEast.ae" site_id="entertainment#16">Star World</channel>
<channel lang="ar" xmltv_id="Fatafeat.ae" site_id="entertainment#17">Fatafeat</channel>
<channel lang="ar" xmltv_id="MTV80s.uk" site_id="entertainment#18">MTV 80s</channel>
<channel lang="ar" xmltv_id="MTV90s.uk" site_id="entertainment#19">MTV 90s</channel>
<channel lang="ar" xmltv_id="ClubMTVEurope.uk" site_id="entertainment#20">Club MTV</channel>
<channel lang="ar" xmltv_id="BeJunior.qa" site_id="entertainment#21">be Junior</channel>
<channel lang="ar" xmltv_id="BloombergTVMiddleEast.ae" site_id="entertainment#22">Bloomberg TV</channel>
<channel lang="ar" xmltv_id="NationalGeographicMiddleEast.uk" site_id="entertainment#23">National Geographic</channel>
<channel lang="ar" xmltv_id="NationalGeographicWildMiddleEast.uk" site_id="entertainment#24">National Geographic Wild</channel>
<channel lang="ar" xmltv_id="BBCEarthMiddleEast.uk" site_id="entertainment#25">BBC Earth</channel>
<channel lang="ar" xmltv_id="AlJazeeraDocumentary.qa" site_id="entertainment#26">Al Jazeera Documentary</channel>
<channel lang="ar" xmltv_id="CNNArabic.ae" site_id="entertainment#27">CNN</channel>
<channel lang="ar" xmltv_id="EuronewsEnglish.fr" site_id="entertainment#28">EuroNews</channel>
<channel lang="ar" xmltv_id="JeemTV.qa" site_id="entertainment#29">Jeem</channel>
<channel lang="ar" xmltv_id="Baraem.qa" site_id="entertainment#30">Baraem</channel>
<channel lang="ar" xmltv_id="CBeebiesMiddleEast.uk" site_id="entertainment#31">CBeebies</channel>
<channel lang="ar" xmltv_id="BabyTV.uk" site_id="entertainment#32">Baby TV</channel>
<channel lang="ar" xmltv_id="CartoonNetworkMENA.uk" site_id="entertainment#33">Cartoon Network</channel>
<channel lang="ar" xmltv_id="CartoonNetworkArabic.ae" site_id="entertainment#34">Cartoon Network Arabic</channel>
<channel lang="ar" xmltv_id="CartoonNetworkHindi.in" site_id="entertainment#35">Cartoon Network Hindi</channel>
<channel lang="ar" xmltv_id="DreamWorksChannelMiddleEast.us" site_id="entertainment#36">DreamWorks</channel>
</channels>
</site>

View File

@@ -0,0 +1,84 @@
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: 'bein.com',
days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
}
},
url: function ({ date, channel }) {
const [category] = channel.site_id.split('#')
const postid = (channel.lang === 'ar') ? '25344' : '25356'
return `https://www.bein.com/${channel.lang}/epg-ajax-template/?action=epg_fetch&category=${category}&cdate=${date.format(
'YYYY-MM-DD'
)}&language=${channel.lang.toUpperCase()}&loadindex=0&mins=00&offset=0&postid=${postid}&serviceidentity=bein.net`
},
parser: function ({ content, channel, date }) {
let programs = []
const items = parseItems(content, channel)
date = date.subtract(1, 'd')
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 = parseTime($item, date)
if (prev) {
if (start.isBefore(prev.start)) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
}
let stop = parseTime($item, start)
if (stop.isBefore(start)) {
stop = stop.add(1, 'd')
}
programs.push({
title,
category,
start,
stop
})
})
return programs
}
}
function parseTitle($item) {
return $item('.title').text()
}
function parseCategory($item) {
return $item('.format').text()
}
function parseTime($item, date) {
let [_, time] = $item('.time')
.text()
.match(/^(\d{2}:\d{2})/) || [null, null]
if (!time) return null
time = `${date.format('YYYY-MM-DD')} ${time}`
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', '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()
}

View File

@@ -0,0 +1,60 @@
// npx epg-grabber --config=sites/bein.com/bein.com.config.js --channels=sites/bein.com/bein.com.channels.xml --output=guide.xml --timeout=30000 --days=2
const fs = require('fs')
const path = require('path')
const { parser, url } = require('./bein.com.config.js')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2023-01-19', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: 'entertainment#1', xmltv_id: 'beINMovies1Premiere.qa', lang: 'en' }
it('can generate valid url', () => {
const result = url({ date, channel })
expect(result).toBe(
'https://www.bein.com/en/epg-ajax-template/?action=epg_fetch&category=entertainment&cdate=2023-01-19&language=EN&loadindex=0&mins=00&offset=0&postid=25356&serviceidentity=bein.net'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve('sites/bein.com/__data__/content.html'))
const results = parser({ date, channel, content }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2023-01-18T20:15:00.000Z',
stop: '2023-01-18T22:15:00.000Z',
title: 'The Walk',
category: 'Movies'
})
expect(results[1]).toMatchObject({
start: '2023-01-18T22:15:00.000Z',
stop: '2023-01-19T00:00:00.000Z',
title: 'Resident Evil: Welcome To Raccoon City',
category: 'Movies'
})
expect(results[10]).toMatchObject({
start: '2023-01-19T15:30:00.000Z',
stop: '2023-01-19T18:00:00.000Z',
title: 'Spider-Man: No Way Home',
category: 'Movies'
})
})
it('can handle empty guide', () => {
const noContent = fs.readFileSync(path.resolve('sites/bein.com/__data__/no-content.html'))
const result = parser({
date,
channel,
content: noContent
})
expect(result).toMatchObject([])
})