Merge pull request #1337 from iptv-org/add-epg.i-cable.com

Add guide from epg.i-cable.com
This commit is contained in:
Aleksandr Statciuk authored and GitHub committed 2022-11-14 11:34:22 +03:00
commit aa55dca876
7 files changed
+392

No files matched your search

+17
View File
@@ -0,0 +1,17 @@
name: epg.i-cable.com
on:
schedule:
- cron: '0 3 * * *'
workflow_dispatch:
workflow_run:
workflows: [_trigger]
types:
- completed
jobs:
load:
uses: ./.github/workflows/_load.yml
with:
site: ${{github.workflow}}
secrets:
APP_ID: ${{ secrets.APP_ID }}
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
@@ -0,0 +1,2 @@
{"dates":{"systemDate":["2022-11-13","2022-11-14","2022-11-15","2022-11-16","2022-11-17","2022-11-18","2022-11-19","2022-11-20"],"folderDate":["20221113","20221114","20221115","20221116","20221117","20221118","20221119","20221120"],"displayDate":["13\/11(Sun)","14\/11(Mon)","15\/11(Tue)","16\/11(Wed)","17\/11(Thu)","18\/11(Fri)","19\/11(Sat)","20\/11(Sun)"]},"locale":"chi","ch_banner":"http:\/\/epg.i-cable.com\/new\/images\/ch_banner\/ch_banner_003.jpg?ts=20221021","selectedDate":"2022-11-15","chno":"003","needLogin":"UNLOGON","chs":[{"channel_id":"182","channel_no":"003","channel_name":"HOY TV","channel_name_en":"HOY TV","cate_id":"9","channel_order":"2","channel_icon":"images\/1554170490_03_mobile.png","remark_id":null,"remark_name":null,"remark_name_en":null,"remark_symbol":null}],"cates":[{"cate_id":"9","cate_name":"\u8cc7\u8a0a","cate_name_en":"Infotainment","cate_ordery":"1","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon9.png","name":"\u8cc7\u8a0a"},{"cate_id":"1","cate_name":"\u65b0\u805e\u8ca1\u7d93","cate_name_en":"News & Finance","cate_ordery":"2","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon1.png","name":"\u65b0\u805e\u8ca1\u7d93"},{"cate_id":"3","cate_name":"\u96fb\u5f71","cate_name_en":"Movies","cate_ordery":"3","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon3.png","name":"\u96fb\u5f71"},{"cate_id":"2","cate_name":"\u5a1b\u6a02","cate_name_en":"Entertainment","cate_ordery":"4","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon2.png","name":"\u5a1b\u6a02"},{"cate_id":"5","cate_name":"\u5152\u7ae5","cate_name_en":"Kids","cate_ordery":"5","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon5.png","name":"\u5152\u7ae5"},{"cate_id":"4","cate_name":"\u9ad4\u80b2","cate_name_en":"Sports","cate_ordery":"6","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon4.png","name":"\u9ad4\u80b2"},{"cate_id":"7","cate_name":"\u7d00\u5be6","cate_name_en":"Documentary","cate_ordery":"7","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon7.png","name":"\u7d00\u5be6"},{"cate_id":"6","cate_name":"\u74b0\u5b87\u7d9c\u5408","cate_name_en":"International","cate_ordery":"8","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon6.png","name":"\u74b0\u5b87\u7d9c\u5408"},{"cate_id":"8","cate_name":"\u6210\u4eba","cate_name_en":"Adults","cate_ordery":"9","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon8.png","name":"\u6210\u4eba"}],"programs":[{"program_id":"723","program_name":"\u4f60\u5f97\u6211\u5f97\u5927\u5bb6\u5f97","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/723\/","intro":"yeswecan_intro.html","visual":""},{"program_id":"722","program_name":"\u8cb4\u59d3","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/722\/","intro":"saymyname_intro.html","visual":""},{"program_id":"721","program_name":"\u8ffd\u7d20\u89e3\u6c7a\u5e2b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/721\/","intro":"avegantrademark_intro.html","visual":""},{"program_id":"719","program_name":"\u6771\u5bae","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/719\/","intro":"goodbyemyprincess_intro.html","visual":"goodbyemyprincess_main_visual.html"},{"program_id":"717","program_name":"\u99d5\u8f15\u5c31\u719f","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/717\/","intro":"sayyestothenewadventures_intro.html","visual":""},{"program_id":"716","program_name":"\u5927\u5320\u4e4b\u5cf0","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/716\/","intro":"thesignaturedish_intro.html","visual":""},{"program_id":"715","program_name":"\u6253\u5305\u88b1","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/715\/","intro":"bossamstealthefate_intro.html","visual":"bossamstealthefate_main_visual.html"},{"program_id":"713","program_name":"\u72d7\u5e97\u9577","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/713\/","intro":"dogmanager_intro.html","visual":""},{"program_id":"712","program_name":"\u75ab\u8f49\u6642\u523b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/712\/","intro":"combatcovid19_intro.html","visual":""},{"program_id":"711","program_name":"\u7345\u5b50\u5c71\u4e0b\u7684\u6545\u4e8b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/711\/","intro":"storiesoflionrockspirit_intro.html","visual":"storiesoflionrockspirit_main_visual.html"},{"program_id":"710","program_name":"\u95dc\u65bc\u65e9\u9910\u7684\u4e00\u4e9b\u4e8b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/710\/","intro":"allaboutbreakfast_intro.html","visual":""},{"program_id":"708","program_name":"\u5927\u5510\u5973\u6cd5\u91ab","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/708\/","intro":"misstruth_intro.html","visual":"misstruth_main_visual.html"},{"progLine truncated
@@ -0,0 +1,2 @@
{"dates":{"systemDate":["2022-11-13","2022-11-14","2022-11-15","2022-11-16","2022-11-17","2022-11-18","2022-11-19","2022-11-20"],"folderDate":["20221113","20221114","20221115","20221116","20221117","20221118","20221119","20221120"],"displayDate":["13\/11(Sun)","14\/11(Mon)","15\/11(Tue)","16\/11(Wed)","17\/11(Thu)","18\/11(Fri)","19\/11(Sat)","20\/11(Sun)"]},"locale":"chi","ch_banner":"http:\/\/epg.i-cable.com\/new\/images\/ch_banner\/ch_banner_003.jpg?ts=20221021","selectedDate":"2023-11-15","chno":"003","needLogin":"UNLOGON","chs":[{"channel_id":"182","channel_no":"003","channel_name":"HOY TV","channel_name_en":"HOY TV","cate_id":"9","channel_order":"2","channel_icon":"images\/1554170490_03_mobile.png","remark_id":null,"remark_name":null,"remark_name_en":null,"remark_symbol":null}],"cates":[{"cate_id":"9","cate_name":"\u8cc7\u8a0a","cate_name_en":"Infotainment","cate_ordery":"1","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon9.png","name":"\u8cc7\u8a0a"},{"cate_id":"1","cate_name":"\u65b0\u805e\u8ca1\u7d93","cate_name_en":"News & Finance","cate_ordery":"2","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon1.png","name":"\u65b0\u805e\u8ca1\u7d93"},{"cate_id":"3","cate_name":"\u96fb\u5f71","cate_name_en":"Movies","cate_ordery":"3","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon3.png","name":"\u96fb\u5f71"},{"cate_id":"2","cate_name":"\u5a1b\u6a02","cate_name_en":"Entertainment","cate_ordery":"4","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon2.png","name":"\u5a1b\u6a02"},{"cate_id":"5","cate_name":"\u5152\u7ae5","cate_name_en":"Kids","cate_ordery":"5","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon5.png","name":"\u5152\u7ae5"},{"cate_id":"4","cate_name":"\u9ad4\u80b2","cate_name_en":"Sports","cate_ordery":"6","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon4.png","name":"\u9ad4\u80b2"},{"cate_id":"7","cate_name":"\u7d00\u5be6","cate_name_en":"Documentary","cate_ordery":"7","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon7.png","name":"\u7d00\u5be6"},{"cate_id":"6","cate_name":"\u74b0\u5b87\u7d9c\u5408","cate_name_en":"International","cate_ordery":"8","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon6.png","name":"\u74b0\u5b87\u7d9c\u5408"},{"cate_id":"8","cate_name":"\u6210\u4eba","cate_name_en":"Adults","cate_ordery":"9","cate_status":"1","cate_icon":"http:\/\/epg.i-cable.com\/new\/images\/epgTabletIcon\/epg_icon8.png","name":"\u6210\u4eba"}],"programs":[{"program_id":"723","program_name":"\u4f60\u5f97\u6211\u5f97\u5927\u5bb6\u5f97","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/723\/","intro":"yeswecan_intro.html","visual":""},{"program_id":"722","program_name":"\u8cb4\u59d3","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/722\/","intro":"saymyname_intro.html","visual":""},{"program_id":"721","program_name":"\u8ffd\u7d20\u89e3\u6c7a\u5e2b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/721\/","intro":"avegantrademark_intro.html","visual":""},{"program_id":"719","program_name":"\u6771\u5bae","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/719\/","intro":"goodbyemyprincess_intro.html","visual":"goodbyemyprincess_main_visual.html"},{"program_id":"717","program_name":"\u99d5\u8f15\u5c31\u719f","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/717\/","intro":"sayyestothenewadventures_intro.html","visual":""},{"program_id":"716","program_name":"\u5927\u5320\u4e4b\u5cf0","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/716\/","intro":"thesignaturedish_intro.html","visual":""},{"program_id":"715","program_name":"\u6253\u5305\u88b1","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/715\/","intro":"bossamstealthefate_intro.html","visual":"bossamstealthefate_main_visual.html"},{"program_id":"713","program_name":"\u72d7\u5e97\u9577","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/713\/","intro":"dogmanager_intro.html","visual":""},{"program_id":"712","program_name":"\u75ab\u8f49\u6642\u523b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/712\/","intro":"combatcovid19_intro.html","visual":""},{"program_id":"711","program_name":"\u7345\u5b50\u5c71\u4e0b\u7684\u6545\u4e8b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/711\/","intro":"storiesoflionrockspirit_intro.html","visual":"storiesoflionrockspirit_main_visual.html"},{"program_id":"710","program_name":"\u95dc\u65bc\u65e9\u9910\u7684\u4e00\u4e9b\u4e8b","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/710\/","intro":"allaboutbreakfast_intro.html","visual":""},{"program_id":"708","program_name":"\u5927\u5510\u5973\u6cd5\u91ab","url":"http:\/\/epg.i-cable.com\/ci\/program\/intro\/708\/","intro":"misstruth_intro.html","visual":"misstruth_main_visual.html"},{"progLine truncated
@@ -0,0 +1,92 @@
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
const API_ENDPOINT = 'http://epg.i-cable.com/ci/channel'
module.exports = {
site: 'epg.i-cable.com',
request: {
cache: {
ttl: 60 * 60 * 1000 // 1h
}
},
url: function ({ channel, date }) {
return `${API_ENDPOINT}/epg/${channel.site_id}/${date.format('YYYY-MM-DD')}?api=api`
},
parser({ content, channel, date }) {
const programs = []
const items = parseItems(content, date)
for (let item of items) {
const prev = programs[programs.length - 1]
let start = parseStart(item, date)
const stop = start.add(30, 'm')
if (prev) {
if (start.isBefore(prev.start)) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
}
programs.push({
title: parseTitle(item, channel),
start: start,
stop: stop
})
}
return programs
},
async channels({ lang }) {
const data = await axios
.get(`${API_ENDPOINT}/category/0?api=api`)
.then(r => r.data)
.catch(console.error)
let channels = []
const promises = data.cates.map(c => axios.get(`${API_ENDPOINT}/category/${c.cate_id}?api=api`))
await Promise.allSettled(promises).then(results => {
results.forEach(r => {
if (r.status === 'fulfilled') {
channels = channels.concat(r.value.data.chs)
}
})
})
return channels.map(c => {
let name = lang === 'en' ? c.channel_name_en : c.channel_name
name = c.remark_id == 3 ? `${name} [HD]` : name
return {
site_id: c.channel_no,
name,
lang
}
})
}
}
function parseTitle(item, channel) {
return channel.lang === 'en' ? item.programme_name_eng : item.programme_name_chi
}
function parseStart(item, date) {
return dayjs.tz(
`${date.format('YYYY-MM-DD')} ${item.time} ${item.session_mark}`,
'YYYY-MM-DD hh:mm A',
'Asia/Hong_Kong'
)
}
function parseItems(content, date) {
const data = JSON.parse(content)
if (!data || !Array.isArray(data.epgs)) return []
return data.epgs
}
@@ -0,0 +1,75 @@
// npm run channels:parse -- --config=./sites/epg.i-cable.com/epg.i-cable.com.config.js --output=./sites/epg.i-cable.com/epg.i-cable.com_hk-zh.channels.xml --set=lang:zh
// npm run channels:parse -- --config=./sites/epg.i-cable.com/epg.i-cable.com.config.js --output=./sites/epg.i-cable.com/epg.i-cable.com_hk-en.channels.xml --set=lang:en
// npx epg-grabber --config=sites/epg.i-cable.com/epg.i-cable.com.config.js --channels=sites/epg.i-cable.com/epg.i-cable.com_hk-zh.channels.xml --output=guide.xml --days=2
// npx epg-grabber --config=sites/epg.i-cable.com/epg.i-cable.com.config.js --channels=sites/epg.i-cable.com/epg.i-cable.com_hk-en.channels.xml --output=guide.xml --days=2
const { parser, url } = require('./epg.i-cable.com.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)
jest.mock('axios')
const date = dayjs.utc('2022-11-15', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '003',
xmltv_id: 'HOYTV.hk',
lang: 'zh'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'http://epg.i-cable.com/ci/channel/epg/003/2022-11-15?api=api'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
let results = parser({ content, channel, date })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2022-11-14T22:00:00.000Z',
stop: '2022-11-14T23:00:00.000Z',
title: 'Bloomberg 時段'
})
expect(results[31]).toMatchObject({
start: '2022-11-15T21:00:00.000Z',
stop: '2022-11-15T21:30:00.000Z',
title: 'Bloomberg 時段'
})
})
it('can parse response in English', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
const channelEN = { ...channel, lang: 'en' }
let results = parser({ content, channel: channelEN, date })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2022-11-14T22:00:00.000Z',
stop: '2022-11-14T23:00:00.000Z',
title: 'Bloomberg Hour'
})
})
it('can handle empty guide', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
const results = parser({ date, channel, content })
expect(results).toMatchObject([])
})
@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="epg.i-cable.com">
<channels>
<channel lang="en" xmltv_id="ABCAustralia.au" site_id="326">ABC Australia</channel>
<channel lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="133">Al Jazeera English</channel>
<channel lang="en" xmltv_id="AnimalPlanetSoutheastAsia.sg" site_id="757">Animal Planet</channel>
<channel lang="en" xmltv_id="ArirangTV.kr" site_id="325">Arirang TV</channel>
<channel lang="en" xmltv_id="AsianFoodNetwork.sg" site_id="717">Asian Food Network [HD]</channel>
<channel lang="en" xmltv_id="BBCEarthAsia.uk" site_id="721">BBC Earth</channel>
<channel lang="en" xmltv_id="BBCLifestyleAsia.uk" site_id="760">BBC Lifestyle</channel>
<channel lang="en" xmltv_id="BBCWorldNewsAsiaPacific.uk" site_id="122">BBC WorldNews</channel>
<channel lang="en" xmltv_id="BloombergTVAsia.hk" site_id="155">Bloomberg TV</channel>
<channel lang="en" xmltv_id="BoomerangAsia.sg" site_id="512">Boomerang</channel>
<channel lang="en" xmltv_id="CartoonNetworkAsia.sg" site_id="511">Cartoon Network</channel>
<channel lang="en" xmltv_id="CBeebiesAsia.uk" site_id="517">CBeebies</channel>
<channel lang="en" xmltv_id="CCTV1.cn" site_id="341">CCTV-1 [HD]</channel>
<channel lang="en" xmltv_id="CCTV11.cn" site_id="340">CCTV-11-Opera</channel>
<channel lang="en" xmltv_id="CCTV13.cn" site_id="111">CCTV-News</channel>
<channel lang="en" xmltv_id="CCTV4Asia.cn" site_id="112">CCTV-4</channel>
<channel lang="en" xmltv_id="CGTN.cn" site_id="129">CGTN</channel>
<channel lang="en" xmltv_id="CGTNDocumentary.cn" site_id="722">CGTN-Documentary [HD]</channel>
<channel lang="en" xmltv_id="ChannelBlue.hk" site_id="901">Channel Blue</channel>
<channel lang="en" xmltv_id="ChannelFire.hk" site_id="902">Channel Fire</channel>
<channel lang="en" xmltv_id="CNAInternational.sg" site_id="130">Ch News Asia</channel>
<channel lang="en" xmltv_id="CNBCAsia.sg" site_id="127">CNBC HK</channel>
<channel lang="en" xmltv_id="CNNInternationalAsiaPacific.hk" site_id="124">CNNI</channel>
<channel lang="en" xmltv_id="DaVinciAsia.de" site_id="513">Da Vinci</channel>
<channel lang="en" xmltv_id="DiscoveryAsia.sg" site_id="710">Discovery Asia [HD]</channel>
<channel lang="en" xmltv_id="DiscoveryChannelSoutheastAsia.sg" site_id="754">Discovery</channel>
<channel lang="en" xmltv_id="DiscoveryScienceSoutheastAsia.sg" site_id="758">Discovery Sci</channel>
<channel lang="en" xmltv_id="DMAXSoutheastAsia.sg" site_id="759">DMAX</channel>
<channel lang="en" xmltv_id="DragonTV.cn" site_id="334">Dragon TV</channel>
<channel lang="en" xmltv_id="DreamWorksChannelAsia.us" site_id="510">DreamWorks</channel>
<channel lang="en" xmltv_id="DWDeutsch.de" site_id="140">DW (Deutsch)</channel>
<channel lang="en" xmltv_id="DWEnglish.de" site_id="139">DW (English)</channel>
<channel lang="en" xmltv_id="EBCYOYO.tw" site_id="502">Asia YOYO TV</channel>
<channel lang="en" xmltv_id="ETTVAsiaNews.tw" site_id="114">ETTV AsiaNews</channel>
<channel lang="en" xmltv_id="EBCAsia.tw" site_id="331">ETTV Asia</channel>
<channel lang="en" xmltv_id="EuronewsEnglish.fr" site_id="136">euronews(Eng)</channel>
<channel lang="en" xmltv_id="EuronewsPortuguese.fr" site_id="137">euronews(Por)</channel>
<channel lang="en" xmltv_id="EurosportAsia.fr" site_id="651">Eurosport</channel>
<channel lang="en" xmltv_id="EVE.us" site_id="756">EVE</channel>
<channel lang="en" xmltv_id="FashionTVAsia.fr" site_id="375">Fashion TV</channel>
<channel lang="en" xmltv_id="FightSports.us" site_id="652">FIGHT SPORTS</channel>
<channel lang="en" xmltv_id="France24English.fr" site_id="135">France 24 English</channel>
<channel lang="en" xmltv_id="France24French.fr" site_id="134">France 24 French</channel>
<channel lang="en" xmltv_id="GlobalTrekker.sg" site_id="708">Global Trekker [HD]</channel>
<channel lang="en" xmltv_id="GuangdongSatelliteTV.cn" site_id="305">GRT GBA Satellite TV</channel>
<channel lang="en" xmltv_id="HITS.sg" site_id="310">HITS [HD]</channel>
<channel lang="en" xmltv_id="HITSMovies.sg" site_id="213">HITS MOVIES [HD]</channel>
<channel lang="en" xmltv_id="HKIBC.hk" site_id="005">HK Int’l Business Ch</channel>
<channel lang="en" xmltv_id="HLN.us" site_id="125">CNN HLN News</channel>
<channel lang="en" xmltv_id="HOYTV.hk" site_id="003">HOY TV</channel>
<channel lang="en" xmltv_id="HubeiSatelliteTV.cn" site_id="337">Hubei TV</channel>
<channel lang="en" xmltv_id="HunanTVInternational.cn" site_id="336">Hunan TV International</channel>
<channel lang="en" xmltv_id="iCABLECableMovies.hk" site_id="251">CABLE Movies</channel>
<channel lang="en" xmltv_id="iCABLEChannel18.hk" site_id="618">Channel 18</channel>
<channel lang="en" xmltv_id="iCABLECinep.hk" site_id="253">Cine p.</channel>
<channel lang="en" xmltv_id="iCABLEFamilyEntertainmentChannel.hk" site_id="371">Family Entertainment Channel</channel>
<channel lang="en" xmltv_id="iCABLEFinanceInfoChannel.hk" site_id="151">i-CABLE Finance Info Channel</channel>
<channel lang="en" xmltv_id="iCABLEHD603.hk" site_id="603">HD Channel 603 [HD]</channel>
<channel lang="en" xmltv_id="iCABLEHorseRacing1.hk" site_id="668">Horse Racing 1</channel>
<channel lang="en" xmltv_id="iCABLEHorseRacing2.hk" site_id="669">Horse Racing 2</channel>
<channel lang="en" xmltv_id="iCABLELiveNewsChannel.hk" site_id="153">i-CABLE Live News Channel</channel>
<channel lang="en" xmltv_id="iCABLENewsChannel.hk" site_id="152">i-CABLE News Channel</channel>
<channel lang="en" xmltv_id="iCABLESportsChannel.hk" site_id="661">Sports Channel</channel>
<channel lang="en" xmltv_id="iCABLESportsPlus1.hk" site_id="662">Sports Plus 1</channel>
<channel lang="en" xmltv_id="iCABLESportsPlus2.hk" site_id="664">Sports Plus 2</channel>
<channel lang="en" xmltv_id="iCABLESportsPlus3.hk" site_id="665">Sports Plus 3</channel>
<channel lang="en" xmltv_id="LFCTV.uk" site_id="654">LFCTV</channel>
<channel lang="en" xmltv_id="MTVLive.uk" site_id="333">MTV Live</channel>
<channel lang="en" xmltv_id="MyCinemaEurope.ch" site_id="252">MyCineEu</channel>
<channel lang="en" xmltv_id="NationalGeographicHongKong.hk" site_id="752">National Geographic</channel>
<channel lang="en" xmltv_id="NationalGeographicWildHongKong.hk" site_id="751">Nat Geo Wild</channel>
<channel lang="en" xmltv_id="NHKWorldJapan.jp" site_id="126">NHK World-Japan</channel>
<channel lang="en" xmltv_id="NHKWorldPremium.jp" site_id="322">NHK World Pr</channel>
<channel lang="en" xmltv_id="NickelodeonAsia.sg" site_id="514">Nickelodeon</channel>
<channel lang="en" xmltv_id="NickJrAsia.sg" site_id="515">Nick Jr.</channel>
<channel lang="en" xmltv_id="OutdoorChannelInternational.us" site_id="761">Outdoor Channel</channel>
<channel lang="en" xmltv_id="ParamountNetworkAsia.us" site_id="312">Paramount Network Asia [HD]</channel>
<channel lang="en" xmltv_id="PetClubTV.hk" site_id="730">Pet Club TV</channel>
<channel lang="en" xmltv_id="PhoenixChineseChannel.hk" site_id="376">Phoenix Chi</channel>
<channel lang="en" xmltv_id="PhoenixHongKongChannel.hk" site_id="304">Phoenix Hong Kong Channel</channel>
<channel lang="en" xmltv_id="PhoenixInfoNewsChannel.hk" site_id="154">PhoenixInfonews</channel>
<channel lang="en" xmltv_id="ROCKEntertainment.sg" site_id="378">ROCK Entertainment</channel>
<channel lang="en" xmltv_id="ROCKExtreme.sg" site_id="318">ROCK Extreme [HD]</channel>
<channel lang="en" xmltv_id="RT.ru" site_id="131">Russia Today</channel>
<channel lang="en" xmltv_id="ShenzhenSatelliteTVInternational.cn" site_id="335">SZTV</channel>
<channel lang="en" xmltv_id="SkyNewsInternational.uk" site_id="121">Sky News</channel>
<channel lang="en" xmltv_id="StarChineseChannel.hk" site_id="332">STAR Chinese Channel</channel>
<channel lang="en" xmltv_id="StarChineseMovies.hk" site_id="204">Star Chinese Movies [HD]</channel>
<channel lang="en" xmltv_id="TechStorm.sg" site_id="610">TechStorm [HD]</channel>
<channel lang="en" xmltv_id="Thrill.hk" site_id="219">Thrill</channel>
<channel lang="en" xmltv_id="TLCSoutheastAsia.sg" site_id="755">TLC</channel>
<channel lang="en" xmltv_id="TravelChannelSoutheastAsia.sg" site_id="718">Travel Channel [HD]</channel>
<channel lang="en" xmltv_id="tvNAsia.hk" site_id="377">tvN</channel>
<channel lang="en" xmltv_id="WION.in" site_id="852">WION</channel>
<channel lang="en" xmltv_id="ZeeCinemaAsia.in" site_id="853">Zee Cinema</channel>
<channel lang="en" xmltv_id="ZeeTVAsiaPacific.sg" site_id="851">Zee TV</channel>
<channel lang="en" xmltv_id="Zing.in" site_id="854">Zing</channel>
</channels>
</site>
@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="epg.i-cable.com">
<channels>
<channel lang="zh" xmltv_id="ABCAustralia.au" site_id="326">ABC Australia</channel>
<channel lang="zh" xmltv_id="AlJazeeraEnglish.qa" site_id="133">半島電視台英語頻道</channel>
<channel lang="zh" xmltv_id="AnimalPlanetSoutheastAsia.sg" site_id="757">動物星球頻道</channel>
<channel lang="zh" xmltv_id="ArirangTV.kr" site_id="325">Arirang TV</channel>
<channel lang="zh" xmltv_id="AsianFoodNetwork.sg" site_id="717">亞洲美食頻道 [HD]</channel>
<channel lang="zh" xmltv_id="BBCEarthAsia.uk" site_id="721">BBC Earth</channel>
<channel lang="zh" xmltv_id="BBCLifestyleAsia.uk" site_id="760">BBC Lifestyle</channel>
<channel lang="zh" xmltv_id="BBCWorldNewsAsiaPacific.uk" site_id="122">BBC WorldNews</channel>
<channel lang="zh" xmltv_id="BloombergTVAsia.hk" site_id="155">Bloomberg TV</channel>
<channel lang="zh" xmltv_id="BoomerangAsia.sg" site_id="512">Boomerang 頻道</channel>
<channel lang="zh" xmltv_id="CartoonNetworkAsia.sg" site_id="511">卡通頻道</channel>
<channel lang="zh" xmltv_id="CBeebiesAsia.uk" site_id="517">CBeebies</channel>
<channel lang="zh" xmltv_id="CCTV1.cn" site_id="341">中央電視台綜合頻道 [HD]</channel>
<channel lang="zh" xmltv_id="CCTV11.cn" site_id="340">中央電視台戲曲頻道</channel>
<channel lang="zh" xmltv_id="CCTV13.cn" site_id="111">中央電視台新聞頻道</channel>
<channel lang="zh" xmltv_id="CCTV4Asia.cn" site_id="112">中央電視台中文國際頻道</channel>
<channel lang="zh" xmltv_id="CGTN.cn" site_id="129">中國環球電視網</channel>
<channel lang="zh" xmltv_id="CGTNDocumentary.cn" site_id="722">中國環球電視網紀錄頻道 [HD]</channel>
<channel lang="zh" xmltv_id="ChannelBlue.hk" site_id="901">歡樂台</channel>
<channel lang="zh" xmltv_id="ChannelFire.hk" site_id="902">惹火台</channel>
<channel lang="zh" xmltv_id="CNAInternational.sg" site_id="130">亞洲新聞台</channel>
<channel lang="zh" xmltv_id="CNBCAsia.sg" site_id="127">CNBC HK</channel>
<channel lang="zh" xmltv_id="CNNInternationalAsiaPacific.hk" site_id="124">CNNI</channel>
<channel lang="zh" xmltv_id="DaVinciAsia.de" site_id="513">達文西頻道</channel>
<channel lang="zh" xmltv_id="DiscoveryAsia.sg" site_id="710">Discovery Asia [HD]</channel>
<channel lang="zh" xmltv_id="DiscoveryChannelSoutheastAsia.sg" site_id="754">Discovery</channel>
<channel lang="zh" xmltv_id="DiscoveryScienceSoutheastAsia.sg" site_id="758">Discovery科學頻道</channel>
<channel lang="zh" xmltv_id="DMAXSoutheastAsia.sg" site_id="759">DMAX</channel>
<channel lang="zh" xmltv_id="DragonTV.cn" site_id="334">東方衛視國際頻道</channel>
<channel lang="zh" xmltv_id="DreamWorksChannelAsia.us" site_id="510">夢工廠</channel>
<channel lang="zh" xmltv_id="DWDeutsch.de" site_id="140">DW (Deutsch)</channel>
<channel lang="zh" xmltv_id="DWEnglish.de" site_id="139">DW (English)</channel>
<channel lang="zh" xmltv_id="EBCAsia.tw" site_id="331">東森亞洲衛視</channel>
<channel lang="zh" xmltv_id="EBCYOYO.tw" site_id="502">東森亞洲幼幼台</channel>
<channel lang="zh" xmltv_id="ETTVAsiaNews.tw" site_id="114">東森亞洲新聞台</channel>
<channel lang="zh" xmltv_id="EuronewsEnglish.fr" site_id="136">euronews(Eng)</channel>
<channel lang="zh" xmltv_id="EuronewsPortuguese.fr" site_id="137">euronews(Por)</channel>
<channel lang="zh" xmltv_id="EurosportAsia.fr" site_id="651">歐洲體育頻道</channel>
<channel lang="zh" xmltv_id="EVE.us" site_id="756">EVE</channel>
<channel lang="zh" xmltv_id="FashionTVAsia.fr" site_id="375">Fashion TV</channel>
<channel lang="zh" xmltv_id="FightSports.us" site_id="652">FIGHT SPORTS</channel>
<channel lang="zh" xmltv_id="France24English.fr" site_id="135">France 24 English</channel>
<channel lang="zh" xmltv_id="France24French.fr" site_id="134">France 24 French</channel>
<channel lang="zh" xmltv_id="GlobalTrekker.sg" site_id="708">Global Trekker [HD]</channel>
<channel lang="zh" xmltv_id="GuangdongSatelliteTV.cn" site_id="305">大灣區衛視</channel>
<channel lang="zh" xmltv_id="HITS.sg" site_id="310">HITS [HD]</channel>
<channel lang="zh" xmltv_id="HITSMovies.sg" site_id="213">HITS MOVIES [HD]</channel>
<channel lang="zh" xmltv_id="HKIBC.hk" site_id="005">香港國際財經台</channel>
<channel lang="zh" xmltv_id="HLN.us" site_id="125">CNN HLN News</channel>
<channel lang="zh" xmltv_id="HOYTV.hk" site_id="003">HOY TV</channel>
<channel lang="zh" xmltv_id="HubeiSatelliteTV.cn" site_id="337">湖北衛視</channel>
<channel lang="zh" xmltv_id="HunanTVInternational.cn" site_id="336">湖南廣播電視台國際頻道</channel>
<channel lang="zh" xmltv_id="iCABLECableMovies.hk" site_id="251">有線電影台</channel>
<channel lang="zh" xmltv_id="iCABLEChannel18.hk" site_id="618">有線18台</channel>
<channel lang="zh" xmltv_id="iCABLECinep.hk" site_id="253">Cine p.</channel>
<channel lang="zh" xmltv_id="iCABLEFamilyEntertainmentChannel.hk" site_id="371">綜合娛樂台</channel>
<channel lang="zh" xmltv_id="iCABLEFinanceInfoChannel.hk" site_id="151">財經資訊台</channel>
<channel lang="zh" xmltv_id="iCABLEHD603.hk" site_id="603">高清603台 [HD]</channel>
<channel lang="zh" xmltv_id="iCABLEHorseRacing1.hk" site_id="668">賽馬1台</channel>
<channel lang="zh" xmltv_id="iCABLEHorseRacing2.hk" site_id="669">賽馬2台</channel>
<channel lang="zh" xmltv_id="iCABLELiveNewsChannel.hk" site_id="153">直播新聞台</channel>
<channel lang="zh" xmltv_id="iCABLENewsChannel.hk" site_id="152">新聞台</channel>
<channel lang="zh" xmltv_id="iCABLESportsChannel.hk" site_id="661">體育台</channel>
<channel lang="zh" xmltv_id="iCABLESportsPlus1.hk" site_id="662">Sports Plus 1</channel>
<channel lang="zh" xmltv_id="iCABLESportsPlus2.hk" site_id="664">Sports Plus 2</channel>
<channel lang="zh" xmltv_id="iCABLESportsPlus3.hk" site_id="665">Sports Plus 3</channel>
<channel lang="zh" xmltv_id="LFCTV.uk" site_id="654">LFCTV</channel>
<channel lang="zh" xmltv_id="MTVLive.uk" site_id="333">MTV Live</channel>
<channel lang="zh" xmltv_id="MyCinemaEurope.ch" site_id="252">光影歐洲</channel>
<channel lang="zh" xmltv_id="NationalGeographicHongKong.hk" site_id="752">國家地理頻道</channel>
<channel lang="zh" xmltv_id="NationalGeographicWildHongKong.hk" site_id="751">國家地理野生頻道</channel>
<channel lang="zh" xmltv_id="NHKWorldJapan.jp" site_id="126">NHK World-Japan</channel>
<channel lang="zh" xmltv_id="NHKWorldPremium.jp" site_id="322">NHK World Pr</channel>
<channel lang="zh" xmltv_id="NickelodeonAsia.sg" site_id="514">Nickelodeon</channel>
<channel lang="zh" xmltv_id="NickJrAsia.sg" site_id="515">Nick Jr.</channel>
<channel lang="zh" xmltv_id="OutdoorChannelInternational.us" site_id="761">戶外頻道</channel>
<channel lang="zh" xmltv_id="ParamountNetworkAsia.us" site_id="312">Paramount Network Asia [HD]</channel>
<channel lang="zh" xmltv_id="PetClubTV.hk" site_id="730">Pet Club TV</channel>
<channel lang="zh" xmltv_id="PhoenixChineseChannel.hk" site_id="376">鳯凰衛視中文台</channel>
<channel lang="zh" xmltv_id="PhoenixHongKongChannel.hk" site_id="304">鳳凰衛視香港台</channel>
<channel lang="zh" xmltv_id="PhoenixInfoNewsChannel.hk" site_id="154">鳳凰衛視資訊台</channel>
<channel lang="zh" xmltv_id="ROCKEntertainment.sg" site_id="378">ROCK綜藝娛樂</channel>
<channel lang="zh" xmltv_id="ROCKExtreme.sg" site_id="318">ROCK超極娛樂 [HD]</channel>
<channel lang="zh" xmltv_id="RT.ru" site_id="131">Russia Today</channel>
<channel lang="zh" xmltv_id="ShenzhenSatelliteTVInternational.cn" site_id="335">深圳電視台</channel>
<channel lang="zh" xmltv_id="SkyNewsInternational.uk" site_id="121">Sky News</channel>
<channel lang="zh" xmltv_id="StarChineseChannel.hk" site_id="332">衛視中文台</channel>
<channel lang="zh" xmltv_id="StarChineseMovies.hk" site_id="204">衛視電影台 [HD]</channel>
<channel lang="zh" xmltv_id="TechStorm.sg" site_id="610">TechStorm [HD]</channel>
<channel lang="zh" xmltv_id="Thrill.hk" site_id="219">驚慄電影台</channel>
<channel lang="zh" xmltv_id="TLCSoutheastAsia.sg" site_id="755">旅遊生活頻道</channel>
<channel lang="zh" xmltv_id="TravelChannelSoutheastAsia.sg" site_id="718">旅遊頻道 [HD]</channel>
<channel lang="zh" xmltv_id="tvNAsia.hk" site_id="377">tvN</channel>
<channel lang="zh" xmltv_id="WION.in" site_id="852">WION</channel>
<channel lang="zh" xmltv_id="ZeeCinemaAsia.in" site_id="853">Zee Cinema</channel>
<channel lang="zh" xmltv_id="ZeeTVAsiaPacific.sg" site_id="851">Zee TV</channel>
<channel lang="zh" xmltv_id="Zing.in" site_id="854">Zing</channel>
</channels>
</site>