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 + +