mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 09:00:07 -04:00
commit
1e36a5d296
8 changed files with 90 additions and 56 deletions
1
sites/dstv.com/__data__/content_nga.json
Normal file
1
sites/dstv.com/__data__/content_nga.json
Normal file
File diff suppressed because one or more lines are too long
1
sites/dstv.com/__data__/content_zaf.json
Normal file
1
sites/dstv.com/__data__/content_zaf.json
Normal file
File diff suppressed because one or more lines are too long
1
sites/dstv.com/__data__/program_nga.json
Normal file
1
sites/dstv.com/__data__/program_nga.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Id":"6d58931e-2192-486a-a202-14720136d204","ChannelTag":"H4N","Channel":"SuperSport Grandstand Nigeria HD","EventID":"H4N0000115474591","StartTime":"2022-11-22T01:00:00","EndTime":"2022-11-22T02:00:00","Duration":"01:00:00","Language":"eng","Title":"UFC FN HL: Nzechukwu v Cutelaba","Synopsis":"'UFC Fight Night Highlights - Heavyweight Bout: Kennedy Nzechukwu vs Ion Cutelaba'. From The UFC APEX Center - Las Vegas, USA.","Rating":null,"MainGenres":["Sport"],"SubGenres":["All Sport","Mixed Martial Arts"],"Items":[{"Key":"Source Key ID","Value":"200108412"}],"ThumbnailUri":"https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png","MainContentID":"0x28E53D","MainGroupID":"0x00000000","SubGroupID":"0x00","LogLine":"MMA","StarRating":"0","AssociatedAd":false,"AssociatedApplication":false,"DolbyDigital":false,"Subtitles":false,"LastEpisodeFlag":false,"Series":false,"Special":false,"Macrovision":false,"PremierEvent":false,"FirstAiring":false,"Repeat":true,"LastRepeat":false,"LiveEvent":false,"DelayedEvent":false,"Recommendations":false,"HighDefinition":true,"Widescreen":false,"MultipleSountracks":false,"Captions":false,"SocialTags":false,"VidOnDemand":false,"VoDOnline":false,"BlockStream":false}
|
1
sites/dstv.com/__data__/program_zaf.json
Normal file
1
sites/dstv.com/__data__/program_zaf.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Id":"8b237235-aa17-4bb8-9ea6-097e7a813336","ChannelTag":"SH4","Channel":"SuperSport Grandstand HD","EventID":"SH40000115474622","StartTime":"2022-11-22T01:00:00","EndTime":"2022-11-22T02:00:00","Duration":"01:00:00","Language":"eng","Title":"UFC FN HL: Nzechukwu v Cutelaba","Synopsis":"'UFC Fight Night Highlights - Heavyweight Bout: Kennedy Nzechukwu vs Ion Cutelaba'. From The UFC APEX Center - Las Vegas, USA.","Rating":"16","MainGenres":["Sport"],"SubGenres":["All Sport","Mixed Martial Arts"],"Items":[{"Key":"Source Key ID","Value":"200108412"}],"ThumbnailUri":"https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png","MainContentID":"0x28E53D","MainGroupID":"0x00873DD0","SubGroupID":"0x00","LogLine":"MMA","StarRating":"0","AssociatedAd":false,"AssociatedApplication":false,"DolbyDigital":false,"Subtitles":false,"LastEpisodeFlag":false,"Series":false,"Special":false,"Macrovision":false,"PremierEvent":false,"FirstAiring":false,"Repeat":true,"LastRepeat":false,"LiveEvent":false,"DelayedEvent":false,"Recommendations":false,"HighDefinition":true,"Widescreen":false,"MultipleSountracks":false,"Captions":false,"SocialTags":false,"VidOnDemand":false,"VoDOnline":false,"BlockStream":false}
|
|
@ -8,21 +8,23 @@ dayjs.extend(utc)
|
||||||
dayjs.extend(timezone)
|
dayjs.extend(timezone)
|
||||||
dayjs.extend(customParseFormat)
|
dayjs.extend(customParseFormat)
|
||||||
|
|
||||||
|
const API_ENDPOINT = 'https://www.dstv.com/umbraco/api/TvGuide'
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
site: 'dstv.com',
|
site: 'dstv.com',
|
||||||
request: {
|
request: {
|
||||||
cache: {
|
cache: {
|
||||||
ttl: 6 * 60 * 60 * 1000, // 6h
|
ttl: 3 * 60 * 60 * 1000, // 3h
|
||||||
interpretHeader: false
|
interpretHeader: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
url: function ({ channel, date }) {
|
url: function ({ channel, date }) {
|
||||||
const [region] = channel.site_id.split('#')
|
const [region] = channel.site_id.split('#')
|
||||||
const packageName = region === 'nga' ? 'DStv%20Premium' : ''
|
const packageName = region === 'nga' ? '&package=DStv%20Premium' : ''
|
||||||
|
|
||||||
return `https://www.dstv.com/umbraco/api/TvGuide/GetProgrammes?d=${date.format(
|
return `${API_ENDPOINT}/GetProgrammes?d=${date.format(
|
||||||
'YYYY-MM-DD'
|
'YYYY-MM-DD'
|
||||||
)}&package=${packageName}&country=${region}`
|
)}${packageName}&country=${region}`
|
||||||
},
|
},
|
||||||
async parser({ content, channel, cached }) {
|
async parser({ content, channel, cached }) {
|
||||||
let programs = []
|
let programs = []
|
||||||
|
@ -34,8 +36,8 @@ module.exports = {
|
||||||
description: parseDescription(details),
|
description: parseDescription(details),
|
||||||
icon: parseIcon(details),
|
icon: parseIcon(details),
|
||||||
category: parseCategory(details),
|
category: parseCategory(details),
|
||||||
start: parseTime(item.StartTime),
|
start: parseTime(item.StartTime, channel),
|
||||||
stop: parseTime(item.EndTime)
|
stop: parseTime(item.EndTime, channel)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,9 +45,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
async channels({ country }) {
|
async channels({ country }) {
|
||||||
const data = await axios
|
const data = await axios
|
||||||
.get(
|
.get(`${API_ENDPOINT}/GetProgrammes?d=2022-03-10&package=DStv%20Premium&country=${country}`)
|
||||||
`https://www.dstv.com/umbraco/api/TvGuide/GetProgrammes?d=2022-03-10&package=DStv%20Premium&country=${country}`
|
|
||||||
)
|
|
||||||
.then(r => r.data)
|
.then(r => r.data)
|
||||||
.catch(console.log)
|
.catch(console.log)
|
||||||
|
|
||||||
|
@ -58,6 +58,16 @@ module.exports = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseTime(time, channel) {
|
||||||
|
const [region] = channel.site_id.split('#')
|
||||||
|
const tz = {
|
||||||
|
zaf: 'Africa/Johannesburg',
|
||||||
|
nga: 'Africa/Lagos'
|
||||||
|
}
|
||||||
|
|
||||||
|
return dayjs.tz(time, 'YYYY-MM-DDTHH:mm:ss', tz[region])
|
||||||
|
}
|
||||||
|
|
||||||
function parseDescription(details) {
|
function parseDescription(details) {
|
||||||
return details ? details.Synopsis : null
|
return details ? details.Synopsis : null
|
||||||
}
|
}
|
||||||
|
@ -71,7 +81,7 @@ function parseCategory(details) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadProgramDetails(item) {
|
async function loadProgramDetails(item) {
|
||||||
const url = `https://www.dstv.com/umbraco/api/TvGuide/GetProgramme?id=${item.Id}`
|
const url = `${API_ENDPOINT}/GetProgramme?id=${item.Id}`
|
||||||
|
|
||||||
return axios
|
return axios
|
||||||
.get(url)
|
.get(url)
|
||||||
|
@ -79,10 +89,6 @@ async function loadProgramDetails(item) {
|
||||||
.catch(console.error)
|
.catch(console.error)
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseTime(time) {
|
|
||||||
return dayjs.utc(time, 'YYYY-MM-DDTHH:mm:ss')
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseItems(content, channel) {
|
function parseItems(content, channel) {
|
||||||
const [_, channelId] = channel.site_id.split('#')
|
const [_, channelId] = channel.site_id.split('#')
|
||||||
const data = JSON.parse(content)
|
const data = JSON.parse(content)
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
const { parser, url } = require('./dstv.com.config.js')
|
const { parser, url } = require('./dstv.com.config.js')
|
||||||
const axios = require('axios')
|
const axios = require('axios')
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
const dayjs = require('dayjs')
|
const dayjs = require('dayjs')
|
||||||
const utc = require('dayjs/plugin/utc')
|
const utc = require('dayjs/plugin/utc')
|
||||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||||
|
@ -13,68 +15,90 @@ dayjs.extend(utc)
|
||||||
|
|
||||||
jest.mock('axios')
|
jest.mock('axios')
|
||||||
|
|
||||||
const date = dayjs.utc('2022-03-11', 'YYYY-MM-DD').startOf('d')
|
const API_ENDPOINT = 'https://www.dstv.com/umbraco/api/TvGuide'
|
||||||
|
|
||||||
|
const date = dayjs.utc('2022-11-22', 'YYYY-MM-DD').startOf('d')
|
||||||
const channelZA = {
|
const channelZA = {
|
||||||
site_id: 'zaf#101',
|
site_id: 'zaf#201',
|
||||||
xmltv_id: 'MNetWest.za'
|
xmltv_id: 'SuperSportGrandstand.za'
|
||||||
}
|
}
|
||||||
const channelNG = {
|
const channelNG = {
|
||||||
site_id: 'nga#101',
|
site_id: 'nga#201',
|
||||||
xmltv_id: 'MNetWest.za'
|
xmltv_id: 'SuperSportGrandstand.za'
|
||||||
}
|
}
|
||||||
|
|
||||||
it('can generate valid url for zaf', () => {
|
it('can generate valid url for zaf', () => {
|
||||||
expect(url({ channel: channelZA, date })).toBe(
|
expect(url({ channel: channelZA, date })).toBe(
|
||||||
'https://www.dstv.com/umbraco/api/TvGuide/GetProgrammes?d=2022-03-11&package=&country=zaf'
|
`${API_ENDPOINT}/GetProgrammes?d=2022-11-22&country=zaf`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can generate valid url for nga', () => {
|
it('can generate valid url for nga', () => {
|
||||||
expect(url({ channel: channelNG, date })).toBe(
|
expect(url({ channel: channelNG, date })).toBe(
|
||||||
'https://www.dstv.com/umbraco/api/TvGuide/GetProgrammes?d=2022-03-11&package=DStv%20Premium&country=nga'
|
`${API_ENDPOINT}/GetProgrammes?d=2022-11-22&package=DStv%20Premium&country=nga`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can parse response', done => {
|
it('can parse response for ZA', async () => {
|
||||||
const content = `{"Total":4483,"Channels":[{"Number":"214","Tag":"S34","Name":"TENNIS","Programmes":[{"Id":"5c5a56e8-9959-4305-ae2f-7cc32ec39f5f","StartTime":"2022-03-11T09:00:00","EndTime":"2022-03-11T09:15:00","Title":"WTA 1000 HL '22: Indian Wells D2 M1"}]},{"Number":"101","Tag":"HDT","Name":"M-Net HD","Programmes":[{"Id":"a6ada4cd-93df-4eaf-bab4-041e2537ed23","StartTime":"2022-03-11T00:10:00","EndTime":"2022-03-11T00:50:00","Title":"Curb Your Enthusiasm"}]}]}`
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content_zaf.json'))
|
||||||
|
|
||||||
axios.get.mockImplementation(url => {
|
axios.get.mockImplementation(url => {
|
||||||
if (
|
if (url === `${API_ENDPOINT}/GetProgramme?id=8b237235-aa17-4bb8-9ea6-097e7a813336`) {
|
||||||
url ===
|
|
||||||
'https://www.dstv.com/umbraco/api/TvGuide/GetProgramme?id=a6ada4cd-93df-4eaf-bab4-041e2537ed23'
|
|
||||||
) {
|
|
||||||
return Promise.resolve({
|
return Promise.resolve({
|
||||||
data: JSON.parse(
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program_zaf.json')))
|
||||||
`{"Id":"a6ada4cd-93df-4eaf-bab4-041e2537ed23","ChannelTag":"HDT","Channel":"M-Net Domestic HD","EventID":"HDT0000109067787","StartTime":"2022-03-11T00:10:00","EndTime":"2022-03-11T00:50:00","Duration":"00:40:00","Language":"eng","Title":"Curb Your Enthusiasm","Synopsis":"'S11/E6 of 10 - Man Fights Tiny Woman'. A general entertainment channel showcasing the best international content, focusing on scripted drama, comedy and talk.","Rating":"16","MainGenres":["Series"],"SubGenres":["Sitcom","Comedy"],"Items":[{"Key":"Year","Value":"2020"},{"Key":"Source Key ID","Value":"100338770"}],"ThumbnailUri":"https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/21893_curb_your_enthusiam169.jpg"}`
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
return Promise.resolve({ data: '' })
|
return Promise.resolve({ data: '' })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
parser({ content, channel: channelZA })
|
let results = await parser({ content, channel: channelZA })
|
||||||
.then(result => {
|
results = results.map(p => {
|
||||||
result = result.map(p => {
|
p.start = p.start.toJSON()
|
||||||
p.start = p.start.toJSON()
|
p.stop = p.stop.toJSON()
|
||||||
p.stop = p.stop.toJSON()
|
return p
|
||||||
return p
|
})
|
||||||
})
|
|
||||||
|
|
||||||
expect(result).toMatchObject([
|
expect(results[1]).toMatchObject({
|
||||||
{
|
start: '2022-11-21T23:00:00.000Z',
|
||||||
start: '2022-03-11T00:10:00.000Z',
|
stop: '2022-11-22T00:00:00.000Z',
|
||||||
stop: '2022-03-11T00:50:00.000Z',
|
title: 'UFC FN HL: Nzechukwu v Cutelaba',
|
||||||
title: 'Curb Your Enthusiasm'
|
description:
|
||||||
// description:
|
"'UFC Fight Night Highlights - Heavyweight Bout: Kennedy Nzechukwu vs Ion Cutelaba'. From The UFC APEX Center - Las Vegas, USA.",
|
||||||
// "'S11/E6 of 10 - Man Fights Tiny Woman'. A general entertainment channel showcasing the best international content, focusing on scripted drama, comedy and talk.",
|
icon: 'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png',
|
||||||
// icon: 'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/21893_curb_your_enthusiam169.jpg',
|
category: ['All Sport', 'Mixed Martial Arts']
|
||||||
// category: ['Sitcom', 'Comedy']
|
})
|
||||||
}
|
})
|
||||||
])
|
|
||||||
done()
|
it('can parse response for NG', async () => {
|
||||||
})
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content_nga.json'))
|
||||||
.catch(done)
|
|
||||||
|
axios.get.mockImplementation(url => {
|
||||||
|
if (url === `${API_ENDPOINT}/GetProgramme?id=6d58931e-2192-486a-a202-14720136d204`) {
|
||||||
|
return Promise.resolve({
|
||||||
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program_nga.json')))
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return Promise.resolve({ data: '' })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
let results = await parser({ content, channel: channelNG })
|
||||||
|
results = results.map(p => {
|
||||||
|
p.start = p.start.toJSON()
|
||||||
|
p.stop = p.stop.toJSON()
|
||||||
|
return p
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(results[0]).toMatchObject({
|
||||||
|
start: '2022-11-21T23:00:00.000Z',
|
||||||
|
stop: '2022-11-22T00:00:00.000Z',
|
||||||
|
title: 'UFC FN HL: Nzechukwu v Cutelaba',
|
||||||
|
description:
|
||||||
|
"'UFC Fight Night Highlights - Heavyweight Bout: Kennedy Nzechukwu vs Ion Cutelaba'. From The UFC APEX Center - Las Vegas, USA.",
|
||||||
|
icon: 'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png',
|
||||||
|
category: ['All Sport', 'Mixed Martial Arts']
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can handle empty guide', done => {
|
it('can handle empty guide', done => {
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
<channel lang="en" xmltv_id="CCTVEntertainment.cn" site_id="nga#480">CCTV Entertainment – Mandarin Entertainment Channel</channel>
|
<channel lang="en" xmltv_id="CCTVEntertainment.cn" site_id="nga#480">CCTV Entertainment – Mandarin Entertainment Channel</channel>
|
||||||
<channel lang="en" xmltv_id="CGTN.cn" site_id="nga#409">CGTN News</channel>
|
<channel lang="en" xmltv_id="CGTN.cn" site_id="nga#409">CGTN News</channel>
|
||||||
<channel lang="en" xmltv_id="CGTNDocumentary.cn" site_id="nga#448">CGTN Documentary</channel>
|
<channel lang="en" xmltv_id="CGTNDocumentary.cn" site_id="nga#448">CGTN Documentary</channel>
|
||||||
<channel lang="fr" xmltv_id="CGTNFrench.cn" site_id="nga#449">CGTN French</channel>
|
|
||||||
<channel lang="en" xmltv_id="ChinaMovieChannel.cn" site_id="nga#481">China Movie Channel</channel>
|
<channel lang="en" xmltv_id="ChinaMovieChannel.cn" site_id="nga#481">China Movie Channel</channel>
|
||||||
<channel lang="en" xmltv_id="CitiTV.gh" site_id="nga#363">Citi TV</channel>
|
<channel lang="en" xmltv_id="CitiTV.gh" site_id="nga#363">Citi TV</channel>
|
||||||
<channel lang="en" xmltv_id="CNBCAfrica.za" site_id="nga#410">CNBC Africa</channel>
|
<channel lang="en" xmltv_id="CNBCAfrica.za" site_id="nga#410">CNBC Africa</channel>
|
||||||
|
@ -51,9 +50,9 @@
|
||||||
<channel lang="en" xmltv_id="ESPN2Africa.za" site_id="nga#219">ESPN 2 HD</channel>
|
<channel lang="en" xmltv_id="ESPN2Africa.za" site_id="nga#219">ESPN 2 HD</channel>
|
||||||
<channel lang="en" xmltv_id="ESPNAfrica.za" site_id="nga#218">ESPN</channel>
|
<channel lang="en" xmltv_id="ESPNAfrica.za" site_id="nga#218">ESPN</channel>
|
||||||
<channel lang="en" xmltv_id="etvAfrica.za" site_id="nga#250">eTV Africa</channel>
|
<channel lang="en" xmltv_id="etvAfrica.za" site_id="nga#250">eTV Africa</channel>
|
||||||
<channel lang="en" xmltv_id="EuronewsGerman.fr" site_id="nga#445">EuroNews German</channel>
|
|
||||||
<channel lang="en" xmltv_id="EuronewsEnglish.fr" site_id="nga#414">EuroNews</channel>
|
<channel lang="en" xmltv_id="EuronewsEnglish.fr" site_id="nga#414">EuroNews</channel>
|
||||||
<channel lang="en" xmltv_id="EuronewsFrench.fr" site_id="nga#438">EuroNews French</channel>
|
<channel lang="en" xmltv_id="EuronewsFrench.fr" site_id="nga#438">EuroNews French</channel>
|
||||||
|
<channel lang="en" xmltv_id="EuronewsGerman.fr" site_id="nga#445">EuroNews German</channel>
|
||||||
<channel lang="en" xmltv_id="EWTNAfricaAsia.us" site_id="nga#348">Eternal Word Television Network</channel>
|
<channel lang="en" xmltv_id="EWTNAfricaAsia.us" site_id="nga#348">Eternal Word Television Network</channel>
|
||||||
<channel lang="en" xmltv_id="FaithAfrica.za" site_id="nga#341">FAITH</channel>
|
<channel lang="en" xmltv_id="FaithAfrica.za" site_id="nga#341">FAITH</channel>
|
||||||
<channel lang="en" xmltv_id="FoodNetworkEMEA.us" site_id="nga#175">Food Network</channel>
|
<channel lang="en" xmltv_id="FoodNetworkEMEA.us" site_id="nga#175">Food Network</channel>
|
||||||
|
@ -105,7 +104,6 @@
|
||||||
<channel lang="en" xmltv_id="Rok.uk" site_id="nga#168">ROK</channel>
|
<channel lang="en" xmltv_id="Rok.uk" site_id="nga#168">ROK</channel>
|
||||||
<channel lang="en" xmltv_id="Rok2.uk" site_id="nga#169">ROK 2</channel>
|
<channel lang="en" xmltv_id="Rok2.uk" site_id="nga#169">ROK 2</channel>
|
||||||
<channel lang="en" xmltv_id="RokGH.uk" site_id="nga#164">ROK GH</channel>
|
<channel lang="en" xmltv_id="RokGH.uk" site_id="nga#164">ROK GH</channel>
|
||||||
<channel lang="pt" xmltv_id="RTPInternacional.pt" site_id="nga#525">RTPi (P)</channel>
|
|
||||||
<channel lang="en" xmltv_id="SABCNews.za" site_id="nga#404">SABC News</channel>
|
<channel lang="en" xmltv_id="SABCNews.za" site_id="nga#404">SABC News</channel>
|
||||||
<channel lang="en" xmltv_id="SBNTVInternational.us" site_id="nga#345">SBN</channel>
|
<channel lang="en" xmltv_id="SBNTVInternational.us" site_id="nga#345">SBN</channel>
|
||||||
<channel lang="en" xmltv_id="SilverbirdTV.ng" site_id="nga#252">SILVERBIRD</channel>
|
<channel lang="en" xmltv_id="SilverbirdTV.ng" site_id="nga#252">SILVERBIRD</channel>
|
||||||
|
@ -150,5 +148,7 @@
|
||||||
<channel lang="en" xmltv_id="WWEChannel.za" site_id="nga#128">WWE Channel</channel>
|
<channel lang="en" xmltv_id="WWEChannel.za" site_id="nga#128">WWE Channel</channel>
|
||||||
<channel lang="en" xmltv_id="ZeeWorld.za" site_id="nga#166">Zee World</channel>
|
<channel lang="en" xmltv_id="ZeeWorld.za" site_id="nga#166">Zee World</channel>
|
||||||
<channel lang="en" xmltv_id="ZhejiangSatelliteTV.cn" site_id="nga#484">Zhejiang TV</channel>
|
<channel lang="en" xmltv_id="ZhejiangSatelliteTV.cn" site_id="nga#484">Zhejiang TV</channel>
|
||||||
|
<channel lang="fr" xmltv_id="CGTNFrench.cn" site_id="nga#449">CGTN French</channel>
|
||||||
|
<channel lang="pt" xmltv_id="RTPInternacional.pt" site_id="nga#525">RTPi (P)</channel>
|
||||||
</channels>
|
</channels>
|
||||||
</site>
|
</site>
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
<channel lang="en" xmltv_id="BayTV.za" site_id="zaf#260">Bay TV</channel>
|
<channel lang="en" xmltv_id="BayTV.za" site_id="zaf#260">Bay TV</channel>
|
||||||
<channel lang="en" xmltv_id="BBCBritAfrica.uk" site_id="zaf#120">BBC Brit HD</channel>
|
<channel lang="en" xmltv_id="BBCBritAfrica.uk" site_id="zaf#120">BBC Brit HD</channel>
|
||||||
<channel lang="en" xmltv_id="BBCEarthAfrica.uk" site_id="zaf#184">BBC Earth HD</channel>
|
<channel lang="en" xmltv_id="BBCEarthAfrica.uk" site_id="zaf#184">BBC Earth HD</channel>
|
||||||
<!-- <channel lang="en" xmltv_id="" site_id="zaf#119">BBC First HD</channel> -->
|
|
||||||
<channel lang="en" xmltv_id="BBCLifestyleAfrica.uk" site_id="zaf#174">BBC Lifestyle</channel>
|
<channel lang="en" xmltv_id="BBCLifestyleAfrica.uk" site_id="zaf#174">BBC Lifestyle</channel>
|
||||||
<channel lang="en" xmltv_id="BBCWorldNewsAfrica.uk" site_id="zaf#400">BBC World News</channel>
|
<channel lang="en" xmltv_id="BBCWorldNewsAfrica.uk" site_id="zaf#400">BBC World News</channel>
|
||||||
<channel lang="en" xmltv_id="BETAfrica.us" site_id="zaf#129">BET</channel>
|
<channel lang="en" xmltv_id="BETAfrica.us" site_id="zaf#129">BET</channel>
|
||||||
|
@ -98,7 +97,6 @@
|
||||||
<channel lang="en" xmltv_id="RealTimeAfrica.us" site_id="zaf#155">Real Time</channel>
|
<channel lang="en" xmltv_id="RealTimeAfrica.us" site_id="zaf#155">Real Time</channel>
|
||||||
<channel lang="en" xmltv_id="Rok.uk" site_id="zaf#168">ROK</channel>
|
<channel lang="en" xmltv_id="Rok.uk" site_id="zaf#168">ROK</channel>
|
||||||
<channel lang="en" xmltv_id="RT.ru" site_id="zaf#407">Russia Today</channel>
|
<channel lang="en" xmltv_id="RT.ru" site_id="zaf#407">Russia Today</channel>
|
||||||
<channel lang="pt" xmltv_id="RTPInternacional.pt" site_id="zaf#435">RTPI</channel>
|
|
||||||
<channel lang="en" xmltv_id="SABC1.za" site_id="zaf#191">SABC 1 HD</channel>
|
<channel lang="en" xmltv_id="SABC1.za" site_id="zaf#191">SABC 1 HD</channel>
|
||||||
<channel lang="en" xmltv_id="SABC2.za" site_id="zaf#192">SABC 2 HD</channel>
|
<channel lang="en" xmltv_id="SABC2.za" site_id="zaf#192">SABC 2 HD</channel>
|
||||||
<channel lang="en" xmltv_id="SABC3.za" site_id="zaf#193">SABC 3 HD</channel>
|
<channel lang="en" xmltv_id="SABC3.za" site_id="zaf#193">SABC 3 HD</channel>
|
||||||
|
@ -146,5 +144,7 @@
|
||||||
<channel lang="en" xmltv_id="WildEarth.za" site_id="zaf#183">WildEarth</channel>
|
<channel lang="en" xmltv_id="WildEarth.za" site_id="zaf#183">WildEarth</channel>
|
||||||
<channel lang="en" xmltv_id="WWEChannel.za" site_id="zaf#236">WWE</channel>
|
<channel lang="en" xmltv_id="WWEChannel.za" site_id="zaf#236">WWE</channel>
|
||||||
<channel lang="en" xmltv_id="ZeeWorld.za" site_id="zaf#166">Zee World HD</channel>
|
<channel lang="en" xmltv_id="ZeeWorld.za" site_id="zaf#166">Zee World HD</channel>
|
||||||
|
<channel lang="pt" xmltv_id="RTPInternacional.pt" site_id="zaf#435">RTPI</channel>
|
||||||
|
<!-- <channel lang="en" xmltv_id="" site_id="zaf#119">BBC First HD</channel> -->
|
||||||
</channels>
|
</channels>
|
||||||
</site>
|
</site>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue