Merge pull request #783 from iptv-org/update-beinsports.com

Update beinsports.com
This commit is contained in:
Aleksandr Statciuk 2022-05-08 18:44:16 +03:00 committed by GitHub
commit ee1afeec65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 152 additions and 4 deletions

View file

@ -17,10 +17,10 @@ let site
let channels = []
async function main() {
await api.channels.load()
let result = await parser.parseChannels(options.input)
site = result.site
channels = result.channels
await api.channels.load()
for (const channel of channels) {
if (channel.xmltv_id) continue
let choices = await getOptions(channel)

View file

@ -1,3 +1,4 @@
const axios = require('axios')
const cheerio = require('cheerio')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
@ -10,8 +11,11 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'beinsports.com',
url: function ({ date }) {
return `https://epg.beinsports.com/utctime.php?mins=00&serviceidentity=beinsports.com&cdate=${date.format(
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'
)}`
},
@ -46,6 +50,33 @@ module.exports = {
})
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
}
})
.filter(i => i)
}
}

View file

@ -1,4 +1,6 @@
// npm run channels:parse -- --config=./sites/beinsports.com/beinsports.com.config.js --output=./sites/beinsports.com/beinsports.com_qa-ar.channels.xml --set=lang:ar --set=region:ar
// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_qa-en.channels.xml --output=guide.xml --timeout=30000 --days=2
// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_qa-ar.channels.xml --output=guide.xml --timeout=30000 --days=2
const { parser, url } = require('./beinsports.com.config.js')
const fs = require('fs')
@ -13,12 +15,20 @@ const date = dayjs.utc('2022-05-08', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: '#1', xmltv_id: 'BeINSports.qa' }
it('can generate valid url', () => {
const result = url({ date })
const result = url({ date, channel })
expect(result).toBe(
'https://epg.beinsports.com/utctime.php?mins=00&serviceidentity=beinsports.com&cdate=2022-05-08'
)
})
it('can generate valid url for arabic guide', () => {
const channel = { site_id: 'ar#1', xmltv_id: 'BeINSports.qa' }
const result = url({ date, channel })
expect(result).toBe(
'https://epg.beinsports.com/utctime_ar.php?mins=00&serviceidentity=beinsports.com&cdate=2022-05-08'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve('sites/beinsports.com/__data__/content.html'))
const results = parser({ date, channel, content }).map(p => {

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="fr" xmltv_id="BeINSports1HDFrance.fr" site_id="france#1">BeIN Sports 1 HD France</channel>
<channel lang="fr" xmltv_id="BeINSports2HDFrance.fr" site_id="france#2">BeIN Sports 2 HD France</channel>
<channel lang="fr" xmltv_id="BeINSports3France.fr" site_id="france#3">BeIN Sports 3 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax4France.fr" site_id="france#4">BeIN Sports Max 4 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax5France.fr" site_id="france#5">BeIN Sports Max 5 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax6France.fr" site_id="france#6">BeIN Sports Max 6 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax7France.fr" site_id="france#7">BeIN Sports Max 7 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax8France.fr" site_id="france#8">BeIN Sports Max 8 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax9France.fr" site_id="france#9">BeIN Sports Max 9 France</channel>
<channel lang="fr" xmltv_id="BeINSportsMax10France.fr" site_id="france#10">BeIN Sports Max 10 France</channel>
</channels>
</site>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSports1HongKong.hk" site_id="hk#1">BeIN Sports 1 Hong Kong</channel>
<channel lang="en" xmltv_id="BeINSports2HongKong.hk" site_id="hk#2">BeIN Sports 2 Hong Kong</channel>
</channels>
</site>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSports1Indonesia.id" site_id="id#1">BeIN Sports 1 Indonesia</channel>
<channel lang="en" xmltv_id="BeINSports3Indonesia.id" site_id="id#2">BeIN Sports 3 Indonesia</channel>
</channels>
</site>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSports1MalaysiaSingapore.my" site_id="my#1">BeIN Sports 1 Malaysia &amp; Singapore</channel>
</channels>
</site>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSports1Philippines.ph" site_id="id#1">BeIN Sports 1 Philippines</channel>
<channel lang="en" xmltv_id="BeINSports3Philippines.ph" site_id="id#2">BeIN Sports 3 Philippines</channel>
</channels>
</site>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beINsports.com">
<channels>
<channel lang="ar" xmltv_id="BeINSports.qa" site_id="ar#1">beIN SPORTS FTA</channel>
<channel lang="ar" xmltv_id="BeINSportsNews.qa" site_id="ar#2">beIN SPORTS News</channel>
<channel lang="ar" xmltv_id="BeINSports2.qa" site_id="ar#3">beIN SPORTS2</channel>
<channel lang="ar" xmltv_id="BeINSports3.qa" site_id="ar#4">beIN SPORTS3</channel>
<channel lang="ar" xmltv_id="BeINSports4.qa" site_id="ar#5">beIN SPORTS4</channel>
<channel lang="ar" xmltv_id="BeINSports5.qa" site_id="ar#6">beIN SPORTS5</channel>
<channel lang="ar" xmltv_id="BeINSports6.qa" site_id="ar#7">beIN SPORTS6</channel>
<channel lang="ar" xmltv_id="BeINSports7.qa" site_id="ar#8">beIN SPORTS7</channel>
<channel lang="ar" xmltv_id="BeINSportsPremium3.qa" site_id="ar#9">beIN SPORTS3 PREMIUM</channel>
<channel lang="ar" xmltv_id="BeINSportsXtra1.qa" site_id="ar#10">beIN SPORTS XTRA1</channel>
<channel lang="ar" xmltv_id="BeINSportsXtra2.qa" site_id="ar#11">beIN SPORTS XTRA2</channel>
<channel lang="ar" xmltv_id="BeIN4K.qa" site_id="ar#12">beIN 4k</channel>
<channel lang="ar" xmltv_id="BeINSportsAFC.qa" site_id="ar#13">beIN SPORTS AFC</channel>
<channel lang="ar" xmltv_id="BeINSportsAFC1.qa" site_id="ar#14">beIN SPORTS AFC1</channel>
<channel lang="ar" xmltv_id="BeINSportsAFC2.qa" site_id="ar#15">beIN SPORTS AFC2</channel>
<channel lang="ar" xmltv_id="BeINSportsAFC3.qa" site_id="ar#16">beIN SPORTS AFC3</channel>
<channel lang="ar" xmltv_id="BeINSportsNBA.qa" site_id="ar#18">beIN SPORTS NBA</channel>
<channel lang="ar" xmltv_id="BeINSportsEnglish1.qa" site_id="ar#19">beIN SPORTS1 ENGLISH</channel>
<channel lang="ar" xmltv_id="BeINSportsEnglish2.qa" site_id="ar#20">beIN SPORTS2 ENGLISH</channel>
<channel lang="ar" xmltv_id="BeINSportsEnglish3.qa" site_id="ar#21">beIN SPORTS3 ENGLISH</channel>
<channel lang="ar" xmltv_id="BeINSportsFrench1.qa" site_id="ar#22">beIN SPORTS1 FRENCH</channel>
<channel lang="ar" xmltv_id="BeINSportsFrench2.qa" site_id="ar#23">beIN SPORTS2 FRENCH</channel>
<channel lang="ar" xmltv_id="BeINSportsFrench3.qa" site_id="ar#24">beIN SPORTS3 FRENCH</channel>
</channels>
</site>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSports1Thailand.th" site_id="th#1">BeIN Sports 1 Thailand</channel>
<channel lang="en" xmltv_id="BeINSports3Thailand.th" site_id="th#2">BeIN Sports 3 Thailand</channel>
</channels>
</site>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSportsUSA.us" site_id="us#1">BeIN Sports USA</channel>
<channel lang="en" xmltv_id="BeINSportsenEspanol.us" site_id="us#2">BeIN Sports en Español</channel>
<channel lang="en" xmltv_id="BeINSportsXtraUSA.us" site_id="us#3">BeIN Sports Xtra USA</channel>
<channel lang="en" xmltv_id="BeINSportsXtraenEspanol.us" site_id="us#4">BeIN Sports Xtra en Español</channel>
<channel lang="en" xmltv_id="BeINSports3USA.us" site_id="us#5">BeIN Sports 3 USA</channel>
<channel lang="en" xmltv_id="BeINSports4USA.us" site_id="us#6">BeIN Sports 4 USA</channel>
<channel lang="en" xmltv_id="BeINSports5USA.us" site_id="us#7">BeIN Sports 5 USA</channel>
<channel lang="en" xmltv_id="BeINSports6USA.us" site_id="us#8">BeIN Sports 6 USA</channel>
<channel lang="en" xmltv_id="BeINSports7USA.us" site_id="us#9">BeIN Sports 7 USA</channel>
<channel lang="en" xmltv_id="BeINSports8USA.us" site_id="us#10">BeIN Sports 8 USA</channel>
</channels>
</site>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="beinsports.com">
<channels>
<channel lang="en" xmltv_id="BeINSportsUSA.us" site_id="us_es#1">BeIN Sports USA</channel>
<channel lang="en" xmltv_id="BeINSportsenEspanol.us" site_id="us_es#2">BeIN Sports en Español</channel>
<channel lang="en" xmltv_id="BeINSportsXtraUSA.us" site_id="us_es#3">BeIN Sports Xtra USA</channel>
<channel lang="en" xmltv_id="BeINSportsXtraenEspanol.us" site_id="us_es#4">BeIN Sports Xtra en Español</channel>
<channel lang="en" xmltv_id="BeINSports3USA.us" site_id="us_es#5">BeIN Sports 3 USA</channel>
<channel lang="en" xmltv_id="BeINSports4USA.us" site_id="us_es#6">BeIN Sports 4 USA</channel>
<channel lang="en" xmltv_id="BeINSports5USA.us" site_id="us_es#7">BeIN Sports 5 USA</channel>
<channel lang="en" xmltv_id="BeINSports6USA.us" site_id="us_es#8">BeIN Sports 6 USA</channel>
<channel lang="en" xmltv_id="BeINSports7USA.us" site_id="us_es#9">BeIN Sports 7 USA</channel>
<channel lang="en" xmltv_id="BeINSports8USA.us" site_id="us_es#10">BeIN Sports 8 USA</channel>
</channels>
</site>