diff --git a/scripts/commands/channels/editor.js b/scripts/commands/channels/editor.js
index 94e37caf..82432924 100644
--- a/scripts/commands/channels/editor.js
+++ b/scripts/commands/channels/editor.js
@@ -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)
diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js
index d7d269ce..b09136ce 100644
--- a/sites/beinsports.com/beinsports.com.config.js
+++ b/sites/beinsports.com/beinsports.com.config.js
@@ -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)
}
}
diff --git a/sites/beinsports.com/beinsports.com.test.js b/sites/beinsports.com/beinsports.com.test.js
index 5596e5bd..ecfb91f0 100644
--- a/sites/beinsports.com/beinsports.com.test.js
+++ b/sites/beinsports.com/beinsports.com.test.js
@@ -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 => {
diff --git a/sites/beinsports.com/beinsports.com_fr.channels.xml b/sites/beinsports.com/beinsports.com_fr.channels.xml
new file mode 100644
index 00000000..4798dfe0
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_fr.channels.xml
@@ -0,0 +1,15 @@
+
+
+
+ BeIN Sports 1 HD France
+ BeIN Sports 2 HD France
+ BeIN Sports 3 France
+ BeIN Sports Max 4 France
+ BeIN Sports Max 5 France
+ BeIN Sports Max 6 France
+ BeIN Sports Max 7 France
+ BeIN Sports Max 8 France
+ BeIN Sports Max 9 France
+ BeIN Sports Max 10 France
+
+
diff --git a/sites/beinsports.com/beinsports.com_hk.channels.xml b/sites/beinsports.com/beinsports.com_hk.channels.xml
new file mode 100644
index 00000000..3b0c213e
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_hk.channels.xml
@@ -0,0 +1,7 @@
+
+
+
+ BeIN Sports 1 Hong Kong
+ BeIN Sports 2 Hong Kong
+
+
diff --git a/sites/beinsports.com/beinsports.com_id.channels.xml b/sites/beinsports.com/beinsports.com_id.channels.xml
new file mode 100644
index 00000000..fd6f87e2
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_id.channels.xml
@@ -0,0 +1,7 @@
+
+
+
+ BeIN Sports 1 Indonesia
+ BeIN Sports 3 Indonesia
+
+
diff --git a/sites/beinsports.com/beinsports.com_my.channels.xml b/sites/beinsports.com/beinsports.com_my.channels.xml
new file mode 100644
index 00000000..6a935c70
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_my.channels.xml
@@ -0,0 +1,6 @@
+
+
+
+ BeIN Sports 1 Malaysia & Singapore
+
+
diff --git a/sites/beinsports.com/beinsports.com_ph.channels.xml b/sites/beinsports.com/beinsports.com_ph.channels.xml
new file mode 100644
index 00000000..b968c646
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_ph.channels.xml
@@ -0,0 +1,7 @@
+
+
+
+ BeIN Sports 1 Philippines
+ BeIN Sports 3 Philippines
+
+
diff --git a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml
new file mode 100644
index 00000000..d4d82643
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml
@@ -0,0 +1,28 @@
+
+
+
+ beIN SPORTS FTA
+ beIN SPORTS News
+ beIN SPORTS2
+ beIN SPORTS3
+ beIN SPORTS4
+ beIN SPORTS5
+ beIN SPORTS6
+ beIN SPORTS7
+ beIN SPORTS3 PREMIUM
+ beIN SPORTS XTRA1
+ beIN SPORTS XTRA2
+ beIN 4k
+ beIN SPORTS AFC
+ beIN SPORTS AFC1
+ beIN SPORTS AFC2
+ beIN SPORTS AFC3
+ beIN SPORTS NBA
+ beIN SPORTS1 ENGLISH
+ beIN SPORTS2 ENGLISH
+ beIN SPORTS3 ENGLISH
+ beIN SPORTS1 FRENCH
+ beIN SPORTS2 FRENCH
+ beIN SPORTS3 FRENCH
+
+
diff --git a/sites/beinsports.com/beinsports.com_th.channels.xml b/sites/beinsports.com/beinsports.com_th.channels.xml
new file mode 100644
index 00000000..16cfab6f
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_th.channels.xml
@@ -0,0 +1,7 @@
+
+
+
+ BeIN Sports 1 Thailand
+ BeIN Sports 3 Thailand
+
+
diff --git a/sites/beinsports.com/beinsports.com_us-en.channels.xml b/sites/beinsports.com/beinsports.com_us-en.channels.xml
new file mode 100644
index 00000000..fb939bd6
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_us-en.channels.xml
@@ -0,0 +1,15 @@
+
+
+
+ BeIN Sports USA
+ BeIN Sports en Español
+ BeIN Sports Xtra USA
+ BeIN Sports Xtra en Español
+ BeIN Sports 3 USA
+ BeIN Sports 4 USA
+ BeIN Sports 5 USA
+ BeIN Sports 6 USA
+ BeIN Sports 7 USA
+ BeIN Sports 8 USA
+
+
diff --git a/sites/beinsports.com/beinsports.com_us-es.channels.xml b/sites/beinsports.com/beinsports.com_us-es.channels.xml
new file mode 100644
index 00000000..98b9fd82
--- /dev/null
+++ b/sites/beinsports.com/beinsports.com_us-es.channels.xml
@@ -0,0 +1,15 @@
+
+
+
+ BeIN Sports USA
+ BeIN Sports en Español
+ BeIN Sports Xtra USA
+ BeIN Sports Xtra en Español
+ BeIN Sports 3 USA
+ BeIN Sports 4 USA
+ BeIN Sports 5 USA
+ BeIN Sports 6 USA
+ BeIN Sports 7 USA
+ BeIN Sports 8 USA
+
+