mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
commit
6117e4705d
3 changed files with 134 additions and 68 deletions
|
@ -7,78 +7,41 @@ const customParseFormat = require('dayjs/plugin/customParseFormat')
|
|||
dayjs.extend(isBetween)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
const API_ENDPOINT = 'https://raw.githubusercontent.com/matthuisman/i.mjh.nz/master'
|
||||
|
||||
module.exports = {
|
||||
site: 'i.mjh.nz',
|
||||
request: {
|
||||
cache: {
|
||||
ttl: 6 * 60 * 60 * 1000 // 6h
|
||||
ttl: 3 * 60 * 60 * 1000 // 3h
|
||||
},
|
||||
maxContentLength: 20 * 1024 * 1024 // 20Mb
|
||||
maxContentLength: 30 * 1024 * 1024 // 30Mb
|
||||
},
|
||||
url: function ({ channel }) {
|
||||
const [source] = channel.site_id.split('#')
|
||||
const [path] = channel.site_id.split('#')
|
||||
|
||||
return `https://raw.githubusercontent.com/matthuisman/i.mjh.nz/master/${source}.xml`
|
||||
return `${API_ENDPOINT}/${path}.xml`
|
||||
},
|
||||
parser: function ({ content, channel, date, cached }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, channel, date)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: parseTitle(item, channel),
|
||||
description: parseDescription(item, channel),
|
||||
category: parseCategory(item, channel),
|
||||
start: parseStart(item),
|
||||
stop: parseStop(item)
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
return parseItems(content, channel, date)
|
||||
},
|
||||
async channels({ path, lang = 'en' }) {
|
||||
const [service] = path.split('/')
|
||||
let data = await axios
|
||||
.get(`https://i.mjh.nz/${service}/app.json`)
|
||||
let xml = await axios
|
||||
.get(`${API_ENDPOINT}/${path}.xml`)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
let data = parser.parse(xml)
|
||||
|
||||
const channels = []
|
||||
const items = data.channels || data
|
||||
for (let id in items) {
|
||||
const channel = items[id]
|
||||
channels.push({
|
||||
return data.channels.map(channel => {
|
||||
return {
|
||||
lang,
|
||||
site_id: `${path}#${id}`,
|
||||
name: channel.name
|
||||
})
|
||||
}
|
||||
|
||||
return channels
|
||||
site_id: `${path}#${channel.id}`,
|
||||
name: channel.name[0].value
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseTitle(item, channel) {
|
||||
return item.title.length ? item.title[0].value : null
|
||||
}
|
||||
|
||||
function parseDescription(item, channel) {
|
||||
return item.desc.length ? item.desc[0].value : null
|
||||
}
|
||||
|
||||
function parseCategory(item, channel) {
|
||||
const category = item.category.length ? item.category[0].value : ''
|
||||
|
||||
return category.split(/\s\&\;\s/g).filter(c => c)
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return dayjs(item.start, 'YYYYMMDDHHmmss ZZ')
|
||||
}
|
||||
|
||||
function parseStop(item) {
|
||||
return dayjs(item.stop, 'YYYYMMDDHHmmss ZZ')
|
||||
}
|
||||
|
||||
function parseItems(content, channel, date) {
|
||||
try {
|
||||
const curr_day = date
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// npm run channels:parse -- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output=./sites/i.mjh.nz/i.mjh.nz_us-pluto.channels.xml --set=path:PlutoTV/us
|
||||
// npx epg-grabber --config=sites/i.mjh.nz/i.mjh.nz.config.js --channels=sites/i.mjh.nz/i.mjh.nz_us-pluto.channels.xml --output=guide.xml --days=2
|
||||
// npx epg-grabber --config=sites/i.mjh.nz/i.mjh.nz.config.js --channels=sites/i.mjh.nz/i.mjh.nz_us-stirr.channels.xml --output=guide.xml --days=2
|
||||
// npx epg-grabber --config=sites/i.mjh.nz/i.mjh.nz.config.js --channels=sites/i.mjh.nz/i.mjh.nz_us-skygo.channels.xml --output=guide.xml --days=2
|
||||
|
||||
const { parser, url } = require('./i.mjh.nz.config.js')
|
||||
const dayjs = require('dayjs')
|
||||
|
@ -24,22 +25,20 @@ it('can generate valid url', () => {
|
|||
|
||||
it('can parse response', () => {
|
||||
const content = `<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE tv SYSTEM "xmltv.dtd"><tv generator-info-name="www.matthuisman.nz"> <channel id="51c75f7bb6f26ba1cd00002f"> <display-name>Little Stars Universe</display-name> <icon src="https://images.pluto.tv/channels/51c75f7bb6f26ba1cd00002f/colorLogoPNG.png"/> </channel> <programme channel="51c75f7bb6f26ba1cd00002f" start="20220503104922 +0000" stop="20220503112122 +0000"> <title>Barney and Friends</title> <desc>Baby Bop forgets to say "please" and "thank you". Riff shares his dream of becoming an inventor.</desc> <category>Children & Family</category> </programme><programme channel="51c75f7bb6f26ba1cd00002f" start="20220504104922 +0000" stop="20220504112122 +0000"> <title>Barney and Friends</title> <desc>Baby Bop forgets to say "please" and "thank you". Riff shares his dream of becoming an inventor.</desc> <category>Children & Family</category> </programme></tv>`
|
||||
const result = parser({ content, channel, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
const results = parser({ content, channel, date })
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2022-05-03T10:49:22.000Z',
|
||||
stop: '2022-05-03T11:21:22.000Z',
|
||||
title: 'Barney and Friends',
|
||||
description:
|
||||
'Baby Bop forgets to say "please" and "thank you". Riff shares his dream of becoming an inventor.',
|
||||
category: ['Children', 'Family']
|
||||
}
|
||||
])
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2022-05-03T10:49:22.000Z',
|
||||
stop: '2022-05-03T11:21:22.000Z',
|
||||
title: [{ value: 'Barney and Friends' }],
|
||||
desc: [
|
||||
{
|
||||
value:
|
||||
'Baby Bop forgets to say "please" and "thank you". Riff shares his dream of becoming an inventor.'
|
||||
}
|
||||
],
|
||||
category: [{ value: 'Children & Family' }]
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
|
|
104
sites/i.mjh.nz/i.mjh.nz_us-skygo.channels.xml
Normal file
104
sites/i.mjh.nz/i.mjh.nz_us-skygo.channels.xml
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="i.mjh.nz">
|
||||
<channels>
|
||||
<channel lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="SkyGo/epg#sky.90">Al Jazeera</channel>
|
||||
<channel lang="en" xmltv_id="AnimalPlanetAustralia.au" site_id="SkyGo/epg#sky.76">Animal Planet</channel>
|
||||
<channel lang="en" xmltv_id="BBCEarthNewZealand.nz" site_id="SkyGo/epg#sky.74">BBC Earth</channel>
|
||||
<channel lang="en" xmltv_id="BBCUKTVNewZealand.nz" site_id="SkyGo/epg#sky.7">BBC UKTV</channel>
|
||||
<channel lang="en" xmltv_id="BBCWorldNewsAsiaPacific.uk" site_id="SkyGo/epg#sky.89">BBC World News</channel>
|
||||
<channel lang="en" xmltv_id="BravoNewZealand.nz" site_id="SkyGo/epg#sky.12">Bravo</channel>
|
||||
<channel lang="en" xmltv_id="BravoNewZealandPlus1.nz" site_id="SkyGo/epg#sky.512">Bravo PLUS 1</channel>
|
||||
<channel lang="en" xmltv_id="BreezeTV.nz" site_id="SkyGo/epg#sky.114">Breeze TV</channel>
|
||||
<channel lang="en" xmltv_id="CartoonNetworkAustralia.au" site_id="SkyGo/epg#sky.102">Cartoon Network</channel>
|
||||
<channel lang="en" xmltv_id="CBeebiesAustralia.au" site_id="SkyGo/epg#sky.103">Cbeebies</channel>
|
||||
<channel lang="en" xmltv_id="CGTN.cn" site_id="SkyGo/epg#sky.310">CGTN</channel>
|
||||
<channel lang="en" xmltv_id="CGTNDocumentary.cn" site_id="SkyGo/epg#sky.309">CGTN Documentary</channel>
|
||||
<channel lang="en" xmltv_id="CNBCAustralia.au" site_id="SkyGo/epg#sky.91">CNBC</channel>
|
||||
<channel lang="en" xmltv_id="CNNInternationalAsiaPacific.hk" site_id="SkyGo/epg#sky.87">CNN</channel>
|
||||
<channel lang="en" xmltv_id="ColorsAsiaPacific.in" site_id="SkyGo/epg#sky.151">Colors</channel>
|
||||
<channel lang="en" xmltv_id="CountryTV.nz" site_id="SkyGo/epg#sky.81">Country TV</channel>
|
||||
<channel lang="en" xmltv_id="DiscoveryChannelNewZealand.nz" site_id="SkyGo/epg#sky.70">Discovery</channel>
|
||||
<channel lang="en" xmltv_id="DiscoveryTurboNewZealand.nz" site_id="SkyGo/epg#sky.75">Discovery Turbo</channel>
|
||||
<channel lang="en" xmltv_id="EAustralia.au" site_id="SkyGo/epg#sky.14">E!</channel>
|
||||
<channel lang="en" xmltv_id="FaceTV.nz" site_id="SkyGo/epg#sky.83">FACE TV</channel>
|
||||
<channel lang="en" xmltv_id="Firstlight.nz" site_id="SkyGo/epg#sky.206">Firstlight</channel>
|
||||
<channel lang="en" xmltv_id="HGTVNewZealand.nz" site_id="SkyGo/epg#sky.21">HGTV</channel>
|
||||
<channel lang="en" xmltv_id="HistoryAustralia.au" site_id="SkyGo/epg#sky.73">HISTORY</channel>
|
||||
<channel lang="en" xmltv_id="HopeChannelNewZealand.nz" site_id="SkyGo/epg#sky.204">Hope Channel</channel>
|
||||
<channel lang="en" xmltv_id="JONES.nz" site_id="SkyGo/epg#sky.8">JONES!</channel>
|
||||
<channel lang="en" xmltv_id="JONEStoo.nz" site_id="SkyGo/epg#sky.208">JONES! too</channel>
|
||||
<channel lang="en" xmltv_id="LivingChannel.nz" site_id="SkyGo/epg#sky.17">Living</channel>
|
||||
<channel lang="en" xmltv_id="MTV80s.uk" site_id="SkyGo/epg#sky.123">MTV 80s</channel>
|
||||
<channel lang="en" xmltv_id="MTVHitsNewZealand.nz" site_id="SkyGo/epg#sky.22">MTV Hits</channel>
|
||||
<channel lang="en" xmltv_id="MTVNewZealand.nz" site_id="SkyGo/epg#sky.15">MTV</channel>
|
||||
<channel lang="en" xmltv_id="NickelodeonAustralia.au" site_id="SkyGo/epg#sky.101">Nickelodeon</channel>
|
||||
<channel lang="en" xmltv_id="NickJrAustralia.au" site_id="SkyGo/epg#sky.104">Nick Jr.</channel>
|
||||
<channel lang="en" xmltv_id="NickMusicAustralia.au" site_id="SkyGo/epg#sky.100">Nick Music</channel>
|
||||
<channel lang="en" xmltv_id="ParliamentTV.nz" site_id="SkyGo/epg#sky.86">Parliament TV</channel>
|
||||
<channel lang="en" xmltv_id="Prime.nz" site_id="SkyGo/epg#sky.4">Prime</channel>
|
||||
<channel lang="en" xmltv_id="PrimePlus1.nz" site_id="SkyGo/epg#sky.514">Prime PLUS 1</channel>
|
||||
<channel lang="en" xmltv_id="Rialto.nz" site_id="SkyGo/epg#sky.39">Rialto</channel>
|
||||
<channel lang="en" xmltv_id="RT.ru" site_id="SkyGo/epg#sky.92">RT</channel>
|
||||
<channel lang="en" xmltv_id="ShineTV.nz" site_id="SkyGo/epg#sky.201">Shine TV</channel>
|
||||
<channel lang="en" xmltv_id="SkyArena.nz" site_id="SkyGo/epg#sky.65">SKY Arena</channel>
|
||||
<channel lang="en" xmltv_id="SkyArtsNewZealand.nz" site_id="SkyGo/epg#sky.20">Sky Arts</channel>
|
||||
<channel lang="en" xmltv_id="SkyBoxOffice041.nz" site_id="SkyGo/epg#sky.41">SKY Box Office 041</channel>
|
||||
<channel lang="en" xmltv_id="SkyBoxOffice042.nz" site_id="SkyGo/epg#sky.42">SKY Box Office 042</channel>
|
||||
<channel lang="en" xmltv_id="SkyBoxOffice043.nz" site_id="SkyGo/epg#sky.43">SKY Box Office 043</channel>
|
||||
<channel lang="en" xmltv_id="SkyBoxSets.nz" site_id="SkyGo/epg#sky.9">Sky Box Sets</channel>
|
||||
<channel lang="en" xmltv_id="SkyMoviesAction.nz" site_id="SkyGo/epg#sky.32">Sky Movies Action</channel>
|
||||
<channel lang="en" xmltv_id="SkyMoviesClassics.nz" site_id="SkyGo/epg#sky.34">Sky Movies Classics</channel>
|
||||
<channel lang="en" xmltv_id="SkyMoviesFamily.nz" site_id="SkyGo/epg#sky.36">Sky Movies Family</channel>
|
||||
<channel lang="en" xmltv_id="SkyMoviesGreats.nz" site_id="SkyGo/epg#sky.33">Sky Movies Greats</channel>
|
||||
<channel lang="en" xmltv_id="SkyMoviesPremiere.nz" site_id="SkyGo/epg#sky.30">Sky Movies Premiere</channel>
|
||||
<channel lang="en" xmltv_id="SkyNewsAustralia.au" site_id="SkyGo/epg#sky.85">Sky News</channel>
|
||||
<channel lang="en" xmltv_id="SkySport1NewZealand.nz" site_id="SkyGo/epg#sky.51">Sky Sport 1</channel>
|
||||
<channel lang="en" xmltv_id="SkySport2NewZealand.nz" site_id="SkyGo/epg#sky.52">Sky Sport 2</channel>
|
||||
<channel lang="en" xmltv_id="SkySport3NewZealand.nz" site_id="SkyGo/epg#sky.53">Sky Sport 3</channel>
|
||||
<channel lang="en" xmltv_id="SkySport4NewZealand.nz" site_id="SkyGo/epg#sky.54">Sky Sport 4</channel>
|
||||
<channel lang="en" xmltv_id="SkySport5NewZealand.nz" site_id="SkyGo/epg#sky.55">Sky Sport 5</channel>
|
||||
<channel lang="en" xmltv_id="SkySport6NewZealand.nz" site_id="SkyGo/epg#sky.56">Sky Sport 6</channel>
|
||||
<channel lang="en" xmltv_id="SkySport7NewZealand.nz" site_id="SkyGo/epg#sky.57">Sky Sport 7 beIN SPORTS</channel>
|
||||
<channel lang="en" xmltv_id="SkySport9NewZealand.nz" site_id="SkyGo/epg#sky.59">Sky Sport 9</channel>
|
||||
<channel lang="en" xmltv_id="SoHo.nz" site_id="SkyGo/epg#sky.10">SoHo</channel>
|
||||
<channel lang="en" xmltv_id="StarGold.in" site_id="SkyGo/epg#sky.152">Star Gold</channel>
|
||||
<channel lang="en" xmltv_id="TABTrackside1.nz" site_id="SkyGo/epg#sky.62">TAB Trackside 1</channel>
|
||||
<channel lang="en" xmltv_id="TABTrackside2.nz" site_id="SkyGo/epg#sky.63">TAB Trackside 2</channel>
|
||||
<channel lang="en" xmltv_id="TeReo.nz" site_id="SkyGo/epg#sky.82">Te Reo</channel>
|
||||
<channel lang="en" xmltv_id="TheEdgeTV.nz" site_id="SkyGo/epg#sky.111">The Edge TV</channel>
|
||||
<channel lang="en" xmltv_id="Three.nz" site_id="SkyGo/epg#sky.3">Three</channel>
|
||||
<channel lang="en" xmltv_id="ThreePlus1.nz" site_id="SkyGo/epg#sky.503">ThreePlusOne</channel>
|
||||
<channel lang="en" xmltv_id="TLCNewZealand.nz" site_id="SkyGo/epg#sky.16">TLC</channel>
|
||||
<channel lang="en" xmltv_id="TVNZ1.nz" site_id="SkyGo/epg#sky.1">TVNZ 1</channel>
|
||||
<channel lang="en" xmltv_id="TVNZ1Plus1.nz" site_id="SkyGo/epg#sky.501">TVNZ 1+1</channel>
|
||||
<channel lang="en" xmltv_id="TVNZ2.nz" site_id="SkyGo/epg#sky.2">TVNZ 2</channel>
|
||||
<channel lang="en" xmltv_id="TVNZ2Plus1.nz" site_id="SkyGo/epg#sky.502">TVNZ 2+1</channel>
|
||||
<channel lang="en" xmltv_id="TVNZDUKE.nz" site_id="SkyGo/epg#sky.23">TVNZ DUKE</channel>
|
||||
<channel lang="en" xmltv_id="TVNZDUKEPlus1.nz" site_id="SkyGo/epg#sky.504">DukePlus1</channel>
|
||||
<channel lang="en" xmltv_id="UniversalTVNewZealand.nz" site_id="SkyGo/epg#sky.210">Universal TV</channel>
|
||||
<channel lang="en" xmltv_id="Vibe.nz" site_id="SkyGo/epg#sky.6">Vibe</channel>
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.11">Comedy Central</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.13">eden</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.150">Star Plus Hindi</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.160">TFC</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.18">ID</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.19">Whakaata Māori</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.202">Daystar</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.203">SonLife</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.24">Rush</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.25">Shopping Channel</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.31">Sky Movies Comedy</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.35">Sky Movies Collection</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.40">SKY Box Office</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.5">Sky 5</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.50">Sky Sport Select</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.505">eden +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.58">Sky Sport Premier League</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.60">ESPN HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.600">Sky Sport Pop-up 1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.61">ESPN 2</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.71">CI</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.72">NAT GEO</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="SkyGo/epg#sky.88">Fox News</channel> -->
|
||||
</channels>
|
||||
</site>
|
Loading…
Add table
Add a link
Reference in a new issue