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

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="mbc.net">
<channels>
<channel lang="ar" xmltv_id="MBC1.ae" site_id="mbc1">MBC</channel>
<channel lang="ar" xmltv_id="MBC2.ae" site_id="mbc2">MBC 2</channel>
<channel lang="ar" xmltv_id="MBC4.ae" site_id="mbc4">MBC 4</channel>
<channel lang="ar" xmltv_id="MBC5.ae" site_id="mbc5">MBC 5</channel>
<channel lang="ar" xmltv_id="MBCAction.ae" site_id="mbc-action">MBC Action</channel>
<channel lang="ar" xmltv_id="MBCBollywood.ae" site_id="mbc-bollywood">MBC Bollywood</channel>
<channel lang="ar" xmltv_id="MBCDrama.ae" site_id="mbc-drama">MBC Drama</channel>
<channel lang="ar" xmltv_id="MBCPlusDrama.ae" site_id="mbc-drama-plus">MBC Drama +</channel>
<channel lang="ar" xmltv_id="MBCDramaUSA.ae" site_id="MBC-Drama-USA">MBC Drama USA</channel>
<channel lang="ar" xmltv_id="MBCIraq.ae" site_id="mbc-iraq">MBC Iraq</channel>
<channel lang="ar" xmltv_id="MBCMasr.eg" site_id="mbc-maser">MBC Maser</channel>
<channel lang="ar" xmltv_id="MBCMasr2.eg" site_id="mbc-maser2">MBC Maser 2</channel>
<channel lang="ar" xmltv_id="MBCMasrUSA.us" site_id="MBC-Egypt-USA">MBC Maser USA</channel>
<channel lang="ar" xmltv_id="MBCMax.ae" site_id="mbc-max">MBC Max</channel>
<channel lang="ar" xmltv_id="MBCPlusPower.ae" site_id="MBC-Power">MBC + Power</channel>
<channel lang="ar" xmltv_id="MBC1USA.us" site_id="MBC1-USA">MBC USA</channel>
<channel lang="ar" xmltv_id="Wanasah.ae" site_id="Wanasa">Wanasah</channel>
</channels>
</site>

View File

@@ -0,0 +1,41 @@
const dayjs = require('dayjs')
module.exports = {
site: 'mbc.net',
days: 2,
skip: true, // NOTE: there is no program on the site
url({ date, channel }) {
return `https://www.mbc.net/.rest/api/channel/grids?from=${date.valueOf()}&to=${date
.add(1, 'd')
.valueOf()}&channel=${channel.site_id}`
},
parser: function ({ content, channel, date }) {
let programs = []
const items = parseItems(content)
items.forEach(item => {
programs.push({
title: item.showPageTitle,
category: item.showPageGenreInArabic,
description: item.showPageAboutInArabic,
start: parseStart(item),
stop: parseStop(item)
})
})
return programs
}
}
function parseStart(item) {
return dayjs(item.startTime).toJSON()
}
function parseStop(item) {
return dayjs(item.endTime).toJSON()
}
function parseItems(content) {
const data = JSON.parse(content)
return data
}

View File

@@ -0,0 +1,45 @@
// npx epg-grabber --config=sites/mbc.net/mbc.net.config.js --channels=sites/mbc.net/mbc.net.channels.xml --output=guide.xml --days=2
const { parser, url } = require('./mbc.net.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('2021-11-06', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'mbc1',
xmltv_id: 'MBC.ae'
}
const content = `[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]`
it('can generate valid url', () => {
const result = url({ date, channel })
expect(result).toBe(
'https://www.mbc.net/.rest/api/channel/grids?from=1636156800000&to=1636243200000&channel=mbc1'
)
})
it('can parse response', () => {
const result = parser({ date, channel, content })
expect(result).toMatchObject([
{
start: '2021-11-05T23:32:11.000Z',
stop: '2021-11-06T00:16:46.000Z',
title: 'اختطاف',
category: ' دراما',
description:
'.يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع'
}
])
})
it('can handle empty guide', () => {
const result = parser({
date,
channel,
content: `[]`
})
expect(result).toMatchObject([])
})