Initial Commit
This commit is contained in:
10504
sites/bein.com/__data__/content.html
Normal file
10504
sites/bein.com/__data__/content.html
Normal file
File diff suppressed because it is too large
Load Diff
19
sites/bein.com/__data__/no-content.html
Normal file
19
sites/bein.com/__data__/no-content.html
Normal 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>
|
||||
162
sites/bein.com/bein.com.channels.xml
Normal file
162
sites/bein.com/bein.com.channels.xml
Normal 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>
|
||||
84
sites/bein.com/bein.com.config.js
Normal file
84
sites/bein.com/bein.com.config.js
Normal 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()
|
||||
}
|
||||
60
sites/bein.com/bein.com.test.js
Normal file
60
sites/bein.com/bein.com.test.js
Normal 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([])
|
||||
})
|
||||
Reference in New Issue
Block a user