Merge pull request #1372 from iptv-org/update-i.mjh.nz

Update i.mjh.nz
This commit is contained in:
Aleksandr Statciuk 2022-11-20 17:49:55 +03:00 committed by GitHub
commit 6117e4705d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 134 additions and 68 deletions

View file

@ -7,78 +7,41 @@ const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(isBetween) dayjs.extend(isBetween)
dayjs.extend(customParseFormat) dayjs.extend(customParseFormat)
const API_ENDPOINT = 'https://raw.githubusercontent.com/matthuisman/i.mjh.nz/master'
module.exports = { module.exports = {
site: 'i.mjh.nz', site: 'i.mjh.nz',
request: { request: {
cache: { 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 }) { 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 }) { parser: function ({ content, channel, date, cached }) {
let programs = [] return parseItems(content, channel, date)
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
}, },
async channels({ path, lang = 'en' }) { async channels({ path, lang = 'en' }) {
const [service] = path.split('/') let xml = await axios
let data = await axios .get(`${API_ENDPOINT}/${path}.xml`)
.get(`https://i.mjh.nz/${service}/app.json`)
.then(r => r.data) .then(r => r.data)
.catch(console.log) .catch(console.log)
let data = parser.parse(xml)
const channels = [] return data.channels.map(channel => {
const items = data.channels || data return {
for (let id in items) {
const channel = items[id]
channels.push({
lang, lang,
site_id: `${path}#${id}`, site_id: `${path}#${channel.id}`,
name: channel.name name: channel.name[0].value
}) }
} })
return channels
} }
} }
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\&amp\;\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) { function parseItems(content, channel, date) {
try { try {
const curr_day = date const curr_day = date

View file

@ -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 // 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-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-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 { parser, url } = require('./i.mjh.nz.config.js')
const dayjs = require('dayjs') const dayjs = require('dayjs')
@ -24,22 +25,20 @@ it('can generate valid url', () => {
it('can parse response', () => { 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 &amp; 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 &amp; Family</category> </programme></tv>` 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 &amp; 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 &amp; Family</category> </programme></tv>`
const result = parser({ content, channel, date }).map(p => { const results = parser({ content, channel, date })
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([ expect(results[0]).toMatchObject({
{ start: '2022-05-03T10:49:22.000Z',
start: '2022-05-03T10:49:22.000Z', stop: '2022-05-03T11:21:22.000Z',
stop: '2022-05-03T11:21:22.000Z', title: [{ value: 'Barney and Friends' }],
title: 'Barney and Friends', desc: [
description: {
'Baby Bop forgets to say "please" and "thank you". Riff shares his dream of becoming an inventor.', value:
category: ['Children', 'Family'] 'Baby Bop forgets to say "please" and "thank you". Riff shares his dream of becoming an inventor.'
} }
]) ],
category: [{ value: 'Children &amp; Family' }]
})
}) })
it('can handle empty guide', () => { it('can handle empty guide', () => {

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