Merge pull request #1243 from iptv-org/update-astro.com.my

Update astro.com.my
This commit is contained in:
Aleksandr Statciuk authored and GitHub committed 2022-10-31 02:48:36 +03:00
commit e276de8748
6 files changed
+161 -36

No files matched your search

+1 -1
View File
@@ -1 +1 @@
{"responseCode":200,"responseMessage":"Channel Detail","response":{"id":235,"title":"Astro Arena HD","description":"The ultimate destination for Malaysian sporting events, as well as showcasing Malaysian athletes competing at the pinnacle stage of world sports, and also the latest information on sports in the country. The channel of Malaysian sports, for Malaysia.","isHd":true,"stbNumber":"801","language":"Malay","category":"Sports","originalImage":"http://linear-poster.astro.com.my/prod/logo/Astro_Arena_v1.png","backupImage":"http://linear-poster.astro.com.my/prod/poster/ivp_default_10000285_IVP_LAND_448x252_v2.jpg","imageUrl":"https://divign0fdw3sv.cloudfront.net/Images/ChannelLogo/contenthub/235_144.png","isAstroGoExclusive":false,"filters":["Set Top Box","Sports"],"schedule":{"2022-08-30":[{"eventId":"40197573","title":"BWF Kejohanan Dunia 2022","programmeId":"KAGFN","episodeId":"KDGUX","datetime":"2022-08-30 00:00:00.0","datetimeInUtc":"2022-08-29 16:00:00.0","duration":"05:15:00","siTrafficKey":"1:10000285:47489961","detailUrl":"/details/BWF-Kejohanan-Dunia-2022-1:10000285:47489961"},{"eventId":"40197574","title":"Piala Thanhnien 2022 B19: MAS lwn THA","programmeId":"KDAHI","episodeId":"KDAHJ","datetime":"2022-08-30 05:15:00.0","datetimeInUtc":"2022-08-29 21:15:00.0","duration":"01:45:00","siTrafficKey":"1:10000285:47489963","detailUrl":"/details/Piala-Thanhnien-2022-B19-MAS-lwn-THA-1:10000285:47489963"},{"eventId":"40197575","title":"Nadi Arena","programmeId":"JOPAR","episodeId":"JOPRQ","datetime":"2022-08-30 07:00:00.0","datetimeInUtc":"2022-08-29 23:00:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489797","detailUrl":"/details/Nadi-Arena-1:10000285:47489797"},{"eventId":"40197576","title":"Piala Thanhnien 2022 B19: THA lwn MYA","programmeId":"KDAHI","episodeId":"KDAHP","datetime":"2022-08-30 08:00:00.0","datetimeInUtc":"2022-08-30 00:00:00.0","duration":"02:00:00","siTrafficKey":"1:10000285:47489979","detailUrl":"/details/Piala-Thanhnien-2022-B19-THA-lwn-MYA-1:10000285:47489979"},{"eventId":"40197577","title":"Nindia","programmeId":"JZQHD","episodeId":"KCTSN","datetime":"2022-08-30 10:00:00.0","datetimeInUtc":"2022-08-30 02:00:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489886","detailUrl":"/details/Nindia-1:10000285:47489886"},{"eventId":"40197578","title":"Piala Thanhnien 2022 B19: VIE lwn MAS","programmeId":"KDAHI","episodeId":"KDAHQ","datetime":"2022-08-30 11:00:00.0","datetimeInUtc":"2022-08-30 03:00:00.0","duration":"02:00:00","siTrafficKey":"1:10000285:47489977","detailUrl":"/details/Piala-Thanhnien-2022-B19-VIE-lwn-MAS-1:10000285:47489977"},{"eventId":"40197579","title":"Nadi Arena","programmeId":"JOPAR","episodeId":"JOPRQ","datetime":"2022-08-30 13:00:00.0","datetimeInUtc":"2022-08-30 05:00:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489807","detailUrl":"/details/Nadi-Arena-1:10000285:47489807"},{"eventId":"40197580","title":"BWF Kejohanan Dunia 2022: Akhir","programmeId":"KAGFN","episodeId":"KDGVD","datetime":"2022-08-30 14:00:00.0","datetimeInUtc":"2022-08-30 06:00:00.0","duration":"05:10:00","siTrafficKey":"1:10000285:47489916","detailUrl":"/details/BWF-Kejohanan-Dunia-2022-Akhir-1:10000285:47489916"},{"eventId":"40240935","title":"Sorotan Sukan Komanwel 2022","programmeId":"KALNW","episodeId":"KCMWL","datetime":"2022-08-30 19:10:00.0","datetimeInUtc":"2022-08-30 11:10:00.0","duration":"00:20:00","siTrafficKey":"1:10000285:47540288","detailUrl":"/details/Sorotan-Sukan-Komanwel-2022-1:10000285:47540288"},{"eventId":"40197582","title":"(L) Nadi Arena","programmeId":"HUMKK","episodeId":"HUMKM","datetime":"2022-08-30 19:30:00.0","datetimeInUtc":"2022-08-30 11:30:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489877","detailUrl":"/details/L-Nadi-Arena-1:10000285:47489877"},{"eventId":"40197583","title":"Masa Tambahan 2022/23","programmeId":"KDCTS","episodeId":"KDCTW","datetime":"2022-08-30 20:30:00.0","datetimeInUtc":"2022-08-30 12:30:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489906","detailUrl":"/details/Masa-Tambahan-202223-1:10000285:47489906"},{"eventId":"40197584","title":"Sorotan Sepak Takraw Tun Ali 2022: Akhir","programmeId":"KDANE","episodeId":"KDANM","datetime":"2022-08-30 21:30:00.0","datetimeInUtc":"2022-08-30 13:30:00.0","duration":"00:30:00","siTrafficKey":"1:10000285:47489993","detailUrl":"/details/Sorotan-Sepak-Takraw-Tun-Ali-2022-Akhir-1:10000285:47489993"},{"eventId":"40197585","title":"Nindia","programmeId":"JZQHD","episodeId":"KCTSN","datetime":"2022-08-30 22:00:00.0","datetimeInUtc":"2022-08-30 14:00:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489884","detailUrl":"/details/Nindia-1:10000285:47489884"},{"eventId":"40197586","title":"Nadi Arena","programmeId":"JOPAR","episodeId":"JOPRR","datetime":"2022-08-30 23:00:00.0","datetimeInUtc":"2022-08-30 15:00:00.0","duration":"01:00:00","siTrafficKey":"1:10000285:47489785","detailUrl":"/details/Nadi-Arena-1:10000285:47489785"}],"2022-08-31":[{"eventId":Line truncated
{"responseCode":200,"responseMessage":"Channel Detail","response":{"id":425,"title":"TVB Classic HD","description":"无线经典台 搜罗70-90年代脍炙人口及令人印象深刻的电视作品,见证香港最辉煌及璀璨的一页。作为全港最庞大的经典剧集片库,无线经典台为剧集赋予生命,发挥大香 港精神。专题《每月之星》,播放精选演员之代表剧集,让观众重温经典场面及主题曲,回味一众巨星如刘德华、汪明荃、周润发、周星驰、梁朝伟等的风采。","isHd":true,"stbNumber":"305","language":"Chinese","category":"Variety Entertainment","originalImage":"https://linear-poster.astro.com.my/prod/logo/TVB_Classic_2022.png","backupImage":"http://linear-poster.astro.com.my/prod/poster/TVB_Classic_2022_IVP_LAND_586x330.jpg","imageUrl":"https://divign0fdw3sv.cloudfront.net/Images/ChannelLogo/contenthub/425_144.png","isAstroGoExclusive":false,"filters":["Set Top Box","Variety Entertainment"],"schedule":{"2022-10-31":[{"eventId":"40609678","title":"Triumph in the Skies Ep06","programmeId":null,"episodeId":null,"datetime":"2022-10-31 00:10:00.0","datetimeInUtc":"2022-10-30 16:10:00.0","duration":"00:52:00","siTrafficKey":"1:10000526:47979653","detailUrl":"/details/Triumph-in-the-Skies-Ep06-1:10000526:47979653"},{"eventId":"40609679","title":"Triumph in the Skies Ep07","programmeId":null,"episodeId":null,"datetime":"2022-10-31 01:02:00.0","datetimeInUtc":"2022-10-30 17:02:00.0","duration":"00:51:00","siTrafficKey":"1:10000526:47979654","detailUrl":"/details/Triumph-in-the-Skies-Ep07-1:10000526:47979654"},{"eventId":"40609680","title":"Triumph in the Skies Ep08","programmeId":null,"episodeId":null,"datetime":"2022-10-31 01:53:00.0","datetimeInUtc":"2022-10-30 17:53:00.0","duration":"00:50:00","siTrafficKey":"1:10000526:47979655","detailUrl":"/details/Triumph-in-the-Skies-Ep08-1:10000526:47979655"},{"eventId":"40609681","title":"The Seventh Day Ep13","programmeId":null,"episodeId":null,"datetime":"2022-10-31 02:43:00.0","datetimeInUtc":"2022-10-30 18:43:00.0","duration":"00:53:00","siTrafficKey":"1:10000526:47979656","detailUrl":"/details/The-Seventh-Day-Ep13-1:10000526:47979656"},{"eventId":"40609682","title":"The Seventh Day Ep14","programmeId":null,"episodeId":null,"datetime":"2022-10-31 03:36:00.0","datetimeInUtc":"2022-10-30 19:36:00.0","duration":"00:51:00","siTrafficKey":"1:10000526:47979657","detailUrl":"/details/The-Seventh-Day-Ep14-1:10000526:47979657"},{"eventId":"40609683","title":"Love and Again Ep17","programmeId":null,"episodeId":null,"datetime":"2022-10-31 04:27:00.0","datetimeInUtc":"2022-10-30 20:27:00.0","duration":"00:52:00","siTrafficKey":"1:10000526:47979679","detailUrl":"/details/Love-and-Again-Ep17-1:10000526:47979679"},{"eventId":"40609684","title":"Love and Again Ep18","programmeId":null,"episodeId":null,"datetime":"2022-10-31 05:19:00.0","datetimeInUtc":"2022-10-30 21:19:00.0","duration":"00:51:00","siTrafficKey":"1:10000526:47979680","detailUrl":"/details/Love-and-Again-Ep18-1:10000526:47979680"},{"eventId":"40465858","title":"The Slicing of the Demon Ep12","programmeId":null,"episodeId":null,"datetime":"2022-10-31 06:10:00.0","datetimeInUtc":"2022-10-30 22:10:00.0","duration":"01:00:00","siTrafficKey":"1:10000526:47636983","detailUrl":"/details/The-Slicing-of-the-Demon-Ep12-1:10000526:47636983"},{"eventId":"40619271","title":"Law Enforcers Ep04","programmeId":null,"episodeId":null,"datetime":"2022-10-31 07:10:00.0","datetimeInUtc":"2022-10-30 23:10:00.0","duration":"00:53:00","siTrafficKey":"1:10000526:47989835","detailUrl":"/details/Law-Enforcers-Ep04-1:10000526:47989835"},{"eventId":"40619272","title":"Law Enforcers Ep05","programmeId":null,"episodeId":null,"datetime":"2022-10-31 08:03:00.0","datetimeInUtc":"2022-10-31 00:03:00.0","duration":"01:07:00","siTrafficKey":"1:10000526:47989836","detailUrl":"/details/Law-Enforcers-Ep05-1:10000526:47989836"},{"eventId":"40619273","title":"Short End of the Stick Ep34","programmeId":null,"episodeId":null,"datetime":"2022-10-31 09:10:00.0","datetimeInUtc":"2022-10-31 01:10:00.0","duration":"00:52:00","siTrafficKey":"1:10000526:47989837","detailUrl":"/details/Short-End-of-the-Stick-Ep34-1:10000526:47989837"},{"eventId":"40619274","title":"Short End of the Stick Ep35","programmeId":null,"episodeId":null,"datetime":"2022-10-31 10:02:00.0","datetimeInUtc":"2022-10-31 02:02:00.0","duration":"00:53:00","siTrafficKey":"1:10000526:47989838","detailUrl":"/details/Short-End-of-the-Stick-Ep35-1:10000526:47989838"},{"eventId":"40465863","title":"Come Home Love Ep703","programmeId":null,"episodeId":null,"datetime":"2022-10-31 10:55:00.0","datetimeInUtc":"2022-10-31 02:55:00.0","duration":"00:25:00","siTrafficKey":"1:10000526:47636773","detailUrl":"/details/Come-Home-Love-Ep703-1:10000526:47636773"},{"eventId":"40619275","title":"Come Home Love Ep704","programmeId":null,"episodeId":null,"datetime":"2022-10-31 11:20:00.0","datetimeInUtc":"2022-10-31 03:20:00.0","duration":Line truncated
+1 -1
View File
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>F90SGHZYJ699VPE2</RequestId><HostId>FnSQQRmSgIWQjkrtu/JlD5UhB4sdDbjGxbxQi11+2LybUKavIk0RGzBxFU7imETDsT9eMoSvl8M=</HostId></Error>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>PYWWJ0TM0RSWSX09</RequestId><HostId>WU2+m2j4IPZtj2j5k2C9NB41iM2QaK+LqVlBk2kLCNDrddFBXPkjCFLBiALXw8xTPF4xIPTZOWs=</HostId></Error>
+27
View File
@@ -0,0 +1,27 @@
{
"responseCode": 200,
"responseMessage": "Linear Asset Detail",
"response": {
"eventId": "40609678",
"channelId": 425,
"channelStbNumber": "305",
"isHd": true,
"imageUrl": "https://s3-ap-southeast-1.amazonaws.com/ams-astro/production/images/1035X328883.jpg",
"title": "Triumph in the Skies Ep06",
"programmeId": "328827",
"episodeId": "328883",
"datetime": "2022-10-31 00:10:00.0",
"datetimeInUtc": "2022-10-30 16:10:00.0",
"duration": "00:52:00",
"siTrafficKey": "1:10000526:47979653",
"certification": "U",
"shortSynopsis": "This classic drama depicts the many aspects of two complicated relationships set against an airline company. Will those involved ever find true love?",
"longSynopsis": null,
"cast": "Francis Ng Chun Yu,Joe Ma Tak Chung,Flora Chan Wai San",
"director": "Joe Ma Tak Chung",
"filter": "Filter/71",
"subFilter": [
"Filter/24"
]
}
}
+73 -4
View File
@@ -1,30 +1,62 @@
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const API_ENDPOINT = `https://contenthub-api.eco.astro.com.my`
module.exports = {
site: 'astro.com.my',
url: function ({ channel }) {
return `https://contenthub-api.eco.astro.com.my/channel/${channel.site_id}.json`
return `${API_ENDPOINT}/channel/${channel.site_id}.json`
},
parser: function ({ content, date }) {
async parser({ content, date }) {
const programs = []
const items = parseItems(content, date)
items.forEach(item => {
for (let item of items) {
const start = dayjs.utc(item.datetimeInUtc)
const duration = parseDuration(item.duration)
const stop = start.add(duration, 's')
const details = await loadProgramDetails(item)
programs.push({
title: item.title,
sub_title: item.subtitles,
description: details.longSynopsis || details.shortSynopsis,
actors: parseList(details.cast),
directors: parseList(details.director),
icon: details.imageUrl,
rating: parseRating(details),
categories: parseCategories(details),
episode: parseEpisode(item),
start: start,
stop: stop
})
})
}
return programs
}
}
function parseEpisode(item) {
const [_, number] = item.title.match(/Ep(\d+)$/) || [null, null]
return number ? parseInt(number) : null
}
function parseList(list) {
return typeof list === 'string' ? list.split(',') : []
}
function parseRating(details) {
return details.certification
? {
system: 'LPF',
value: details.certification
}
: null
}
function parseItems(content, date) {
try {
const data = JSON.parse(content)
@@ -44,3 +76,40 @@ function parseDuration(duration) {
return hours * 3600 + minutes * 60 + seconds
}
function parseCategories(details) {
const genres = {
'filter/2': 'Action',
'filter/4': 'Anime',
'filter/12': 'Cartoons',
'filter/16': 'Comedy',
'filter/19': 'Crime',
'filter/24': 'Drama',
'filter/25': 'Educational',
'filter/36': 'Horror',
'filter/39': 'Live Action',
'filter/55': 'Pre-school',
'filter/56': 'Reality',
'filter/60': 'Romance',
'filter/68': 'Talk Show',
'filter/69': 'Thriller',
'filter/72': 'Variety',
'filter/75': 'Series',
'filter/100': 'Others (Children)'
}
return Array.isArray(details.subFilter)
? details.subFilter.map(g => genres[g.toLowerCase()]).filter(Boolean)
: []
}
async function loadProgramDetails(item) {
const url = `${API_ENDPOINT}/api/v1/linear-detail?siTrafficKey=${item.siTrafficKey}`
const data = await axios
.get(url)
.then(r => r.data)
.catch(err => console.log(err.message))
if (!data) return {}
return data.response || {}
}
+43 -13
View File
@@ -3,40 +3,70 @@
const { parser, url } = require('./astro.com.my.config.js')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
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('2022-08-30', 'YYYY-MM-DD').startOf('d')
jest.mock('axios')
const date = dayjs.utc('2022-10-31', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '235',
xmltv_id: 'AstroArena.my'
site_id: '425',
xmltv_id: 'TVBClassic.hk'
}
it('can generate valid url', () => {
expect(url({ channel })).toBe('https://contenthub-api.eco.astro.com.my/channel/235.json')
expect(url({ channel })).toBe('https://contenthub-api.eco.astro.com.my/channel/425.json')
})
it('can parse response', () => {
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
const results = parser({ content, date }).map(p => {
axios.get.mockImplementation(url => {
if (
url ===
'https://contenthub-api.eco.astro.com.my/api/v1/linear-detail?siTrafficKey=1:10000526:47979653'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program.json')))
})
} else {
return Promise.resolve({ data: '' })
}
})
let results = await parser({ content, channel, date })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results.length).toBe(14)
expect(results.length).toBe(31)
expect(results[0]).toMatchObject({
start: '2022-08-29T16:00:00.000Z',
stop: '2022-08-29T21:15:00.000Z',
title: 'BWF Kejohanan Dunia 2022'
start: '2022-10-30T16:10:00.000Z',
stop: '2022-10-30T17:02:00.000Z',
title: 'Triumph in the Skies Ep06',
description:
'This classic drama depicts the many aspects of two complicated relationships set against an airline company. Will those involved ever find true love?',
actors: ['Francis Ng Chun Yu', 'Joe Ma Tak Chung', 'Flora Chan Wai San'],
directors: ['Joe Ma Tak Chung'],
icon: 'https://s3-ap-southeast-1.amazonaws.com/ams-astro/production/images/1035X328883.jpg',
rating: {
system: 'LPF',
value: 'U'
},
episode: 6,
categories: ['Drama']
})
})
it('can handle empty guide', () => {
it('can handle empty guide', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
const result = parser({ date, content })
expect(result).toMatchObject([])
const results = await parser({ date, content })
expect(results).toMatchObject([])
})
+16 -17
View File
@@ -3,7 +3,6 @@
<channels>
<channel lang="ms" xmltv_id="8TV.my" site_id="115">8TV</channel>
<channel lang="ms" xmltv_id="ABCAustraliaAsia.au" site_id="461">ABC</channel>
<channel lang="ms" xmltv_id="AXNMalaysia.my" site_id="131">AXN</channel>
<channel lang="ms" xmltv_id="AdithyaTV.in" site_id="67">Adithya TV</channel>
<channel lang="ms" xmltv_id="AlJazeeraEnglish.qa" site_id="374">Aljazeera</channel>
<channel lang="ms" xmltv_id="AnimalPlanetMalaysia.my" site_id="377">Animal Planet</channel>
@@ -48,7 +47,7 @@
<channel lang="ms" xmltv_id="AstroWarna.my" site_id="272">Astro Warna</channel>
<channel lang="ms" xmltv_id="AstroXiaoTaiYang.my" site_id="387">Astro Xiao Tai Yang</channel>
<channel lang="ms" xmltv_id="AwesomeTV.my" site_id="433">Awesome TV</channel>
<!-- <channel lang="ms" xmltv_id="" site_id="459">BBC Brit</channel> -->
<channel lang="ms" xmltv_id="AXNMalaysia.my" site_id="131">AXN</channel>
<channel lang="ms" xmltv_id="BBCEarthAsia.uk" site_id="452">BBC Earth</channel>
<channel lang="ms" xmltv_id="BBCFirstMalaysia.my" site_id="458">BBC First</channel>
<channel lang="ms" xmltv_id="BBCLifestyleAsia.uk" site_id="451">BBC Lifestyle</channel>
@@ -60,20 +59,20 @@
<channel lang="ms" xmltv_id="BloombergTVAsiaPacific.hk" site_id="422">Bloomberg TV</channel>
<channel lang="ms" xmltv_id="Boo.my" site_id="251">Boo</channel>
<channel lang="ms" xmltv_id="BoomerangSoutheastAsia.us" site_id="430">Boomerang</channel>
<channel lang="ms" xmltv_id="CartoonNetworkAsia.sg" site_id="371">Cartoon Network HD</channel>
<channel lang="ms" xmltv_id="CCTV4Asia.cn" site_id="385">CCTV 4</channel>
<channel lang="ms" xmltv_id="CelestialClassicMovies.hk" site_id="187">Celestial Classic Movies</channel>
<channel lang="ms" xmltv_id="CelestialMoviesMalaysia.my" site_id="134">Celestial Movies</channel>
<channel lang="ms" xmltv_id="CGTN.cn" site_id="426">CGTN</channel>
<channel lang="ms" xmltv_id="ChuttiTVMalaysia.my" site_id="51">Chutti TV</channel>
<channel lang="ms" xmltv_id="CinemaxAsia.sg" site_id="337">Cinemax</channel>
<channel lang="ms" xmltv_id="CNA.sg" site_id="295">CNA</channel>
<channel lang="ms" xmltv_id="CNBCAsia.sg" site_id="423">CNBC Asia-Pacific</channel>
<channel lang="ms" xmltv_id="CNNInternationalAsiaPacific.hk" site_id="336">CNN</channel>
<channel lang="ms" xmltv_id="CTiAsia.tw" site_id="424">CTI TV</channel>
<channel lang="ms" xmltv_id="CartoonNetworkAsia.sg" site_id="371">Cartoon Network HD</channel>
<channel lang="ms" xmltv_id="CelestialClassicMovies.hk" site_id="187">Celestial Classic Movies</channel>
<channel lang="ms" xmltv_id="CelestialMoviesMalaysia.my" site_id="134">Celestial Movies</channel>
<channel lang="ms" xmltv_id="ChuttiTVMalaysia.my" site_id="51">Chutti TV</channel>
<channel lang="ms" xmltv_id="CinemaxAsia.sg" site_id="337">Cinemax</channel>
<channel lang="ms" xmltv_id="Colors.in" site_id="365">Colors</channel>
<channel lang="ms" xmltv_id="ColorsTamil.in" site_id="298">Colors Tamil</channel>
<channel lang="ms" xmltv_id="CrimePlusInvestigationAsia.us" site_id="369">Crime + Investigation</channel>
<channel lang="ms" xmltv_id="CTiAsia.tw" site_id="424">CTI TV</channel>
<channel lang="ms" xmltv_id="DiscoveryAsiaThailand.th" site_id="136">Discovery Asia</channel>
<channel lang="ms" xmltv_id="DiscoveryChannelHDIndonesia.id" site_id="376">Discovery Channel</channel>
<channel lang="ms" xmltv_id="DMAXAsia.sg" site_id="367">DMAX</channel>
@@ -82,33 +81,33 @@
<channel lang="ms" xmltv_id="EurosportAsia.fr" site_id="339">Eurosport</channel>
<channel lang="ms" xmltv_id="FoodNetworkAsia.sg" site_id="153">Food Network</channel>
<channel lang="ms" xmltv_id="France24English.fr" site_id="289">France 24 English</channel>
<channel lang="ms" xmltv_id="GolfChannelMalaysia.my" site_id="189">Golf Channel</channel>
<channel lang="ms" xmltv_id="GoShopChinese.my" site_id="202">Go Shop Chinese</channel>
<channel lang="ms" xmltv_id="GoShopMalay111.my" site_id="403">Go Shop Malay 111</channel>
<channel lang="ms" xmltv_id="GoShopMalay118.my" site_id="192">Go Shop Malay 118</channel>
<channel lang="ms" xmltv_id="GoShopMalay120.my" site_id="294">Go Shop Malay 120</channel>
<channel lang="ms" xmltv_id="GolfChannelMalaysia.my" site_id="189">Golf Channel</channel>
<channel lang="ms" xmltv_id="HBOAsia.sg" site_id="143">HBO</channel>
<channel lang="ms" xmltv_id="HBOFamilyAsia.sg" site_id="450">HBO Family</channel>
<channel lang="ms" xmltv_id="HBOHitsAsia.sg" site_id="449">HBO Hits</channel>
<channel lang="ms" xmltv_id="HBOAsia.sg" site_id="143">HBO</channel>
<channel lang="ms" xmltv_id="HGTVAsia.us" site_id="198">HGTV</channel>
<channel lang="ms" xmltv_id="HistoryAsia.us" site_id="144">History</channel>
<channel lang="ms" xmltv_id="Hits.sg" site_id="179">Hits</channel>
<channel lang="ms" xmltv_id="HitsMovies.sg" site_id="391">Hits Movies</channel>
<channel lang="ms" xmltv_id="iQIYI.cn" site_id="355">Iqiyi</channel>
<channel lang="ms" xmltv_id="KBSWorld.kr" site_id="161">KBS World</channel>
<channel lang="ms" xmltv_id="KPlus.sg" site_id="266">K+</channel>
<channel lang="ms" xmltv_id="Kix.hk" site_id="157">Kix</channel>
<channel lang="ms" xmltv_id="KPlus.sg" site_id="266">K+</channel>
<channel lang="ms" xmltv_id="LifetimeAsia.us" site_id="447">Lifetime</channel>
<channel lang="ms" xmltv_id="MTVAsia.sg" site_id="420">MTV</channel>
<channel lang="ms" xmltv_id="MoonbugKids.uk" site_id="465">Moonbug Kids</channel>
<channel lang="ms" xmltv_id="NHKWorldPremium.jp" site_id="428">NHK World Premium</channel>
<channel lang="ms" xmltv_id="NTV7.my" site_id="93">NTV 7</channel>
<channel lang="ms" xmltv_id="MTVAsia.sg" site_id="420">MTV</channel>
<channel lang="ms" xmltv_id="NatGeoPeopleMalaysia.my" site_id="199">Nat Geo People</channel>
<channel lang="ms" xmltv_id="NationalGeographicMalaysia.my" site_id="140">National Geographic</channel>
<channel lang="ms" xmltv_id="NationalGeographicWildMalaysia.my" site_id="322">National Geographic Wild</channel>
<channel lang="ms" xmltv_id="NickJrAsia.sg" site_id="392">Nick Jr</channel>
<channel lang="ms" xmltv_id="NHKWorldPremium.jp" site_id="428">NHK World Premium</channel>
<channel lang="ms" xmltv_id="NickelodeonAsia.sg" site_id="370">Nickelodeon</channel>
<channel lang="ms" xmltv_id="NickJrAsia.sg" site_id="392">Nick Jr</channel>
<channel lang="ms" xmltv_id="NjoiTV.my" site_id="302">Njoi TV</channel>
<channel lang="ms" xmltv_id="NTV7.my" site_id="93">NTV 7</channel>
<channel lang="ms" xmltv_id="OneTVAsia.sg" site_id="133">One</channel>
<channel lang="ms" xmltv_id="ParamountNetworkMalaysia.my" site_id="448">Paramount Network</channel>
<channel lang="ms" xmltv_id="PhoenixChineseChannel.hk" site_id="382">Phoenix Chinese Channel</channel>
@@ -124,6 +123,7 @@
<channel lang="ms" xmltv_id="StarVijay.in" site_id="357">Star Vijay</channel>
<channel lang="ms" xmltv_id="SunMusic.in" site_id="417">Sun Music</channel>
<channel lang="ms" xmltv_id="SunTVMalaysia.my" site_id="358">Sun TV</channel>
<channel lang="ms" xmltv_id="TADAA.my" site_id="432">Ta-Daa!</channel>
<channel lang="ms" xmltv_id="TLCSoutheastAsia.us" site_id="338">TLC</channel>
<channel lang="ms" xmltv_id="TV3.my" site_id="106">TV 3</channel>
<channel lang="ms" xmltv_id="TV9.my" site_id="48">TV 9</channel>
@@ -136,9 +136,8 @@
<channel lang="ms" xmltv_id="TVNAsia.hk" site_id="190">TVN HD</channel>
<channel lang="ms" xmltv_id="TVNMovies.hk" site_id="274">TVN Movies</channel>
<channel lang="ms" xmltv_id="TVS.my" site_id="429">TVS</channel>
<channel lang="ms" xmltv_id="TADAA.my" site_id="432">Ta-Daa!</channel>
<channel lang="ms" xmltv_id="WWENetwork.us" site_id="194">WWE Network</channel>
<channel lang="ms" xmltv_id="WarnerTVAsia.us" site_id="270">Warner TV</channel>
<channel lang="ms" xmltv_id="WWENetwork.us" site_id="194">WWE Network</channel>
<channel lang="ms" xmltv_id="ZeeTamil.in" site_id="297">Zee Tamil</channel>
</channels>
</site>