Compare commits

...

1306 commits

Author SHA1 Message Date
PopeyeTheSai10r
522bf757f9
Merge pull request #2756 from iptv-org/patch-2025.04.4
Patch 2025.04.4
2025-05-09 04:50:51 -07:00
Ismaël Moret
63fdc88d01
Merge pull request #2748 from iptv-org/patch-2025.04.2
Patch 2025.04.2
2025-05-09 13:50:36 +02:00
Ismaël Moret
539000fe61
Merge pull request #2750 from iptv-org/freearhey-patch-2
Update epgshare01.online
2025-05-09 13:50:11 +02:00
iptv-bot[bot]
b572572616 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1491916128) workflow.
2025-05-09 01:03:47 +00:00
freearhey
e505444f00 Update *.channels.xml 2025-04-27 03:19:30 +03:00
Aleksandr Statciuk
db56a4d6c0
Merge pull request #2752 from iptv-org/patch-2025.04.3
Patch 2025.04.3
2025-04-22 06:04:26 +03:00
PopeyeTheSai10r
113395c6b5
Merge pull request #2753 from arifbudiman/Fix-title-parsing-for-arirang.com
Fix title parsing for arirang.com
2025-04-20 19:38:59 -07:00
Arif Budiman
87c14f0203 Handled cases where bis_program_code is not available. 2025-04-20 12:36:13 -07:00
Arif Budiman
b4c4d51b07 Fix title parsing for arirang.com 2025-04-19 16:23:44 -07:00
freearhey
11cab21cfc Update CONTRIBUTING.md 2025-04-19 02:09:05 +03:00
freearhey
22dc9a06d1 Update README.md 2025-04-19 02:06:33 +03:00
freearhey
8e363d0e83 Update scripts 2025-04-19 02:06:15 +03:00
freearhey
d681fcb3d5 Update grab.test.ts 2025-04-19 02:05:54 +03:00
freearhey
e54dfb4042 Update tests/__data__ 2025-04-19 02:04:20 +03:00
freearhey
9f93a30988 Update dependencies 2025-04-19 02:03:58 +03:00
freearhey
7a193e37e1 Update readme.md 2025-04-16 02:49:31 +03:00
freearhey
48457d0d10 Update README.md 2025-04-07 10:41:30 +03:00
freearhey
af86d7204f Create Dockerfile 2025-04-07 10:41:24 +03:00
PopeyeTheSai10r
7e1fbcbe15
Merge pull request #2745 from iptv-org/patch-2025.04.1
Patch 2025.04.1
2025-04-06 14:53:04 -07:00
iptv-bot[bot]
f91f53a0de [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1428748834) workflow.
2025-04-06 01:04:15 +00:00
Ismaël Moret
af465601ab
Merge pull request #2668 from iptv-org/update-tvtv.us-2
Update tvtv.us
2025-04-05 21:32:40 +02:00
PopeyeTheSai10r
704c04f261
Merge pull request #2746 from iptv-org/CasperMcFadden95-patch-1
Update epgshare01.online_DISTROTV1.channels.xml
2025-04-04 20:52:16 -07:00
PopeyeTheSai10r
f26e075e96
Merge pull request #2747 from Abu-Vovan-Al-Yahudi/patch-1
Update epg.iptvx.one.channels.xml
2025-04-04 20:50:57 -07:00
CasperMcFadden95
697c6bf0f6
Update sites/epgshare01.online/epgshare01.online_DISTROTV1.channels.xml
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
2025-04-04 16:08:42 +00:00
Abu-Vovan-Al-Yahudi
925f4c4974
Update sites/epg.iptvx.one/epg.iptvx.one.channels.xml
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
2025-04-04 11:52:21 +03:00
Abu-Vovan-Al-Yahudi
cc4dfce239
Update sites/epg.iptvx.one/epg.iptvx.one.channels.xml
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
2025-04-04 11:52:13 +03:00
freearhey
46c599dc85 Merge branch 'master' into patch-2025.04.1 2025-04-03 08:01:15 +03:00
PopeyeTheSai10r
4df25c92bc
Merge pull request #2743 from iptv-org/patch-2025.03.1
Patch 2025.03.1
2025-04-02 19:01:26 -07:00
iptv-bot[bot]
0728f6cca2 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1423263612) workflow.
2025-04-03 01:00:37 +00:00
Abu-Vovan-Al-Yahudi
01dff65bf9
oups 2025-04-02 19:13:28 +03:00
Abu-Vovan-Al-Yahudi
ccfe7dbc5b
Update epg.iptvx.one.channels.xml 2025-04-02 19:10:48 +03:00
CasperMcFadden95
f4b0156fad
Update epgshare01.online_DISTROTV1.channels.xml 2025-04-02 07:19:57 +00:00
PopeyeTheSai10r
5e0a1bd8b7
Merge pull request #2733 from iptv-org/freearhey-patch-5
Update epgshare01.online_DISTROTV1.channels.xml
2025-04-02 00:14:58 -07:00
freearhey
a4d1c48bbd Update sites 2025-04-02 07:26:22 +03:00
freearhey
3e36c64ef9 Update README.md 2025-04-02 07:26:05 +03:00
freearhey
36a900a90f Update CONTRIBUTING.md 2025-04-02 07:25:59 +03:00
freearhey
fbc0d92a1e Update issue templates 2025-04-02 07:14:15 +03:00
freearhey
5dd131e2d3 Update scripts 2025-04-02 07:13:39 +03:00
freearhey
37664b49b9 Update tests 2025-04-02 07:12:46 +03:00
freearhey
510d89c8c8 Update tests/__data__ 2025-04-02 07:08:57 +03:00
freearhey
0e4521a504 Update dependencies 2025-04-02 07:02:15 +03:00
iptv-bot[bot]
6755affc2f [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1420918332) workflow.
2025-04-02 01:00:59 +00:00
PopeyeTheSai10r
b8dd5e7c3a
Merge pull request #2744 from iptv-org/fraudiay79-patch-1
Update freeview.co.uk.channels.xml
2025-04-01 16:29:44 -07:00
fraudiay79
fd31b9f8e9
Update freeview.co.uk.channels.xml
add some local BBC radio stations from Wales, Scotland, and Northern Ireland
2025-04-01 12:37:21 -04:00
iptv-bot[bot]
96b3aa421c [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1418475840) workflow.
2025-04-01 01:07:48 +00:00
PopeyeTheSai10r
482974e7b9
Merge pull request #2742 from theshoeshiner/rdu-channels
Added Rdu channels
2025-03-31 12:53:38 -07:00
freearhey
6a4404b663 Update README.md 2025-03-31 09:38:32 +03:00
freearhey
c79491f48e Delete Dockerfile 2025-03-31 09:38:28 +03:00
freearhey
281a581ed8 Merge branch 'patch-2025.01.2' into patch-2025.04.1 2025-03-31 09:37:26 +03:00
freearhey
ad2dd69287 Update tvtv.us.config.js 2025-03-31 09:12:29 +03:00
freearhey
4bdcdf0962 Update tvtv.us.test.js 2025-03-31 09:10:44 +03:00
freearhey
c4cea0e73c Merge branch 'master' into update-tvtv.us-2 2025-03-31 08:56:29 +03:00
iptv-bot[bot]
de6d577a66 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1416189109) workflow.
2025-03-31 01:03:18 +00:00
PopeyeTheSai10r
1dd76b1f58
Merge pull request #2732 from iptv-org/freearhey-patch-3
Update dishtv.in.channels.xml
2025-03-30 13:44:06 -07:00
PopeyeTheSai10r
b14ff83f13
Merge pull request #2734 from iptv-org/freearhey-patch-6
Update tv24.co.uk
2025-03-30 13:42:02 -07:00
PopeyeTheSai10r
c3ed9f4502
Merge pull request #2735 from iptv-org/freearhey-patch-7
Update epgshare01.online.config.js
2025-03-30 13:41:10 -07:00
PopeyeTheSai10r
66304d7432
Merge pull request #2737 from Natanel-Shitrit/feat/site/free-tv
Add freetv.tv
2025-03-30 13:40:07 -07:00
theshoeshiner
92159813a6 fixed link 2025-03-30 08:08:40 -04:00
theshoeshiner
59703efaab Added Raleigh-Durham area channel ids 2025-03-30 08:07:11 -04:00
CasperMcFadden95
a98a457011
Merge pull request #2717 from Abu-Vovan-Al-Yahudi/master
Update tvpassport.com.channels.xml
2025-03-30 08:02:57 +00:00
CasperMcFadden95
bdaff97c36
Merge pull request #2739 from Newbiect/zap2it.com
Zap2it.com
2025-03-30 07:58:34 +00:00
Natanel Shitrit
c12254f80d
Update sites/freetv.tv/readme.md
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
2025-03-30 03:23:02 +03:00
Newbiect
9090f55229
Update zap2it.com.test.js 2025-03-29 13:55:48 -04:00
Newbiect
13b915796a
Update zap2it.com.config.js 2025-03-29 13:55:27 -04:00
Natanel-Shitrit
6e35d4364d Add freetv.tv 2025-03-29 14:39:04 +03:00
freearhey
c032886eb7 Update epgshare01.online.config.js 2025-03-29 09:04:50 +03:00
PopeyeTheSai10r
f52927c0ec
Merge pull request #2731 from iptv-org/tohenk/fix-mytelly.co.uk
Site mytelly.co.uk now requires user agent.
2025-03-28 22:56:58 -07:00
freearhey
f6814444e6 Update tv24.co.uk.channels.xml 2025-03-29 08:46:20 +03:00
freearhey
ff60520443 Update tv24.co.uk.config.js 2025-03-29 08:45:27 +03:00
freearhey
31089a8035 Update epgshare01.online_DISTROTV1.channels.xml 2025-03-29 08:13:53 +03:00
freearhey
dc27551a5f Update dishtv.in.channels.xml 2025-03-29 08:06:52 +03:00
Aleksandr Statciuk
f3c4918d44
Merge pull request #2730 from iptv-org/tohenk/fix-mncvision.id
Guard against empty program description on mncvision.id.
2025-03-29 07:50:29 +03:00
iptv-bot[bot]
f2e6041372 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1414052438) workflow.
2025-03-29 00:59:16 +00:00
Toha
3fd6e47d4f
Site mytelly.co.uk now requires user agent.
Signed-off-by: Toha <tohenk@yahoo.com>
2025-03-28 21:11:08 +07:00
Alstruit
642070d16d
Merge pull request #2726 from iptv-org/elcinema 2025-03-28 07:18:28 -05:00
Alstruit
95b39b8348
Merge pull request #2727 from iptv-org/CasperMcFadden95-patch-1 2025-03-28 07:16:58 -05:00
Toha
bd5cdcf892
Guard against empty program description on mncvision.id.
Signed-off-by: Toha <tohenk@yahoo.com>
2025-03-28 18:28:16 +07:00
CasperMcFadden95
3cada89a0e
Update freeview.co.uk.channels.xml 2025-03-27 10:22:49 +00:00
CasperMcFadden95
9accacd41c
Update elcinema.com_*.channels.xml 2025-03-25 12:15:31 +00:00
iptv-bot[bot]
30dc0517be [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1404920974) workflow.
2025-03-25 01:00:21 +00:00
Aleksandr Statciuk
138842009b
Merge pull request #2718 from iptv-org/CasperMcFadden95-patch-1
Update elcinema.com
2025-03-25 01:07:11 +03:00
Ismaël Moret
0b5dd5f78e
Merge pull request #2723 from iptv-org/CasperMcFadden95-patch-2
Update snrt.ma.channels.xml
2025-03-24 17:54:13 +01:00
Ismaël Moret
45a1478e2e
Merge pull request #2724 from iptv-org/CasperMcFadden95-patch-3
Update freeview.co.uk.channels.xml
2025-03-24 17:53:47 +01:00
Ismaël Moret
0b5ef21877
Merge pull request #2725 from iptv-org/CasperMcFadden95-shahid
Update shahid
2025-03-24 17:53:27 +01:00
CasperMcFadden95
348e8c1e9e
Update elcinema.com_ar.channels.xml 2025-03-24 16:13:13 +00:00
CasperMcFadden95
637f7a8d32
update elcinema xml 2025-03-24 16:03:46 +00:00
CasperMcFadden95
f40f058d9a
Fix elcinema.com channels:parse & update xml
Fix taken from https://github.com/iptv-org/epg/pull/2565
2025-03-24 15:50:34 +00:00
CasperMcFadden95
6066df8a91
Update freeview.co.uk.channels.xml 2025-03-24 11:22:57 +00:00
CasperMcFadden95
1e8d10eac8
Update shahid 2025-03-24 11:10:15 +00:00
CasperMcFadden95
23de62777f
Update elcinema.com_ar.channels.xml 2025-03-24 09:55:49 +00:00
CasperMcFadden95
240151015a
Update elcinema.com_en.channels.xml 2025-03-24 09:55:18 +00:00
CasperMcFadden95
9d94560c5f
Update freeview.co.uk.channels.xml 2025-03-24 09:53:53 +00:00
CasperMcFadden95
d8e4d13ebb
Update snrt.ma.channels.xml 2025-03-24 09:51:23 +00:00
CasperMcFadden95
c7b21d029f
Update snrt.ma.channels.xml 2025-03-24 09:50:45 +00:00
CasperMcFadden95
6ff3a943ec
Update sites/snrt.ma/snrt.ma.channels.xml 2025-03-24 09:50:10 +00:00
CasperMcFadden95
4102d60406
Update freeview.co.uk.channels.xml 2025-03-24 09:48:41 +00:00
CasperMcFadden95
71621070ed
Update snrt.ma.channels.xml 2025-03-24 09:46:45 +00:00
Ismaël Moret
cf82b4089e
Merge pull request #2719 from iptv-org/freearhey-patch-2
Update check.yml
2025-03-16 16:11:16 +01:00
freearhey
d410d0e126 Update check.yml 2025-03-16 05:59:59 +03:00
CasperMcFadden95
917c622724
Update elcinema.com_ar.channels.xml 2025-03-15 21:26:00 +00:00
CasperMcFadden95
46c1799ecd
Update elcinema.com_en.channels.xml 2025-03-15 21:23:56 +00:00
Abu-Vovan-Al-Yahudi
8e6dc5c923
Update tvpassport.com.channels.xml 2025-03-15 17:24:13 +02:00
iptv-bot[bot]
40c9af82d6 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1371138892) workflow.
2025-03-07 00:58:54 +00:00
PopeyeTheSai10r
0044f19615
Merge pull request #2703 from Aandree5/nostv-icon-image
feat: added icon tag to xml export for nostv
2025-03-05 18:25:50 -08:00
PopeyeTheSai10r
3e406a413c
Merge pull request #2707 from iptv-org/add-tvkaista.org
Add tvkaista.org
2025-03-05 18:25:18 -08:00
PopeyeTheSai10r
e2504ad546
Merge pull request #2711 from Aandree5/sky.com-add-image
feat: added image to sky.com
2025-03-05 18:24:45 -08:00
iptv-bot[bot]
f6265954ff [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1366610007) workflow.
2025-03-05 00:58:44 +00:00
freearhey
15c51c1d7d Update sky.com.config.js 2025-03-05 02:17:49 +03:00
freearhey
145ed8c831 Update sky.com.test.js 2025-03-05 02:17:22 +03:00
Aleksandr Statciuk
5095b20e55
Merge pull request #2672 from thomraider12/master
Add more xmltv_id's to "meo.pt" and "nostv.pt" channels.xml
2025-03-05 01:07:45 +03:00
Aandree5
f3df393df6 Added image to sky.com 2025-03-04 17:21:45 +00:00
freearhey
9fec63b3b1 Update nostv.pt.channels.xml 2025-03-04 19:04:15 +03:00
Tomás Afonso
53f2bad13e
Merge branch 'iptv-org:master' into master 2025-03-04 11:08:11 +00:00
Aandree5
363e0077a3 Fixed nostv test 2025-03-03 10:05:21 +00:00
Aandree5
1500ed5a21 Merge https://github.com/Aandree5/epg into nostv-icon-image 2025-03-03 09:57:46 +00:00
freearhey
b33260b20f Create readme.md 2025-03-01 22:01:20 +03:00
freearhey
0bb74b4c1b Create tvkaista.org.channels.xml 2025-03-01 22:01:08 +03:00
freearhey
5f48b22a28 Create tvkaista.org.config.js 2025-03-01 22:00:47 +03:00
freearhey
2235f0c2cd Create tvkaista.org.test.js 2025-03-01 21:59:14 +03:00
freearhey
f9534bd23a Create __data__ 2025-03-01 21:58:49 +03:00
iptv-bot[bot]
93da6d0878 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1355650428) workflow.
2025-02-27 00:57:30 +00:00
PopeyeTheSai10r
d7e4a3fd51
Merge pull request #2698 from iptv-org/add-dtv8.net
Add dtv8.net
2025-02-26 04:28:20 -08:00
Aandree5
c021aa3e01 feat: added icon tag to xml export for nostv, this will allow to work with tools like StreamMaster and Jellyfin
updated nostv image url
2025-02-23 22:36:44 +00:00
PopeyeTheSai10r
2721fe1ba0
Merge pull request #2700 from nirvana-7777/master
Update mojmaxtv.hrvatskitelekom.hr
2025-02-22 19:57:23 -08:00
nirvana-7777
09e96c5d10
Update mojmaxtv.hrvatskitelekom.hr.config.js 2025-02-21 13:44:17 +01:00
nirvana-7777
893f741473
Update mojmaxtv.hrvatskitelekom.hr.config.js 2025-02-21 13:40:24 +01:00
nirvana-7777
f2759f8b39
Update mojmaxtv.hrvatskitelekom.hr.config.js 2025-02-21 13:36:20 +01:00
nirvana-7777
667c3944c5
Update mojmaxtv.hrvatskitelekom.hr.test.js
Make test happy
2025-02-21 13:34:16 +01:00
nirvana-7777
fab5f9ad08
Update mojmaxtv.hrvatskitelekom.hr.config.js 2025-02-21 13:32:57 +01:00
freearhey
9345e39533 Create readme.md 2025-02-21 14:41:59 +03:00
freearhey
ba9fd0f099 Create dtv8.net.channels.xml 2025-02-21 14:41:50 +03:00
freearhey
3100db9226 Create dtv8.net.config.js 2025-02-21 14:41:42 +03:00
freearhey
d877f4405b Create dtv8.net.test.js 2025-02-21 14:41:30 +03:00
freearhey
d75ce33915 Create __data__ 2025-02-21 14:40:48 +03:00
nirvana-7777
cd7182ddb3
Update mojmaxtv.hrvatskitelekom.hr.config.js
Fix double quotes
2025-02-20 13:07:50 +01:00
nirvana-7777
eec8f4ea47
Update mojmaxtv.hrvatskitelekom.hr.config.js
- More details, e.g. images
- Add rating
- Fix categories
2025-02-20 12:42:19 +01:00
iptv-bot[bot]
39c4c5143e [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1338103696) workflow.
2025-02-18 00:55:37 +00:00
Ismaël Moret
e04953580b
Merge pull request #2690 from nirvana-7777/master
Fix mojmaxtv.hrvatskitelekom.hr
2025-02-17 14:22:18 +01:00
PopeyeTheSai10r
40977023d6
Merge pull request #2692 from iptv-org/update-zap2it.com
Update zap2it.com
2025-02-17 04:56:03 -08:00
PopeyeTheSai10r
f856934f90
Merge pull request #2691 from iptv-org/add-makrodigitaltelevision.com
Add makrodigitaltelevision.com
2025-02-16 17:27:53 -08:00
PopeyeTheSai10r
a5a305e654
Merge pull request #2686 from iptv-org/belleza-addition
[nostv.pt] Fix scraping
2025-02-16 10:44:29 -08:00
freearhey
0fe8456b16 Update zap2it.com.channels.xml 2025-02-16 17:21:04 +03:00
freearhey
655f2b1a71 Create readme.md 2025-02-16 17:19:20 +03:00
freearhey
210f51bfd6 Create makrodigitaltelevision.com.channels.xml 2025-02-16 17:19:09 +03:00
freearhey
3540d581fc Create makrodigitaltelevision.com.config.js 2025-02-16 17:19:02 +03:00
freearhey
6fd72128ef Create makrodigitaltelevision.com.test.js 2025-02-16 17:18:52 +03:00
freearhey
1c9a2cc088 Create content.xml 2025-02-16 17:18:42 +03:00
nirvana-7777
3339ea9711
Fix mojmaxtv.hrvatskitelekom.hr 2025-02-16 14:34:23 +01:00
Newbiect
e75dab9553
Update zap2it.com.config.js 2025-02-15 17:50:38 -05:00
Newbiect
bfb5d59bb8
Update zap2it.com.config.js 2025-02-15 16:17:08 -05:00
Ismaël Moret
f5623a4485
Merge pull request #2680 from iptv-org/patch-2025.02.1
Patch 2025.02.1
2025-02-15 00:43:01 +01:00
Ismaël Moret
e80ca4502a fix NosTV.pt channel 2025-02-14 18:14:04 +00:00
Ismaël Moret
0b9276ca8a
Merge pull request #2679 from Newbiect/zap2it.com
Zap2it.com
2025-02-14 16:25:52 +01:00
iptv-bot[bot]
6cbe64f2dd [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1325359815) workflow.
2025-02-11 00:55:34 +00:00
PopeyeTheSai10r
9aeb0b75e4
Merge pull request #2681 from iptv-org/update-meo.pt
Update meo.pt
2025-02-10 14:27:14 -08:00
PopeyeTheSai10r
5ed1375c25
Merge pull request #2682 from iptv-org/add-epgshare01.online
Add epgshare01.online
2025-02-10 14:24:55 -08:00
Newbiect
42631558fc
Update zap2it.com.config.js 2025-02-09 19:02:47 -05:00
Newbiect
d97cd5ea7f
Update zap2it.com.config.js 2025-02-09 12:33:35 -05:00
Newbiect
5601636ff2
Update zap2it.com.config.js 2025-02-09 12:30:56 -05:00
iptv-bot[bot]
0afb84d7d2 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1322085539) workflow.
2025-02-09 00:58:44 +00:00
Ismaël Moret
9f61346bdb
Update sites/nostv.pt/nostv.pt.channels.xml 2025-02-09 00:09:13 +01:00
Newbiect
06b01b3a2a
Update zap2it.com.channels.xml 2025-02-08 10:45:58 -05:00
Newbiect
38030a3745
Update zap2it.com.channels.xml 2025-02-08 10:26:21 -05:00
Newbiect
1cecb1ec04
Update zap2it.com.config.js 2025-02-08 10:21:28 -05:00
freearhey
654c89f20b Create readme.md 2025-02-08 10:24:30 +03:00
freearhey
9996055b15 Create *.channels.xml 2025-02-08 10:24:15 +03:00
freearhey
ddd7f1aa6e Create epgshare01.online.config.js 2025-02-08 10:22:34 +03:00
freearhey
041e227e56 Create epgshare01.online.test.js 2025-02-08 10:22:22 +03:00
freearhey
50d143bedd Create __data__/ 2025-02-08 10:22:06 +03:00
freearhey
063cf6bcd3 Update meo.pt.config.js 2025-02-08 07:24:39 +03:00
freearhey
b0feab33ec Update lint.mts 2025-02-08 07:05:35 +03:00
freearhey
378985f4cd Update tests 2025-02-08 07:05:10 +03:00
Newbiect
acc5f21587
Update zap2it.com.channels.xml 2025-02-07 22:41:30 -05:00
Newbiect
b901e76950
Update readme.md 2025-02-07 22:23:08 -05:00
Newbiect
361641c861
Create readme.md 2025-02-07 22:22:11 -05:00
Newbiect
e952ba2585
Add files via upload 2025-02-07 22:17:12 -05:00
Newbiect
e0d059de5c
Create zap2it.com.channels.xml 2025-02-07 22:09:23 -05:00
iptv-bot[bot]
65ea39cc9e [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1316954828) workflow.
2025-02-06 00:55:47 +00:00
PopeyeTheSai10r
7f6849869f
Merge pull request #2673 from iptv-org/update-pickx.be
Update pickx.be
2025-02-04 17:56:37 -08:00
freearhey
6ee49862f6 Update pickx.be.test.js 2025-02-04 04:48:04 +03:00
freearhey
fbaae670d9 Create version.json 2025-02-04 04:48:01 +03:00
freearhey
e8a0856be2 Create hash.html 2025-02-04 04:47:59 +03:00
freearhey
1a6f5954e2 Create pickx.be.channels.xml 2025-02-04 04:25:13 +03:00
iptv-bot[bot]
6b45cd9bd6 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1310424132) workflow.
2025-02-03 00:56:00 +00:00
freearhey
8664602da9 Update readme.md 2025-02-03 01:25:40 +03:00
PopeyeTheSai10r
b6657aae92
Merge pull request #2671 from iptv-org/delete-cablego.com.pe
Delete cablego.com.pe
2025-02-02 09:06:43 -08:00
PopeyeTheSai10r
4d964e03e4
Merge pull request #2670 from iptv-org/update-abc.net.au
Update abc.net.au
2025-02-02 09:01:04 -08:00
PopeyeTheSai10r
a39cb77cc0
Merge pull request #2669 from iptv-org/update-mtel.ba
Update mtel.ba
2025-02-02 08:59:56 -08:00
PopeyeTheSai10r
f1f387c872
Merge pull request #2666 from iptv-org/add-yes.co.il
Add yes.co.il
2025-02-02 08:58:50 -08:00
PopeyeTheSai10r
a2748d7383
Merge pull request #2665 from iptv-org/add-teleboy.ch
Add teleboy.ch
2025-02-02 08:56:46 -08:00
Tomás Afonso
b391288442
Update nostv.pt.channels.xml 2025-02-02 10:56:13 +00:00
Tomás Afonso
abe6322c10
Update meo.pt.channels.xml 2025-02-02 10:55:21 +00:00
Tomás Afonso
7705f1bc40
Update nostv.pt.channels.xml 2025-02-02 10:35:27 +00:00
Tomás Afonso
ce3d396dad
Update meo.pt.channels.xml 2025-02-02 10:16:07 +00:00
freearhey
150725bdc5 Delete pickx.be_nl.channels.xml 2025-02-02 10:21:44 +03:00
freearhey
32af543a87 Delete pickx.be_fr.channels.xml 2025-02-02 10:21:41 +03:00
freearhey
8064f6fe0a Delete pickx.be_en.channels.xml 2025-02-02 10:21:39 +03:00
freearhey
dc3b4606af Delete pickx.be_de.channels.xml 2025-02-02 10:21:36 +03:00
freearhey
352038fb56 Update pickx.be.config.js 2025-02-02 10:21:19 +03:00
freearhey
637edef019 Delete readme.md 2025-02-02 07:27:55 +03:00
freearhey
466d8b2147 Delete cablego.com.pe.channels.xml 2025-02-02 07:27:52 +03:00
freearhey
b2588e80df Delete cablego.com.pe.config.js 2025-02-02 07:27:48 +03:00
freearhey
3719cd725d Delete cablego.com.pe.test.js 2025-02-02 07:27:45 +03:00
freearhey
b042e14b9a Delete __data__ 2025-02-02 07:27:42 +03:00
freearhey
2c55431482 Update readme.md 2025-02-02 06:29:43 +03:00
freearhey
2b7be2e588 Create *.channels.xml for each region 2025-02-02 06:29:33 +03:00
freearhey
c697a9ff68 Delete abc.net.au.channels.xml 2025-02-02 06:29:10 +03:00
freearhey
f4fec9896e Update abc.net.au.config.js 2025-02-02 06:29:01 +03:00
freearhey
2932771e91 Update abc.net.au.test.js 2025-02-02 06:28:45 +03:00
freearhey
a7946884f5 Create __data__ 2025-02-02 06:28:41 +03:00
freearhey
b0eb51edd8 Update readme.md 2025-02-02 05:43:16 +03:00
freearhey
dd195256de Create mtel.ba_msat.channels.xml 2025-02-02 05:42:59 +03:00
freearhey
6ed275e228 Create mtel.ba_iptv.channels.xml 2025-02-02 05:42:50 +03:00
freearhey
5026600be6 Delete mtel.ba.channels.xml 2025-02-02 05:42:47 +03:00
freearhey
a9f0012c23 Update mtel.ba.config.js 2025-02-02 05:42:36 +03:00
freearhey
ac67940233 Update mtel.ba.test.js 2025-02-02 05:42:21 +03:00
freearhey
edf05c6f49 Create __data__ 2025-02-02 05:23:05 +03:00
iptv-bot[bot]
fb5119bacd [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1309408604) workflow.
2025-02-02 00:57:46 +00:00
freearhey
d6786495e2 Merge branch 'master' into patch-2025.01.2 2025-02-01 20:42:04 +03:00
freearhey
41dd41623d Merge branch 'master' into update-tvtv.us-2 2025-02-01 20:41:19 +03:00
freearhey
f8e7142f54 Merge branch 'master' into add-yes.co.il 2025-02-01 20:40:09 +03:00
freearhey
f982aae18f Merge branch 'master' into add-teleboy.ch 2025-02-01 20:38:51 +03:00
Alstruit
bcc7189d74
Merge pull request #2662 from iptv-org/fraudiay79-patch-1 2025-01-31 22:59:17 -06:00
Alstruit
f7e1c1558c
Merge pull request #2653 from iptv-org/patch-2025.01.7 2025-01-31 22:58:53 -06:00
iptv-bot[bot]
a58cea4aa7 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1308339127) workflow.
2025-02-01 00:58:09 +00:00
freearhey
bd96957975 Update yarn.lock 2025-02-01 03:30:03 +03:00
freearhey
411efb9a8d Update README.md 2025-02-01 03:29:07 +03:00
freearhey
7b008ccf71 Merge branch 'patch-2025.01.7' into patch-2025.01.2 2025-02-01 03:25:54 +03:00
fraudiay79
73cebeac29
Update sites/programtv.onet.pl/programtv.onet.pl.channels.xml
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
2025-01-31 17:13:55 -05:00
freearhey
abd6d0531d Update tvtv.us.config.js 2025-02-01 01:08:23 +03:00
freearhey
e275e04c67 Update tvtv.us.test.js 2025-02-01 01:08:16 +03:00
freearhey
34dcd59903 Merge branch 'patch-2025.01.7' into update-tvtv.us-2 2025-02-01 01:02:19 +03:00
freearhey
51827d1bff Update tvtv.us.config.js 2025-02-01 00:56:43 +03:00
freearhey
12e22efeff Merge branch 'patch-2025.01.7' into add-yes.co.il 2025-02-01 00:11:21 +03:00
freearhey
103a6e7227 Update deps 2025-02-01 00:03:19 +03:00
freearhey
b8285b1970 Update tvtv.us.test.js 2025-01-31 20:46:49 +03:00
freearhey
c7fa5cd062 Merge branch 'patch-2025.01.7' into update-tvtv.us-2 2025-01-31 20:21:42 +03:00
freearhey
51cb17c2c4 Merge branch 'patch-2025.01.7' into add-teleboy.ch 2025-01-31 20:21:00 +03:00
freearhey
0baabed2ed Merge branch 'patch-2025.01.7' into add-yes.co.il 2025-01-31 20:20:43 +03:00
freearhey
f55f2bc807 Update scripts_lint.sh 2025-01-31 20:20:13 +03:00
freearhey
96faa53325 Update channels_lint.sh 2025-01-31 20:20:11 +03:00
freearhey
765a638af1 Update pre-commit 2025-01-31 20:20:08 +03:00
freearhey
4cb6f66070 Create channels_validate.sh 2025-01-31 20:20:04 +03:00
freearhey
a592234794 Rename to .husky/scripts_lint.sh 2025-01-31 20:19:23 +03:00
freearhey
1affea63ca Rename to .husky/channels_lint.sh 2025-01-31 20:19:07 +03:00
freearhey
b7d58195f1 Update yes.co.il.channels.xml 2025-01-31 20:14:27 +03:00
freearhey
8427dd9087 Update teleboy.ch.channels.xml 2025-01-31 20:13:09 +03:00
freearhey
7f7e4c0825 Create yes.co.il.channels.xml 2025-01-31 20:09:38 +03:00
freearhey
ab7f1edbc6 Update yes.co.il.config.js 2025-01-31 20:09:18 +03:00
freearhey
a3a7dfb8e0 Merge branch 'patch-2025.01.7' into add-yes.co.il 2025-01-31 19:59:46 +03:00
freearhey
f01856c130 Merge branch 'patch-2025.01.7' into add-teleboy.ch 2025-01-31 19:51:05 +03:00
fraudiay79
2c6559b2c9
Update programtv.onet.pl.channels.xml 2025-01-30 11:09:46 -05:00
iptv-bot[bot]
e57dfaff41 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1304343136) workflow.
2025-01-30 00:53:48 +00:00
fraudiay79
3e4deda7bf
Merge pull request #2661 from thomraider12/patch-2
Update opto.sic.pt.channels.xml with xmltv id's from database
2025-01-29 14:12:09 -05:00
Tomás Afonso
09a0621b03
Update opto.sic.pt.channels.xml 2025-01-29 18:20:52 +00:00
PopeyeTheSai10r
106ae083d2
Merge pull request #2647 from iptv-org/update-dishtv.in
Update dishtv.in
2025-01-28 20:44:41 -08:00
PopeyeTheSai10r
380bf5f8d9
Merge pull request #2654 from iptv-org/add-tvi.iol.pt
Add tvi.iol.pt
2025-01-28 20:43:38 -08:00
iptv-bot[bot]
f4e18a3dc1 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1302245926) workflow.
2025-01-29 00:54:51 +00:00
freearhey
6d26b12b6c Merge branch 'master' into patch-2025.01.7 2025-01-29 01:32:15 +03:00
PopeyeTheSai10r
1f4535c77a
Merge pull request #2656 from iptv-org/update-programtv.onet.pl
Update programtv.one.pl
2025-01-28 07:37:25 -08:00
iptv-bot[bot]
765b43dcb2 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1300139070) workflow.
2025-01-28 00:54:48 +00:00
PopeyeTheSai10r
a45a346ec8
Merge pull request #2657 from fraudiay79/canalplus.com/pf
update canalplus.com to add French Polynesia
2025-01-26 19:11:35 -08:00
freearhey
33428dd37c Update tvtv.us.config.js 2025-01-27 05:41:09 +03:00
freearhey
cffd2a635f Update tvtv.us.test.js 2025-01-27 05:36:51 +03:00
freearhey
378d138694 Create program_1.json 2025-01-27 05:36:45 +03:00
freearhey
42ce11a6ba Update tvtv.us.config.js 2025-01-27 04:50:14 +03:00
freearhey
c0d4c631f8 Update tvtv.us.test.js 2025-01-27 04:50:07 +03:00
freearhey
cb10f7a162 Create content.json 2025-01-27 04:50:04 +03:00
fraudiay79
5cc9896314
Update canalplus.com.config.js 2025-01-25 21:11:14 -05:00
fraudiay79
a274b63c17
Create canalplus.com_pf.channels.xml 2025-01-25 21:10:31 -05:00
fraudiay79
a57ac947f3
Update readme.md 2025-01-25 21:09:50 -05:00
freearhey
f4c7371a34 Update programtv.onet.pl.channels.xml 2025-01-25 23:33:35 +03:00
freearhey
b9fe49f763 Update _test.js 2025-01-25 22:24:34 +03:00
freearhey
7682eb28f1 Update example.com.test.js 2025-01-25 22:24:26 +03:00
freearhey
dbda25d4a8 Update configLoader.ts 2025-01-25 22:21:08 +03:00
freearhey
71ab07fbea Update tests/__data__ 2025-01-25 22:21:03 +03:00
freearhey
833ae634c9 Merge branch 'master' into patch-2025.01.7 2025-01-25 22:12:12 +03:00
freearhey
0da74de608 Create readme.md 2025-01-25 22:11:39 +03:00
freearhey
7445722a22 Create yes.co.il.config.js 2025-01-25 22:11:32 +03:00
freearhey
40f0b0460e Create yes.co.il.test.js 2025-01-25 22:11:11 +03:00
freearhey
2202affe80 Create content.json 2025-01-25 22:11:05 +03:00
freearhey
4c58425893 Create readme.md 2025-01-25 21:39:20 +03:00
freearhey
c726d85fc9 Create teleboy.ch.channels.xml 2025-01-25 21:39:07 +03:00
iptv-bot[bot]
5e80d754ac [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1296015396) workflow.
2025-01-25 00:51:20 +00:00
freearhey
25cc9aa0b3 Create teleboy.ch.config.js 2025-01-25 03:05:34 +03:00
freearhey
e2ea1f294d Create teleboy.ch.test.js 2025-01-25 03:04:34 +03:00
freearhey
9c74146cb7 Create __data__ 2025-01-25 03:04:25 +03:00
freearhey
b4d776e152 Create readme.md 2025-01-24 23:38:57 +03:00
freearhey
e6c6394121 Create tvi.iol.pt.channels.xml 2025-01-24 23:38:47 +03:00
freearhey
50dddecfe8 Create tvi.iol.pt.config.js 2025-01-24 23:38:36 +03:00
freearhey
504398f079 Create tvi.iol.pt.test.js 2025-01-24 23:38:09 +03:00
freearhey
78577e8fc0 Create __data__ 2025-01-24 23:38:00 +03:00
freearhey
01b99fe98f Update SITES.md 2025-01-24 20:53:27 +03:00
freearhey
71aca65d86 Update update.ts 2025-01-24 20:53:17 +03:00
freearhey
eef2bf2815 Update htmlTable.ts 2025-01-24 20:53:09 +03:00
freearhey
e17ce1c403 Update _sites.md 2025-01-24 20:53:02 +03:00
freearhey
5652ed22c6 Update SITES.md 2025-01-24 20:52:53 +03:00
freearhey
7b9fcf3851 Update README.md 2025-01-24 20:03:41 +03:00
freearhey
8517679998 Update grab.ts 2025-01-24 20:03:00 +03:00
freearhey
d15b21bfd3 Update grabber.ts 2025-01-24 20:02:33 +03:00
freearhey
b8c50654f6 Update index.ts 2025-01-24 20:02:04 +03:00
freearhey
e02e46562a Create proxyParser.ts 2025-01-24 20:01:57 +03:00
freearhey
3f22ac12f5 Update grab.test.ts 2025-01-24 20:00:25 +03:00
freearhey
a7b80f88a4 Install socks-proxy-agent 2025-01-24 19:59:57 +03:00
freearhey
f624029d05 Update parse.ts 2025-01-24 19:20:01 +03:00
freearhey
4ff6a1ab34 Update dishtv.in.channels.xml 2025-01-24 07:22:02 +03:00
freearhey
d027e0072f Update dishtv.in.config.js 2025-01-24 07:21:37 +03:00
freearhey
db94809828 Update dishtv.in.test.js 2025-01-24 07:20:29 +03:00
freearhey
9ec69b31b1 Create __data__ 2025-01-24 07:20:20 +03:00
iptv-bot[bot]
966cd16725 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1294103413) workflow.
2025-01-24 00:55:02 +00:00
Ismaël Moret
c725adea6e
Merge pull request #2643 from iptv-org/patch-2025.01.5
Patch 2025.01.5
2025-01-23 12:52:37 +01:00
Alstruit
98bccc0faa
Merge branch 'master' into patch-2025.01.5 2025-01-22 19:06:48 -06:00
PopeyeTheSai10r
bc4b7fcfd5
Merge pull request #2646 from iptv-org/patch-2025.01.6
Patch 2025.01.6
2025-01-22 17:04:39 -08:00
freearhey
384f64e37b Update queueCreator.ts 2025-01-22 21:26:06 +03:00
freearhey
de2d160012 Update grab.test.ts 2025-01-22 21:25:38 +03:00
freearhey
7f39511ed0 Update tests/__data__ 2025-01-22 21:25:13 +03:00
iptv-bot[bot]
195c6c5ebb [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1289888837) workflow.
2025-01-22 00:55:58 +00:00
freearhey
bd3bfa460d Update SITES.md 2025-01-21 18:54:13 +03:00
freearhey
44bb8a5788 Update update.ts 2025-01-21 18:53:55 +03:00
freearhey
7e07f40809 Update site.ts 2025-01-21 18:51:12 +03:00
freearhey
81f2665235 Update constants.ts 2025-01-21 18:51:04 +03:00
freearhey
002a3ec5c6 Delete markdown-include package 2025-01-21 18:50:53 +03:00
freearhey
700de1b737 Create _sites.md 2025-01-21 18:50:04 +03:00
freearhey
bb31e873bf Remove .sites/ 2025-01-21 18:48:45 +03:00
freearhey
130b130946 Update tests/__data__ 2025-01-21 18:48:24 +03:00
PopeyeTheSai10r
b69d61af5e
Merge pull request #2640 from iptv-org/add-mojmaxtv.hrvatskitelekom.hr
Add mojmaxtv.hrvatskitelekom.hr
2025-01-20 20:14:34 -08:00
PopeyeTheSai10r
39bca4f7cc
Merge pull request #2641 from iptv-org/delete-maxtv.hrvatskitelekom.hr
Delete maxtv.hrvatskitelekom.hr
2025-01-20 20:14:15 -08:00
PopeyeTheSai10r
6b3dea313e
Merge pull request #2642 from iptv-org/update-mts.rs
Update mts.rs
2025-01-20 20:13:46 -08:00
freearhey
5082657ad3 Update mts.rs.channels.xml 2025-01-21 04:21:46 +03:00
freearhey
868a6f89a3 Update mts.rs.config.js 2025-01-21 04:21:36 +03:00
freearhey
6010fc4978 Update mts.rs.test.js 2025-01-21 04:21:30 +03:00
freearhey
6b0af46203 Create __data__ 2025-01-21 04:21:06 +03:00
iptv-bot[bot]
06e4382002 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1287803003) workflow.
2025-01-21 00:54:25 +00:00
PopeyeTheSai10r
a4bd81606b
Merge pull request #2638 from iptv-org/belleza-cpfix
canalplus.com - Fix PL programming
2025-01-20 16:28:31 -08:00
freearhey
e8cbb980ba Update canalplus.com.config.js 2025-01-21 03:07:27 +03:00
freearhey
4fc65bf540 Remove typescript from dependencies 2025-01-21 03:07:05 +03:00
freearhey
6f1305d029 Delete readme.md 2025-01-21 02:40:00 +03:00
freearhey
83ac2d9908 Delete maxtv.hrvatskitelekom.hr.test.js 2025-01-21 02:39:57 +03:00
freearhey
6f25c6ea3a Delete maxtv.hrvatskitelekom.hr.config.js 2025-01-21 02:39:55 +03:00
freearhey
68144804d9 Delete maxtv.hrvatskitelekom.hr.channels.xml 2025-01-21 02:39:52 +03:00
freearhey
2e8a3e4fc1 Create readme.md 2025-01-21 02:36:33 +03:00
freearhey
d35d897f77 Create mojmaxtv.hrvatskitelekom.hr.channels.xml 2025-01-21 02:36:27 +03:00
freearhey
e571bcb722 Create mojmaxtv.hrvatskitelekom.hr.config.js 2025-01-21 02:36:19 +03:00
freearhey
524846fefb Create mojmaxtv.hrvatskitelekom.hr.test.js 2025-01-21 02:36:13 +03:00
freearhey
f1eddf579e Create __data__ 2025-01-21 02:36:07 +03:00
PopeyeTheSai10r
9b0badadf6
Merge pull request #2634 from iptv-org/delete-tv.yettel.hu
Delete tv.yettel.hu
2025-01-20 14:36:54 -08:00
PopeyeTheSai10r
4dd4f0c488
Merge pull request #2639 from iptv-org/update-movistarplus.es
Update movistarplus.es
2025-01-20 14:36:34 -08:00
PopeyeTheSai10r
8a572ae021
Merge pull request #2636 from iptv-org/update-mi.tv
Update mi.tv
2025-01-20 14:06:38 -08:00
freearhey
a99179aec7 Update movistarplus.es.channels.xml 2025-01-21 00:22:24 +03:00
freearhey
de1dbc68d0 Update movistarplus.es.config.js 2025-01-21 00:22:12 +03:00
freearhey
6a5df080c4 Update movistarplus.es.test.js 2025-01-21 00:21:36 +03:00
freearhey
9b862fa27b Create content.html 2025-01-21 00:21:26 +03:00
PopeyeTheSai10r
06598014d8
Merge pull request #2630 from fraudiay79/telemach.me
Need help with Telemach.me
2025-01-20 11:18:10 -08:00
PopeyeTheSai10r
3fc55f3499
Merge pull request #2633 from iptv-org/update-m.tv.sms.cz
Update m.tv.sms.cz
2025-01-20 11:17:29 -08:00
PopeyeTheSai10r
71d0a6f312
Merge pull request #2632 from iptv-org/delete-tva.tv
Delete tva.tv
2025-01-20 10:32:47 -08:00
PopeyeTheSai10r
276210609a
Merge pull request #2618 from iptv-org/update-tvpassport.com
Update tvpassport.com
2025-01-20 10:31:16 -08:00
PopeyeTheSai10r
89471b618d
Merge pull request #2622 from iptv-org/update-meo.pt
Update meo.pt
2025-01-20 05:44:55 -08:00
Ismaël Moret
411269587f
Merge pull request #2625 from iptv-org/delete-canalplus-haiti.com
Delete canalplus-haiti.com
2025-01-20 14:44:31 +01:00
freearhey
ad45f29cb0 Merge branch 'master' into update-meo.pt 2025-01-20 16:06:13 +03:00
Ismaël Moret
5c1488d600 Merge remote-tracking branch 'origin/master' into belleza-cpfix 2025-01-20 10:42:23 +00:00
Ismaël Moret
e2a21cbc46 fix canal + and dependency error (yarn) 2025-01-20 10:39:49 +00:00
iptv-bot[bot]
7b2cfba7f5 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1285886445) workflow.
2025-01-20 00:55:49 +00:00
PopeyeTheSai10r
4223fa26d0
Merge pull request #2627 from iptv-org/delete-kplus.vn
Delete kplus.vn
2025-01-19 16:54:32 -08:00
PopeyeTheSai10r
7d9d9b7008
Merge pull request #2620 from iptv-org/update-tvprofil.com
Update tvprofil.com
2025-01-19 16:24:28 -08:00
PopeyeTheSai10r
69597e5a11
Merge pull request #2623 from iptv-org/delete-flixed.io
Delete flixed.io
2025-01-19 16:03:09 -08:00
freearhey
52d075d39c Update mi.tv_br.channels.xml 2025-01-20 02:47:59 +03:00
freearhey
73fb5049c9 Merge branch 'master' into delete-kplus.vn 2025-01-20 02:43:59 +03:00
freearhey
3f76f28da4 Merge branch 'master' into delete-canalplus-haiti.com 2025-01-20 02:43:09 +03:00
freearhey
51a5f39832 Merge branch 'master' into delete-flixed.io 2025-01-20 02:42:14 +03:00
freearhey
2ff7c63ff9 Merge branch 'master' into update-meo.pt 2025-01-20 02:40:19 +03:00
freearhey
e2ad8c75db Merge branch 'master' into update-tvprofil.com 2025-01-20 02:38:31 +03:00
freearhey
ec1ab09a3f Merge branch 'master' into update-tvpassport.com 2025-01-20 02:36:20 +03:00
freearhey
5a984241f0 Merge branch 'master' into patch-2025.01.2 2025-01-20 02:35:22 +03:00
PopeyeTheSai10r
37998865b3
Merge pull request #2631 from iptv-org/add-epg.telemach.ba
Add epg.telemach.ba
2025-01-19 15:30:23 -08:00
PopeyeTheSai10r
4cfed04fa3
Merge pull request #2619 from iptv-org/patch-2025.01.4
Patch 2025.01.4
2025-01-19 13:45:09 -08:00
freearhey
5c9cdfd38a Delete tv.yettel.hu.test.js 2025-01-19 20:06:39 +03:00
freearhey
7f932a8033 Delete tv.yettel.hu.config.js 2025-01-19 20:06:25 +03:00
freearhey
26ce4346f5 Delete tv.yettel.hu.channels.xml 2025-01-19 20:06:11 +03:00
freearhey
ca9c3dcb61 Delete readme.md 2025-01-19 20:05:55 +03:00
freearhey
e1bc533e8b Update readme.md 2025-01-19 19:37:52 +03:00
freearhey
4d0df65510 Update m.tv.sms.cz.channels.xml 2025-01-19 19:35:01 +03:00
freearhey
96704b45de Delete tva.tv.test.js 2025-01-19 17:18:18 +03:00
freearhey
62640b3371 Delete tva.tv.config.js 2025-01-19 17:18:04 +03:00
freearhey
791179daf6 Delete tva.tv.channels.xml 2025-01-19 17:17:51 +03:00
freearhey
cb863682b1 Delete readme.md 2025-01-19 17:17:38 +03:00
freearhey
4f8df0076b Create readme.md 2025-01-19 17:13:38 +03:00
freearhey
ed5191caf4 Create epg.telemach.ba.channels.xml 2025-01-19 17:13:23 +03:00
freearhey
fe3479eb3a Create epg.telemach.ba.config.js 2025-01-19 17:13:10 +03:00
freearhey
c25d2a7440 Create epg.telemach.ba.test.js 2025-01-19 17:12:55 +03:00
freearhey
a5436a5928 Create __data__ 2025-01-19 17:12:37 +03:00
Aleksandr Statciuk
a37d616457
Merge pull request #2621 from iptv-org/update-tvgids.nl
Update tvgids.nl
2025-01-19 16:59:06 +03:00
freearhey
b02ccd55f0 Delete telemach.me.config.js 2025-01-19 16:50:39 +03:00
freearhey
fc204e8edb Delete telemach.me.channels.xml 2025-01-19 16:50:25 +03:00
freearhey
cfa571f62d Create readme.md 2025-01-19 16:50:12 +03:00
freearhey
e8945874ae Create epg.telemach.me.channels.xml 2025-01-19 16:49:58 +03:00
freearhey
19c9c61fd4 Create epg.telemach.me.config.js 2025-01-19 16:49:44 +03:00
freearhey
b884b2942c Create epg.telemach.me.test.js 2025-01-19 16:49:27 +03:00
freearhey
cf2bd4ad0c Create __data__ 2025-01-19 16:49:05 +03:00
fraudiay79
c064d2ac69
Create telemach.me.channels.xml 2025-01-19 03:46:37 -05:00
fraudiay79
7766b497e8
Create telemach.me.config.js 2025-01-19 03:46:07 -05:00
iptv-bot[bot]
dbb744cc89 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1284892693) workflow.
2025-01-19 00:58:42 +00:00
freearhey
4d0c5c109a Update check.yml 2025-01-19 01:21:29 +03:00
freearhey
2674459b35 Update check.yml 2025-01-19 01:18:38 +03:00
freearhey
cc2161fb54 Merge branch 'master' into patch-2025.01.4 2025-01-19 01:17:28 +03:00
freearhey
e4f4199e8f Merge branch 'master' into patch-2025.01.2 2025-01-19 01:15:28 +03:00
PopeyeTheSai10r
4445d13452
Merge pull request #2628 from fraudiay79/patch-2
Update canalplus.com.config.js
2025-01-18 13:57:52 -08:00
freearhey
0e33226192 Update pm2.config.js 2025-01-19 00:56:44 +03:00
freearhey
74ce38b66c Update README.md 2025-01-19 00:44:06 +03:00
freearhey
03ee512427 Update pm2.config.js 2025-01-19 00:43:50 +03:00
freearhey
45a06e961c Update yarn.lock 2025-01-19 00:43:06 +03:00
freearhey
da2cf51202 Update package-lock.json 2025-01-19 00:42:28 +03:00
freearhey
92d4bc5b3e Update grab.ts 2025-01-19 00:41:56 +03:00
freearhey
20f5d00657 Update readme.md 2025-01-18 23:48:56 +03:00
freearhey
f9a474f7fb Create canalplus.com_ht.channels.xml 2025-01-18 23:48:38 +03:00
fraudiay79
692c8c1031
Update canalplus.com.config.js 2025-01-18 12:57:00 -05:00
freearhey
fe2fd07f96 Update tvpassport.com.channels.xml 2025-01-18 16:30:39 +03:00
freearhey
d33410261a Merge branch 'master' into update-tvpassport.com 2025-01-18 15:46:59 +03:00
freearhey
8f00e104b7 Merge branch 'master' into update-tvprofil.com 2025-01-18 15:43:54 +03:00
freearhey
5740d94962 Merge branch 'master' into update-tvgids.nl 2025-01-18 15:43:44 +03:00
freearhey
a0a48e24ec Merge branch 'master' into patch-2025.01.2 2025-01-18 15:26:02 +03:00
freearhey
4eb4096692 Fix linter issues 2025-01-18 15:16:18 +03:00
freearhey
426525e3b2 Update lint.mts 2025-01-18 15:16:04 +03:00
freearhey
3fbbc0e6db Remove wrong xmltv-ids 2025-01-18 14:43:19 +03:00
freearhey
57dce730dd Merge branch 'master' into patch-2025.01.4 2025-01-18 14:37:21 +03:00
Aleksandr Statciuk
dfd87070a5
Merge branch 'master' into update-meo.pt 2025-01-18 14:27:14 +03:00
freearhey
6930ddd934 Merge branch 'master' into delete-canalplus-haiti.com 2025-01-18 14:25:51 +03:00
freearhey
d04cc1e26a Merge branch 'master' into delete-kplus.vn 2025-01-18 14:19:05 +03:00
freearhey
d819507765 Merge branch 'master' into delete-flixed.io 2025-01-18 14:16:01 +03:00
PopeyeTheSai10r
3d4ced9e88
Merge pull request #2617 from iptv-org/update-tvtv.us
Update tvtv.us
2025-01-17 20:58:30 -08:00
PopeyeTheSai10r
a52c9b3c3a
Merge pull request #2616 from iptv-org/antennapacific.gr
Add antennapacific.gr
2025-01-17 20:43:50 -08:00
PopeyeTheSai10r
a3ab9d6a81
Merge pull request #2615 from iptv-org/add-antennasatellite.gr
Add antennasatellite.gr
2025-01-17 20:43:32 -08:00
PopeyeTheSai10r
edfedd72a5
Merge pull request #2614 from iptv-org/add-antennaeurope.gr
Add antennaeurope.gr
2025-01-17 20:43:21 -08:00
PopeyeTheSai10r
7cd9ce61b4
Merge pull request #2612 from iptv-org/add-thesportplus.com
Add thesportplus.com
2025-01-17 20:43:01 -08:00
PopeyeTheSai10r
72c360bc5c
Merge pull request #2611 from iptv-org/add-vivoplay.com.br
Add vivoplay.com.br
2025-01-17 20:42:42 -08:00
PopeyeTheSai10r
cfa3c11f98
Merge pull request #2610 from iptv-org/add-guiadetv.com
Add guiadetv.com
2025-01-17 20:42:30 -08:00
PopeyeTheSai10r
ffb88e9b8e
Merge pull request #2609 from iptv-org/add-tvinsider.com
Add tvinsider.com
2025-01-17 20:42:16 -08:00
PopeyeTheSai10r
7ca923b753
Merge pull request #2607 from iptv-org/add-opto.sic.pt
Add opto.sic.pt
2025-01-17 20:41:59 -08:00
PopeyeTheSai10r
d9b3fe8d07
Merge pull request #2606 from iptv-org/add-digea.gr
Add digea.gr
2025-01-17 20:41:44 -08:00
PopeyeTheSai10r
9a4fe43729
Merge pull request #2605 from iptv-org/add-jiotv.com
Add jiotv.com
2025-01-17 20:41:27 -08:00
PopeyeTheSai10r
2e28ca2539
Merge pull request #2626 from iptv-org/add-xem.kplus.vn
Add xem.kplus.vn
2025-01-17 20:39:24 -08:00
PopeyeTheSai10r
e19b4c6318
Merge pull request #2604 from iptv-org/patch-2025.01.3
Patch 2025.01.3
2025-01-17 20:38:05 -08:00
iptv-bot[bot]
a49655aa53 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1283925022) workflow.
2025-01-18 00:52:54 +00:00
PopeyeTheSai10r
eb1d70c82b
Merge pull request #2624 from fraudiay79/patch-2
Delete sites/vivacom.bg directory
2025-01-17 14:14:23 -08:00
freearhey
2f2485d9c0 Delete readme.md 2025-01-18 01:08:12 +03:00
freearhey
65147a45e9 Delete kplus.vn.test.js 2025-01-18 01:07:57 +03:00
freearhey
4b744355f9 Delete kplus.vn.config.js 2025-01-18 01:07:45 +03:00
freearhey
96b6a21150 Delete kplus.vn.channels.xml 2025-01-18 01:07:32 +03:00
freearhey
b8c515bfcb Fix linter issues 2025-01-18 01:07:00 +03:00
freearhey
f04a9bce17 Create readme.md 2025-01-18 01:03:24 +03:00
freearhey
c338fdb0f4 Create xem.kplus.vn.channels.xml 2025-01-18 01:03:10 +03:00
freearhey
f518547f8d Create xem.kplus.vn.config.js 2025-01-18 01:02:48 +03:00
freearhey
e84967722a Create xem.kplus.vn.test.js 2025-01-18 01:02:35 +03:00
freearhey
50bcaaa847 Create session.json 2025-01-18 01:02:14 +03:00
freearhey
655c930fec Create no_content.json 2025-01-18 01:02:01 +03:00
freearhey
50c418e8ad Create content.json 2025-01-18 01:01:47 +03:00
freearhey
4e7d45f692 Fix linter issues 2025-01-18 01:01:33 +03:00
freearhey
630f031239 Delete readme.md 2025-01-17 23:01:55 +03:00
freearhey
f5a5beacc6 Delete canalplus-haiti.com.test.js 2025-01-17 23:01:20 +03:00
freearhey
3a2757b79c Delete canalplus-haiti.com.config.js 2025-01-17 23:00:16 +03:00
freearhey
9836992122 Delete canalplus-haiti.com.channels.xml 2025-01-17 22:57:28 +03:00
freearhey
706cf7ec72 Fix linter issues 2025-01-17 22:57:00 +03:00
fraudiay79
1c21203769
Delete sites/vivacom.bg directory 2025-01-17 14:39:24 -05:00
freearhey
7b02fffc21 Delete readme.md 2025-01-17 21:01:34 +03:00
freearhey
f989ec2e57 Delete flixed.io.test.js 2025-01-17 21:01:05 +03:00
freearhey
196434f5f6 Delete flixed.io.config.js 2025-01-17 21:00:51 +03:00
freearhey
1d1adcf1d2 Delete flixed.io.channels.xml 2025-01-17 21:00:37 +03:00
freearhey
0a69951b59 Delete content.json 2025-01-17 21:00:23 +03:00
freearhey
01acf6d6d4 Fix linter issues 2025-01-17 20:59:57 +03:00
freearhey
a55681e99b Update meo.pt.channels.xml 2025-01-17 20:49:23 +03:00
freearhey
7d0511207b Fix linter issues 2025-01-17 20:49:08 +03:00
freearhey
a2d0cb3a8d Update tvgids.nl.channels.xml 2025-01-17 20:30:31 +03:00
freearhey
35f55e4df5 Update tvgids.nl.test.js 2025-01-17 20:30:17 +03:00
freearhey
65f7b58065 Fix linter issues 2025-01-17 20:30:00 +03:00
freearhey
e27ac9ee19 Update tvprofil.com.test.js 2025-01-17 20:20:00 +03:00
freearhey
b6b2521498 Fix linter issues 2025-01-17 20:16:25 +03:00
freearhey
0d45f08352 Update pre-commit 2025-01-17 18:29:06 +03:00
freearhey
80828e5446 Create check_channels.sh 2025-01-17 18:29:03 +03:00
freearhey
d81b994161 Create check_scripts.sh 2025-01-17 18:28:59 +03:00
freearhey
7f31017756 Update tvpassport.com.channels.xml 2025-01-17 17:03:22 +03:00
freearhey
ee8960d2c4 Update tvpassport.com.config.js 2025-01-17 17:03:07 +03:00
freearhey
eb20530812 Update tvpassport.com.channels.xml 2025-01-17 16:50:22 +03:00
freearhey
c8085e6b3f Update tvpassport.com.config.js 2025-01-17 16:50:07 +03:00
freearhey
7445c4c27a Update tvpassport.com.config.js 2025-01-17 16:21:47 +03:00
freearhey
bbd20848b2 Update tvpassport.com.test.js 2025-01-17 16:21:33 +03:00
freearhey
8082cf9544 Update content.html 2025-01-17 16:21:17 +03:00
freearhey
5b9f7ffa6a Fix linter issues 2025-01-17 16:21:03 +03:00
freearhey
b05f48a5a0 Update readme.md 2025-01-17 15:35:57 +03:00
freearhey
50ddd0c20c Update readme.md 2025-01-17 15:24:11 +03:00
freearhey
4b129ef72b Update tvtv.us.config.js 2025-01-17 15:23:45 +03:00
freearhey
d2d174cac2 Fix linter issues 2025-01-17 15:23:30 +03:00
iptv-bot[bot]
5958c77c65 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1282044740) workflow.
2025-01-17 00:54:11 +00:00
freearhey
72c33722a5 Create readme.md 2025-01-17 02:03:49 +03:00
freearhey
12bd54bf0b Create antennapacific.gr.channels.xml 2025-01-17 02:03:36 +03:00
freearhey
8619ff9445 Create antennapacific.gr.config.js 2025-01-17 02:03:22 +03:00
freearhey
ecda45d9f8 Create antennapacific.gr.test.js 2025-01-17 02:03:07 +03:00
freearhey
add8250c24 Create no_content.html 2025-01-17 02:02:52 +03:00
freearhey
4c06176e8e Create content.html 2025-01-17 02:02:37 +03:00
freearhey
3aaea0abde Fix linter issues 2025-01-17 02:02:18 +03:00
freearhey
422b9ad6a9 Create readme.md 2025-01-17 01:53:06 +03:00
freearhey
0e4e7d8281 Create antennasatellite.gr.channels.xml 2025-01-17 01:52:45 +03:00
freearhey
e07202015b Create antennasatellite.gr.config.js 2025-01-17 01:52:32 +03:00
freearhey
9fc2f93793 Create antennasatellite.gr.test.js 2025-01-17 01:52:19 +03:00
freearhey
1a4b3c9939 Create no_content.html 2025-01-17 01:52:06 +03:00
freearhey
e44b1c0c45 Create content.html 2025-01-17 01:51:53 +03:00
freearhey
8362e6035e Fix linter issues 2025-01-17 01:51:39 +03:00
freearhey
9f4a3c80d2 Create readme.md 2025-01-17 01:40:27 +03:00
freearhey
52965a6090 Create antennaeurope.gr.channels.xml 2025-01-17 01:40:13 +03:00
freearhey
b8ba5dfe0d Create antennaeurope.gr.config.js 2025-01-17 01:39:55 +03:00
freearhey
103b201554 Create antennaeurope.gr.test.js 2025-01-17 01:39:41 +03:00
freearhey
cffbd24b0a Create no_content.html 2025-01-17 01:39:28 +03:00
freearhey
1dd640ccf6 Create content.html 2025-01-17 01:39:14 +03:00
freearhey
b98a31c99e Fix linter issues 2025-01-17 01:38:56 +03:00
PopeyeTheSai10r
0d7cc47042
Merge pull request #2608 from iptv-org/add-tv.sfr.fr
Add tv.sfr.fr
2025-01-16 12:58:06 -08:00
freearhey
d1f96419ea Create readme.md 2025-01-16 23:43:05 +03:00
freearhey
2434bd2dc9 Create thesportplus.com.channels.xml 2025-01-16 23:42:28 +03:00
freearhey
506c7fd18e Create thesportplus.com.config.js 2025-01-16 23:42:10 +03:00
freearhey
b85abb2885 Create thesportplus.com.test.js 2025-01-16 23:41:57 +03:00
freearhey
2915e93408 Create no_content.html 2025-01-16 23:41:14 +03:00
freearhey
2c5d68812e Create content.html 2025-01-16 23:40:59 +03:00
freearhey
29ab6b0d64 Fix linter issues 2025-01-16 23:40:45 +03:00
freearhey
50b14fedb6 Create readme.md 2025-01-16 23:03:44 +03:00
freearhey
8efe4177cf Create vivoplay.com.br.channels.xml 2025-01-16 23:03:30 +03:00
freearhey
0e45c85070 Create vivoplay.com.br.config.js 2025-01-16 23:03:15 +03:00
freearhey
56ce54c406 Create vivoplay.com.br.test.js 2025-01-16 23:03:00 +03:00
freearhey
3d8124b983 Create no_content.json 2025-01-16 23:02:44 +03:00
freearhey
7891d9fa3b Create content.json 2025-01-16 23:02:29 +03:00
freearhey
7dc51b5147 Fixes linter issues 2025-01-16 22:41:20 +03:00
freearhey
1ae99d5470 Update apiClient.ts 2025-01-16 22:36:51 +03:00
freearhey
3789b88d0e Update edit.test.ts 2025-01-16 22:33:34 +03:00
freearhey
bc311ae5b9 Update edit.test.ts 2025-01-16 21:33:32 +03:00
freearhey
e842ada752 Install readline 2025-01-16 21:32:50 +03:00
PopeyeTheSai10r
f16550ff57
Merge pull request #2592 from fraudiay79/galamtv.kz
Add Galamtv.kz
2025-01-16 09:37:18 -08:00
freearhey
8202218682 Update @freearhey/core 2025-01-16 20:08:41 +03:00
freearhey
860186316d Update yarn.lock 2025-01-16 16:15:30 +03:00
freearhey
d5b53157ed Update package-lock.json 2025-01-16 16:15:10 +03:00
freearhey
63d5f4877f Fix linter issues 2025-01-16 16:12:06 +03:00
freearhey
a66a06b4ea Merge branch 'master' into patch-2025.01.3 2025-01-16 16:11:41 +03:00
freearhey
2d9b29b94c Update edit.test.ts 2025-01-16 15:53:28 +03:00
Aleksandr Statciuk
2cf1dc6219
Merge pull request #2597 from fraudiay79/rikstv.no
Add rikstv.no
2025-01-16 13:36:14 +03:00
freearhey
8d1348cc46 Fix linter issues 2025-01-16 13:33:18 +03:00
freearhey
10475ab929 Merge branch 'galamtv.kz' of https://github.com/fraudiay79/epg into pr/2590 2025-01-16 13:30:13 +03:00
PopeyeTheSai10r
d1e5ca200c
Merge pull request #2587 from iptv-org/add-epg.iptvx.one
Add epg.iptvx.one
2025-01-15 17:33:42 -08:00
iptv-bot[bot]
8ac56b050d [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1279984847) workflow.
2025-01-16 00:54:30 +00:00
PopeyeTheSai10r
679c042197
Update rikstv.no.config.js 2025-01-15 15:42:43 -08:00
PopeyeTheSai10r
92d0afcb79
Update galamtv.kz.config.js 2025-01-15 15:41:19 -08:00
freearhey
415aa3d476 Create readme.md 2025-01-16 02:40:10 +03:00
freearhey
885a5593d3 Create guiadetv.com.channels.xml 2025-01-16 02:39:56 +03:00
freearhey
c56b0a1ed8 Create guiadetv.com.config.js 2025-01-16 02:39:39 +03:00
freearhey
2c51e8fadb Create guiadetv.com.test.js 2025-01-16 02:38:47 +03:00
freearhey
601f51570b Create no_content.html 2025-01-16 02:38:25 +03:00
freearhey
78d31e2352 Create content.html 2025-01-16 02:38:09 +03:00
freearhey
dbdba905cc Create readme.md 2025-01-15 23:46:20 +03:00
freearhey
55942f1cd4 Create tvinsider.com.channels.xml 2025-01-15 23:45:53 +03:00
freearhey
f7346b6bc5 Create tvinsider.com.config.js 2025-01-15 23:45:37 +03:00
freearhey
409fa926e8 Create tvinsider.com.test.js 2025-01-15 23:45:08 +03:00
freearhey
febfced926 Create no_content.html 2025-01-15 23:44:50 +03:00
freearhey
43dadde4d6 Create content.html 2025-01-15 23:44:34 +03:00
freearhey
c9ea7ceab1 Create readme.md 2025-01-15 21:43:59 +03:00
freearhey
69a06785b7 Create tv.sfr.fr.channels.xml 2025-01-15 21:43:43 +03:00
freearhey
ef1714fca8 Create tv.sfr.fr.config.js 2025-01-15 21:43:22 +03:00
freearhey
df7e1f82f8 Create tv.sfr.fr.test.js 2025-01-15 21:38:25 +03:00
freearhey
6013889b27 Create content.json 2025-01-15 21:38:06 +03:00
freearhey
6cc31e82e9 Create readme.md 2025-01-15 20:00:57 +03:00
freearhey
edfbff31d2 Create opto.sic.pt.channels.xml 2025-01-15 20:00:42 +03:00
freearhey
f2311ca484 Create opto.sic.pt.config.js 2025-01-15 19:58:40 +03:00
freearhey
cb1921d008 Create opto.sic.pt.test.js 2025-01-15 19:58:23 +03:00
freearhey
54ec0074a4 Create content.json 2025-01-15 19:57:39 +03:00
freearhey
318ab3cc38 Create readme.md 2025-01-15 19:24:04 +03:00
freearhey
133792f498 Create digea.gr.channels.xml 2025-01-15 19:23:46 +03:00
freearhey
69159b2cf1 Create digea.gr.config.js 2025-01-15 19:23:30 +03:00
freearhey
8e19193621 Create digea.gr.test.js 2025-01-15 19:23:05 +03:00
freearhey
0db9e84b8e Create content.json 2025-01-15 19:22:45 +03:00
freearhey
f987c2e4a7 Create readme.md 2025-01-15 17:22:29 +03:00
freearhey
9f573e48d8 Create jiotv.com.channels.xml 2025-01-15 17:22:12 +03:00
freearhey
7ab9abdc86 Create jiotv.com.config.js 2025-01-15 17:21:50 +03:00
freearhey
a1f6152608 Create jiotv.com.test.js 2025-01-15 17:21:28 +03:00
freearhey
052e8ec3f0 Create content.json 2025-01-15 17:21:10 +03:00
freearhey
36cd2a5868 Update package-lock.json 2025-01-15 14:57:01 +03:00
freearhey
201baf16c6 Update package.json 2025-01-15 14:56:46 +03:00
freearhey
6185d6d484 Update freeview.co.uk.channels.xml 2025-01-15 14:51:24 +03:00
freearhey
db98255128 Update check.yml 2025-01-15 14:48:54 +03:00
freearhey
e2d86b59d8 Merge branch 'master' into patch-2025.01.3 2025-01-15 14:23:15 +03:00
freearhey
84e46fdb0d Update readme.md 2025-01-15 14:17:34 +03:00
freearhey
f863e3eb9a Replace libxmljs2 with libxml2-wasm 2025-01-15 14:14:21 +03:00
freearhey
f407a12832 Create ----channel-request.yml 2025-01-15 13:40:49 +03:00
freearhey
40a96b927e Rename ----source-request.yml 2025-01-15 13:40:17 +03:00
PopeyeTheSai10r
65331dff1c
Merge pull request #2596 from iptv-org/delete-hd-plus.de
Delete hd-plus.de
2025-01-14 19:40:51 -08:00
PopeyeTheSai10r
e3573b6316
Merge pull request #2595 from iptv-org/delete-rev.bs
Delete rev.bs
2025-01-14 19:40:21 -08:00
PopeyeTheSai10r
ebe672631c
Merge pull request #2594 from iptv-org/delete-comteco.com.bo
Delete comteco.com.bo
2025-01-14 19:39:40 -08:00
PopeyeTheSai10r
f76c933d58
Merge pull request #2591 from iptv-org/add-dna.fi
Add dna.fi
2025-01-14 19:33:00 -08:00
PopeyeTheSai10r
0b5c90c856
Merge pull request #2598 from iptv-org/add-tvmustra.hu
Add tvmustra.hu
2025-01-14 19:31:22 -08:00
PopeyeTheSai10r
32ceca725d
Merge pull request #2599 from iptv-org/add-telebilbao.es
Add telebilbao.es
2025-01-14 19:29:45 -08:00
PopeyeTheSai10r
7b0b9df858
Merge pull request #2589 from iptv-org/add-tv-spored.siol.net
Add tv-spored.siol.net
2025-01-14 17:05:59 -08:00
iptv-bot[bot]
4b21347c6f [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1277927027) workflow.
2025-01-15 00:55:08 +00:00
freearhey
338504bd67 Create readme.md 2025-01-14 23:20:45 +03:00
freearhey
4cd79c2d57 Create telebilbao.es.channels.xml 2025-01-14 23:20:31 +03:00
freearhey
91a6d207b2 Create telebilbao.es.config.js 2025-01-14 23:19:56 +03:00
freearhey
1b5ed2b357 Create telebilbao.es.test.js 2025-01-14 23:19:40 +03:00
freearhey
a7670f0cc8 Create no_content.html 2025-01-14 23:19:23 +03:00
freearhey
9b887be0eb Create content.html 2025-01-14 23:18:40 +03:00
freearhey
fa7f1eb2ec Create readme.md 2025-01-14 22:08:36 +03:00
freearhey
9599038a10 Create tvmustra.hu.channels.xml 2025-01-14 22:08:17 +03:00
freearhey
ceb4932e6e Create tvmustra.hu.config.js 2025-01-14 22:08:00 +03:00
freearhey
c8bc5109fc Create content.html 2025-01-14 22:07:39 +03:00
freearhey
a650a4a23c Create tvmustra.hu.test.js 2025-01-14 22:07:20 +03:00
fraudiay79
f8d0f435ac
Create readme.md 2025-01-14 12:14:44 -05:00
fraudiay79
8803045cd8
Create rikstv.no.channels.xml 2025-01-14 12:13:18 -05:00
fraudiay79
46f8f41d84
Create rikstv.no.test.js 2025-01-14 12:12:39 -05:00
fraudiay79
48bae7af1f
Create rikstv.no.config.js 2025-01-14 12:12:01 -05:00
freearhey
773eb2a335 Delete readme.md 2025-01-14 19:34:30 +03:00
freearhey
a6b8c49b91 Delete hd-plus.de.channels.xml 2025-01-14 19:34:16 +03:00
freearhey
a7a7dcd018 Delete hd-plus.de.config.js 2025-01-14 19:34:03 +03:00
freearhey
82559cedf2 Delete hd-plus.de.test.js 2025-01-14 19:33:50 +03:00
freearhey
6111cb8f04 Delete readme.md 2025-01-14 19:29:59 +03:00
freearhey
9087b4d104 Delete rev.bs.channels.xml 2025-01-14 19:29:43 +03:00
freearhey
f83e7d33d7 Delete rev.bs.config.js 2025-01-14 19:28:48 +03:00
freearhey
f48a302fa8 Delete rev.bs.test.js 2025-01-14 19:28:34 +03:00
freearhey
d7d5b110d3 Update readme.md 2025-01-14 19:21:22 +03:00
freearhey
4dcf79b8b9 Update epg.iptvx.one.channels.xml 2025-01-14 19:21:06 +03:00
freearhey
1b3a4d3bd4 Update epg.iptvx.one.config.js 2025-01-14 19:20:48 +03:00
freearhey
cd23e28e7e Delete readme.md 2025-01-14 19:13:55 +03:00
freearhey
5521c4e2e1 Delete comteco.com.bo.test.js 2025-01-14 19:13:42 +03:00
freearhey
8989cb8d38 Delete comteco.com.bo.config.js 2025-01-14 19:13:29 +03:00
freearhey
ba877ece1e Delete comteco.com.bo.channels.xml 2025-01-14 19:13:13 +03:00
fraudiay79
8c73df923b
Create readme.md 2025-01-14 09:59:19 -05:00
fraudiay79
0ef69335a2
Create galamtv.kz.test.js 2025-01-14 09:57:01 -05:00
fraudiay79
156adee979
Create galamtv.kz.channels.xml 2025-01-14 09:55:54 -05:00
fraudiay79
6138c472ac
Create galamtv.kz.config.js 2025-01-14 09:55:28 -05:00
freearhey
b0711e5233 Update CONTRIBUTING.md 2025-01-14 17:33:24 +03:00
freearhey
368500ab51 Create readme.md 2025-01-14 16:44:26 +03:00
freearhey
2d37b52229 Create dna.fi.channels.xml 2025-01-14 16:44:11 +03:00
freearhey
89ad9efd77 Create dna.fi.config.js 2025-01-14 16:43:54 +03:00
freearhey
5fae8484ce Create dna.fi.test.js 2025-01-14 16:43:37 +03:00
freearhey
9d185dcf38 Create content.json 2025-01-14 16:43:18 +03:00
fraudiay79
11f3ccd5a5
Create galamtv.kz.channels.xml 2025-01-14 07:34:18 -05:00
fraudiay79
991d399fc3
Create galamtv.kz.config.js 2025-01-14 07:33:53 -05:00
freearhey
0563d75e5d Update readme.md 2025-01-14 14:50:47 +03:00
PopeyeTheSai10r
76df1541d8
Merge pull request #2585 from iptv-org/tohenk/fix-tvguide.com
Update tvguide.com guide.
2025-01-13 18:24:35 -08:00
PopeyeTheSai10r
ba08df2daa
Merge pull request #2586 from iptv-org/tohenk/fix-dsmart.com.tr
Update dsmart.com.tr guide.
2025-01-13 18:10:56 -08:00
freearhey
0f8e2ee41f Create readme.md 2025-01-14 00:11:14 +03:00
freearhey
1d289d2542 Create tv-spored.siol.net.channels.xml 2025-01-14 00:10:58 +03:00
freearhey
ea59a806f5 Create tv-spored.siol.net.config.js 2025-01-14 00:10:34 +03:00
freearhey
8656e3fe6a Create tv-spored.siol.net.test.js 2025-01-14 00:10:18 +03:00
freearhey
3e651ae356 Create content.html 2025-01-14 00:10:02 +03:00
freearhey
c79f360184 Create readme.md 2025-01-13 19:53:30 +03:00
freearhey
f0afea8c5e Create epg.iptvx.one.channels.xml 2025-01-13 19:52:55 +03:00
freearhey
527e17003c Create epg.iptvx.one.config.js 2025-01-13 19:52:30 +03:00
freearhey
60a1959ac4 Install pako package 2025-01-13 19:51:33 +03:00
freearhey
6c79a2739d Create epg.iptvx.one.test.js 2025-01-13 19:50:55 +03:00
freearhey
1e285fadb4 Create content.xml.gz 2025-01-13 19:50:33 +03:00
freearhey
f7d038a5ba Merge branch 'master' into patch-2025.01.3 2025-01-13 18:10:39 +03:00
freearhey
a9a359d69b Update check.yml 2025-01-13 18:09:13 +03:00
freearhey
5167a43fb7 Update validate.ts 2025-01-13 17:56:54 +03:00
freearhey
b8e6d12d6a Update validate.test.ts 2025-01-13 17:56:38 +03:00
freearhey
fba07b17e7 Update lint.ts 2025-01-13 17:55:14 +03:00
freearhey
f7c09afb84 Remove wrong xmltv_ids 2025-01-13 17:50:28 +03:00
freearhey
f5f37a7441 Update validate.ts 2025-01-13 16:32:32 +03:00
freearhey
55a6a2fecc Update duplicate.channels.xml 2025-01-13 16:31:51 +03:00
freearhey
eca069cd04 Update CONTRIBUTING.md 2025-01-13 14:20:37 +03:00
Toha
4eff318722
Fix excessive page while fetching channels.
Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-13 14:11:12 +07:00
Toha
8be65cc04f
Update dsmart.com.tr guide.
Test:

```sh
npm test --- dsmart.com.tr

> test
> run-script-os dsmart.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand dsmart.com.tr

 PASS  sites/dsmart.com.tr/dsmart.com.tr.test.js
  √ can generate valid url (6 ms)
  √ can parse response (14 ms)
  √ can handle empty guide (2 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        0.828 s, estimated 1 s
Ran all test suites matching /dsmart.com.tr/i.
```

Grab:

```sh
npm run grab --- --site=dsmart.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=dsmart.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: dsmart.com.tr
loading channels...
  found 104 channel(s)
run #1:
  [1/208] dsmart.com.tr (tr) - 5d25dbe5cfef0b5761a051db - Jan 13, 2025 (38 programs)
  [2/208] dsmart.com.tr (tr) - 5d25dbe5cfef0b5761a051db - Jan 14, 2025 (36 programs)
  ...
  [207/208] dsmart.com.tr (tr) - 58d29bb0eefad3db9c6062b4 - Jan 14, 2025 (35 programs)
  [208/208] dsmart.com.tr (tr) - 58d29bb0eefad3db9c6062b4 - Jan 13, 2025 (41 programs)
  saving to "guide.xml"...
  done in 00h 00m 12s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-13 13:36:53 +07:00
iptv-bot[bot]
9a565f16f4 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1273874783) workflow.
2025-01-13 00:59:49 +00:00
freearhey
c4189460cb Install fuse.js package 2025-01-13 02:29:58 +03:00
freearhey
2e64b51b79 Update edit.ts 2025-01-12 23:10:50 +03:00
freearhey
bc4b5bd187 Update edit.test.ts 2025-01-12 23:09:49 +03:00
freearhey
8cdff31159 Rename channels:editor to channels:edit 2025-01-12 22:11:34 +03:00
freearhey
5218372e20 Update CONTRIBUTING.md 2025-01-12 22:06:33 +03:00
freearhey
e68a5b5f7f Add sites:init script 2025-01-12 21:37:20 +03:00
freearhey
dd3844f6dd Create init.ts 2025-01-12 21:37:00 +03:00
freearhey
3e6fb2b1d3 Create scripts/templates 2025-01-12 21:35:52 +03:00
freearhey
6285025a53 Create init.test.ts 2025-01-12 21:33:35 +03:00
freearhey
89bc036b01 Update tests/__data__ 2025-01-12 21:33:17 +03:00
freearhey
71d777e235 Update eslint.config.mjs 2025-01-12 21:32:58 +03:00
PopeyeTheSai10r
767aa12ef8
Merge pull request #2584 from iptv-org/add-freeview.co.uk
Add freeview.co.uk
2025-01-12 08:18:31 -08:00
PopeyeTheSai10r
53d81b8f4b
Merge pull request #2581 from iptv-org/add-gigatv.3bbtv.co.th
Add gigatv.3bbtv.co.th
2025-01-12 08:15:25 -08:00
Toha
6def709352
Update tvguide.com guide.
Test:

```sh
npm test --- tvguide.com

> test
> run-script-os tvguide.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvguide.com

 PASS  sites/tvguide.com/tvguide.com.test.js
  √ can generate valid url (4 ms)
  √ can parse response (5 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        0.567 s, estimated 1 s
Ran all test suites matching /tvguide.com/i.
```

Grab:

```sh
npm run grab --- --site=tvguide.com

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvguide.com

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvguide.com
loading channels...
  found 1 channel(s)
run #1:
  [1/2] tvguide.com (es) - UnivisionEast.us - Jan 12, 2025 (33 programs)
  [2/2] tvguide.com (es) - UnivisionEast.us - Jan 13, 2025 (25 programs)
  saving to "guide.xml"...
  done in 00h 00m 05s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-12 23:07:10 +07:00
PopeyeTheSai10r
d33aae5d84
Merge pull request #2583 from iptv-org/tohenk/fix-digiturk.com.tr
Update digiturk.com.tr guide.
2025-01-12 06:47:12 -08:00
PopeyeTheSai10r
78623a2930
Merge pull request #2582 from iptv-org/tohenk/fix-orangetv.orange.es
Update orangetv.orange.es guide.
2025-01-12 06:44:50 -08:00
freearhey
f32e7ac7e7 Create readme.md 2025-01-12 17:39:16 +03:00
freearhey
0473274b90 Create freeview.co.uk.channels.xml 2025-01-12 17:38:56 +03:00
Toha
3118077673
Update digiturk.com.tr guide.
Test:

```sh
npm test --- digiturk.com.tr

> test
> run-script-os digiturk.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand digiturk.com.tr

 PASS  sites/digiturk.com.tr/digiturk.com.tr.test.js
  √ can generate valid url (3 ms)
  √ can parse response (167 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        0.918 s, estimated 1 s
Ran all test suites matching /digiturk.com.tr/i.
```

Grab:

```sh
npm run grab --- --site=digiturk.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=digiturk.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: digiturk.com.tr
loading channels...
  found 108 channel(s)
run #1:
  [1/216] digiturk.com.tr (tr) - 212 - Jan 12, 2025 (56 programs)
  [2/216] digiturk.com.tr (tr) - 212 - Jan 13, 2025 (58 programs)
  ...
  [215/216] digiturk.com.tr (tr) - VavTV.tr - Jan 13, 2025 (18 programs)
  [216/216] digiturk.com.tr (tr) - TVNET.tr - Jan 13, 2025 (32 programs)
  saving to "guide.xml"...
  done in 00h 02m 10s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-12 17:33:06 +07:00
Toha
3dbece7ff0
Update orangetv.orange.es guide.
Test:

```sh
npm test --- orangetv.orange.es

> test
> run-script-os orangetv.orange.es

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand orangetv.orange.es

 PASS  sites/orangetv.orange.es/orangetv.orange.es.test.js
  √ can generate valid url (6 ms)
  √ can parse response (6 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        0.701 s, estimated 1 s
Ran all test suites matching /orangetv.orange.es/i.
```

Grab:

```sh
pm run grab --- --site=orangetv.orange.es

> grab
> npx tsx scripts/commands/epg/grab.ts --site=orangetv.orange.es

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: orangetv.orange.es
loading channels...
  found 2 channel(s)
run #1:
  [1/2] orangetv.orange.es (es) - La1.es - Jan 12, 2025 (18 programs)
  [2/2] orangetv.orange.es (es) - La2.es - Jan 12, 2025 (39 programs)
  saving to "guide.xml"...
  done in 00h 00m 18s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-12 14:14:28 +07:00
iptv-bot[bot]
3c19dd1725 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1272908881) workflow.
2025-01-12 01:01:20 +00:00
freearhey
cd74b66445 Create freeview.co.uk.config.js 2025-01-12 02:07:21 +03:00
freearhey
af1dcdd45e Create freeview.co.uk.test.js 2025-01-12 02:07:02 +03:00
freearhey
c6d56eefed Create content.json 2025-01-12 02:06:44 +03:00
Toha
7c3d32191d
Prevent empty commit on SITES update. (#2575)
Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-12 00:01:27 +01:00
PopeyeTheSai10r
aa9f0b7b86
Merge pull request #2580 from iptv-org/add-epg.112114.xyz
Add epg.112114.xyz
2025-01-11 15:00:57 -08:00
freearhey
4d539fb709 Create readme.md 2025-01-11 22:01:04 +03:00
freearhey
2ec54202d0 Create gigatv.3bbtv.co.th.channels.xml 2025-01-11 22:00:47 +03:00
freearhey
0e921f0d7a Create gigatv.3bbtv.co.th.config.js 2025-01-11 22:00:31 +03:00
freearhey
27c92d6dfb Create gigatv.3bbtv.co.th.test.js 2025-01-11 22:00:02 +03:00
freearhey
f093251308 Create content.json 2025-01-11 21:59:34 +03:00
PopeyeTheSai10r
24d64575cb
Merge pull request #2577 from iptv-org/freearhey-patch-6
Update i.mjh.nz
2025-01-11 07:17:42 -08:00
PopeyeTheSai10r
4087766349
Merge pull request #2578 from iptv-org/freearhey-patch-7
Update nzxmltv.com
2025-01-11 07:15:06 -08:00
PopeyeTheSai10r
0b3f92cb50
Merge pull request #2579 from iptv-org/tohenk/fix-web.magentatv.de
Update web.magentatv.de.
2025-01-11 07:12:38 -08:00
freearhey
73664749f3 Update epg.112114.xyz.config.js 2025-01-11 18:02:14 +03:00
freearhey
67265aa79b Create readme.md 2025-01-11 17:36:57 +03:00
freearhey
297b68d0e3 Create epg.112114.xyz.channels.xml 2025-01-11 17:36:37 +03:00
freearhey
9970a63d50 Create epg.112114.xyz.config.js 2025-01-11 17:36:13 +03:00
freearhey
2535942b5c Create epg.112114.xyz.test.js 2025-01-11 17:35:55 +03:00
freearhey
b8de28e035 Create content.xml 2025-01-11 17:35:40 +03:00
Aleksandr Statciuk
cfa34bc99c
Merge pull request #2572 from fraudiay79/patch-1
Update snrt.ma.config.js
2025-01-11 16:51:11 +03:00
Toha
7cce6d737e
Update web.magentatv.de.
Test:

```sh
npm test --- web.magentatv.de

> test
> run-script-os web.magentatv.de

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand web.magentatv.de

 PASS  sites/web.magentatv.de/web.magentatv.de.test.js
  √ can generate valid url (2 ms)
  √ can generate valid request method (1 ms)
  √ can generate valid request headers (2 ms)
  √ can generate valid request data (3 ms)
  √ can parse response (3 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       6 passed, 6 total
Snapshots:   0 total
Time:        0.599 s, estimated 1 s
Ran all test suites matching /web.magentatv.de/i.
```

Grab:

```sh
npm run grab --- --site=web.magentatv.de

> grab
> npx tsx scripts/commands/epg/grab.ts --site=web.magentatv.de

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: web.magentatv.de
loading channels...
  found 348 channel(s)
run #1:
  [1/696] web.magentatv.de (de) - 132 - Jan 11, 2025 (9 programs)
  [2/696] web.magentatv.de (de) - 132 - Jan 12, 2025 (11 programs)
  ...
  [695/696] web.magentatv.de (de) - SkyOne.de - Jan 12, 2025 (38 programs)
  [696/696] web.magentatv.de (de) - SkySport9.de - Jan 11, 2025 (2 programs)
  saving to "guide.xml"...
  done in 00h 04m 59s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-11 20:32:46 +07:00
Toha
aa1356e10b
Fix snrt.ma parser and implement channel parser.
Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-11 19:19:27 +07:00
freearhey
5176fb349d Update nzxmltv.com.config.js 2025-01-11 10:44:31 +03:00
freearhey
edfb7da0f5 Update i.mjh.nz.config.js 2025-01-11 10:39:11 +03:00
iptv-bot[bot]
0aea37d39b [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1271961412) workflow.
2025-01-11 00:56:40 +00:00
freearhey
cb333f5cae Update Dockerfile 2025-01-10 13:59:02 +03:00
freearhey
84add7d84c Update yarn.lock 2025-01-10 13:08:23 +03:00
freearhey
0255dfb19d Update grab.ts 2025-01-10 11:58:00 +03:00
freearhey
979db51d7e Merge branch 'master' into patch-2025.01.2 2025-01-10 11:57:43 +03:00
fraudiay79
e5e1988824
Update snrt.ma.config.js 2025-01-09 23:39:52 -05:00
iptv-bot[bot]
68ba143c67 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1270120574) workflow.
2025-01-10 00:57:49 +00:00
iptv-bot[bot]
8e39af2a4d [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1268181215) workflow.
2025-01-09 00:56:06 +00:00
Ismaël Moret
8a5ec2cfac
Merge pull request #2562 from iptv-org/freearhey-patch-5
Patch 2025.01.1
2025-01-08 13:24:56 +01:00
freearhey
c436e7589e Increase timeout for the test 2025-01-07 19:26:31 +03:00
freearhey
d7e28ae732 Merge branch 'freearhey-patch-5' of https://github.com/iptv-org/epg into freearhey-patch-5 2025-01-07 19:25:20 +03:00
freearhey
3c858ecca9 Minor changes to the tests 2025-01-07 19:24:50 +03:00
Ismaël Moret
4c44d449db sync with master 2025-01-07 15:10:07 +00:00
freearhey
e1ffd61618 Replace ts-jest with @swc/jest 2025-01-07 12:56:44 +03:00
freearhey
cfb53d754f Install jest-offline 2025-01-07 12:50:28 +03:00
freearhey
bb9248df1d Update grab.test.ts 2025-01-06 21:14:55 +03:00
freearhey
0b8782a9eb Update grab.test.ts 2025-01-06 10:31:33 +03:00
freearhey
7171e11d21 Delete .sites/_table.md from repo 2025-01-06 07:22:29 +03:00
freearhey
ded5e881bb Fix sites:update test on Windows 2025-01-06 07:21:30 +03:00
PopeyeTheSai10r
95e9e670ff
Merge pull request #2514 from iptv-org/BellezaEmporium-patch-1
[Fix] chaines-tv.orange.fr
2025-01-05 11:10:46 -08:00
freearhey
e15d812750 Replace path.resolve with pathToFileURL 2025-01-05 20:10:11 +03:00
freearhey
e7bbc7db23 Update parse.ts 2025-01-05 19:33:01 +03:00
freearhey
25093cb927 Update update.test.ts 2025-01-05 19:20:33 +03:00
freearhey
0f92463d05 Update editor.test.ts 2025-01-05 19:13:03 +03:00
freearhey
c8055f10d6 Add "debug" mode to tests 2025-01-05 19:02:24 +03:00
freearhey
fd136c856d Merge branch 'master' into patch-2025.01.2 2025-01-05 15:32:36 +03:00
freearhey
d3b96723e0 Update README.md 2025-01-05 15:21:58 +03:00
freearhey
8d1e94ad04 Update README.md 2025-01-05 15:12:47 +03:00
freearhey
67bd130763 Update grab.ts 2025-01-05 15:12:16 +03:00
freearhey
2db99a538e Update Dockerfile 2025-01-05 15:09:09 +03:00
freearhey
6e2a814487 Update pm2.config.js 2025-01-05 15:07:42 +03:00
freearhey
ae7b32b079 Fix "test" error on Windows
Details: https://github.com/iptv-org/epg/pull/2562#issuecomment-2571339858
2025-01-04 20:49:06 +03:00
freearhey
e8f89b216c Fix linter issues 2025-01-04 20:48:37 +03:00
freearhey
8b0952b915 Merge branch 'master' into freearhey-patch-5 2025-01-04 20:43:51 +03:00
freearhey
4aad8125f5 Update sky.com.config.js 2025-01-04 20:43:36 +03:00
PopeyeTheSai10r
82f6fc114b
Merge pull request #2566 from fraudiay79/cyta.com.cy
Add cyta.com.cy
2025-01-04 07:55:03 -08:00
PopeyeTheSai10r
904f72254e
Merge pull request #2567 from fraudiay79/stod2.is
Add Stod2.is
2025-01-04 07:31:29 -08:00
freearhey
cf52b0c3b0 Update stod2.is.config.js 2025-01-04 17:01:56 +03:00
freearhey
d156add197 Update stod2.is.test.js 2025-01-04 17:01:53 +03:00
freearhey
b44dc80a77 Merge branch 'stod2.is' of https://github.com/fraudiay79/epg into pr/2535 2025-01-04 16:58:43 +03:00
freearhey
adda13bfd6 Update cyta.com.cy.test.js 2025-01-04 16:55:25 +03:00
freearhey
1e126da5d5 Merge branch 'cyta.com.cy' of https://github.com/fraudiay79/epg into pr/2536 2025-01-04 16:53:27 +03:00
fraudiay79
89e0fe5306
Update readme.md 2025-01-03 12:04:36 -05:00
fraudiay79
f4d5719e7e
Create readme.md 2025-01-03 12:00:41 -05:00
fraudiay79
711d85309a
Create stod2.is.test.js 2025-01-03 12:00:18 -05:00
fraudiay79
c5ee8a7597
Create stod2.is.channels.xml 2025-01-03 11:59:54 -05:00
fraudiay79
01419410eb
Create stod2.is.config.js 2025-01-03 11:59:01 -05:00
fraudiay79
69057f29f8
Create readme.md 2025-01-03 08:34:14 -05:00
fraudiay79
35abd1f9e8
Create cyta.com.cy.config.js 2025-01-03 08:33:31 -05:00
fraudiay79
1c29228baa
Create cyta.com.cy.channels.xml 2025-01-03 08:32:44 -05:00
fraudiay79
0f4fd3472f
Create cyta.com.cy.test.js 2025-01-03 08:32:21 -05:00
freearhey
dfdac39bb4 Merge branch 'master' into freearhey-patch-5 2025-01-03 13:35:13 +03:00
Ismaël Moret
f07514b3e4
Merge pull request #2564 from michaelfeinbier/fix-web.magentatv.de
#2555 Fix Site web.magentatv.de
2025-01-03 11:28:16 +01:00
Ismaël Moret
c9bfb3ddfa
Merge pull request #2565 from iptv-org/(Fix)-elcinema.com
fix elcinema.com
2025-01-03 11:27:41 +01:00
Ismaël Moret
a3caf2393d
Merge branch 'master' into freearhey-patch-5 2025-01-03 11:24:40 +01:00
Aleksandr Statciuk
d64c934831
Merge pull request #2563 from tohenk/fix/sky.com
Filter out repeated schedule events from sky.com.
2025-01-03 13:11:35 +03:00
freearhey
7e303db1f5 Update check.yml 2025-01-03 12:55:57 +03:00
freearhey
fef6c50bf1 Update package.json 2025-01-03 12:55:19 +03:00
freearhey
786e95a388 Update lint.ts 2025-01-03 12:55:00 +03:00
freearhey
532386af91 Update lint.test.ts 2025-01-03 12:54:42 +03:00
freearhey
e2bf048d54 Update pre-commit 2025-01-03 12:01:02 +03:00
freearhey
382d4a310e Fix pluto.tv linter issues 2025-01-03 12:00:46 +03:00
freearhey
a89e26855b Merge branch 'master' into freearhey-patch-5 2025-01-03 11:55:45 +03:00
freearhey
3525735885 Update lint.ts 2025-01-03 11:53:02 +03:00
freearhey
bb36840b72 Update lint.test.ts 2025-01-03 11:52:50 +03:00
freearhey
cbeac9dd35 Update tests/__data__ 2025-01-03 11:52:23 +03:00
freearhey
7fee216cb1 Update README.md 2025-01-03 09:20:56 +03:00
freearhey
85442212dc Update Dockerfile 2025-01-03 09:20:50 +03:00
freearhey
12740941d5 Install pm2 locally 2025-01-03 09:04:04 +03:00
freearhey
0baf1be2c0 Update pm2.config.js 2025-01-03 09:03:45 +03:00
PopeyeTheSai10r
9a9d21dfe7 elcinema.com
close #2541
2025-01-02 16:23:41 -08:00
Michael Feinbier
a738c3b211
Load the token and cookie only once 2025-01-02 20:59:58 +01:00
Michael Feinbier
5c90340165
fix: Use Axios in magentatv provider to obtain token and cookies 2025-01-02 20:30:21 +01:00
Aleksandr Statciuk
49a3902fb1
Merge pull request #2554 from Newbiect/pluto.tv
Pluto.tv
2025-01-02 15:44:05 +03:00
freearhey
9bbc6b8706 Update Dockerfile 2025-01-02 15:36:20 +03:00
freearhey
ca1a916b85 Update README.md 2025-01-02 13:59:26 +03:00
freearhey
9ef413eef4 Update Dockerfile 2025-01-02 13:10:23 +03:00
freearhey
06827b20ce Update pm2.config.js 2025-01-02 13:10:20 +03:00
freearhey
2c22600a27 Delete cron package 2025-01-02 11:51:51 +03:00
freearhey
76a902ae9c Create Dockerfile 2025-01-02 11:44:59 +03:00
freearhey
aeaef329e7 wip 2025-01-02 11:10:04 +03:00
Newbiect
dd29cb338c
Update readme.md 2025-01-01 21:17:01 -05:00
iptv-bot[bot]
54f1b03c33 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1257597962) workflow.
2025-01-02 00:55:30 +00:00
Newbiect
5f2219b672
Update pluto.tv.test.js 2025-01-01 11:05:50 -05:00
Toha
f11ed412ee
Fix excluded schedule event from test.
Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-01 18:15:59 +07:00
Toha
67509d97b1
Filter out repeated schedule events from sky.com.
Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-01 17:51:47 +07:00
freearhey
5c3df01cef Update check.yml 2025-01-01 13:24:57 +03:00
freearhey
d134f2d044 Update check.yml 2025-01-01 13:23:57 +03:00
freearhey
222e65b3ea Update CONTRIBUTING.md 2025-01-01 13:04:01 +03:00
freearhey
2f670a5467 Create check.yml 2025-01-01 13:03:48 +03:00
freearhey
b0c8dffa1a Update package.json 2025-01-01 13:03:27 +03:00
freearhey
66be6c5a81 Install husky 2025-01-01 13:02:24 +03:00
freearhey
5df982bb7c Fix linter issues in sites/ 2025-01-01 12:27:22 +03:00
freearhey
d6d20b6413 Update package.json 2025-01-01 11:16:11 +03:00
freearhey
784216a82d Update eslint.config.mjs 2025-01-01 11:15:53 +03:00
freearhey
4788ff1e31 Update .prettierrc.js 2025-01-01 11:15:24 +03:00
freearhey
9af374c72b Update issueLoader.ts 2025-01-01 10:53:19 +03:00
freearhey
b99765c743 Create broken_guide_warning.mjs 2025-01-01 10:53:15 +03:00
freearhey
c9f730bac4 Delete broken_guide_warning.js 2025-01-01 10:53:13 +03:00
freearhey
65c1447785 Create broken_guide_down.mjs 2025-01-01 10:53:10 +03:00
freearhey
7840829424 Delete broken_guide_down.js 2025-01-01 10:53:08 +03:00
freearhey
3db2e6a950 Update update.test.ts 2025-01-01 10:48:16 +03:00
freearhey
ad80c82882 Merge branch 'freearhey-patch-5' into freearhey-patch-4 2025-01-01 10:47:02 +03:00
freearhey
a37973f10e Update update.test.ts 2025-01-01 10:41:03 +03:00
freearhey
a5b8fa12ae Update tests/__data__ 2025-01-01 10:40:47 +03:00
iptv-bot[bot]
1b62393008 [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](1256843128) workflow.
2025-01-01 07:28:35 +00:00
freearhey
7322f9eb61 Update broken_guide_warning.js 2025-01-01 10:24:07 +03:00
freearhey
1aeaf49dc2 Update broken_guide_down.js 2025-01-01 10:24:04 +03:00
freearhey
5b280dfbc8 Fixes linter issues 2025-01-01 10:18:30 +03:00
freearhey
60f3604ea5 Upgrade eslint config 2025-01-01 10:09:08 +03:00
Aleksandr Statciuk
7783d752cc
Merge pull request #2561 from tohenk/site/tivie.id
Add site tivie.id.
2025-01-01 09:18:17 +03:00
Newbiect
6fb40b5c07
Update pluto.tv.test.js 2024-12-31 17:25:08 -05:00
Newbiect
0d32c3dedd
Update pluto.tv.config.js 2024-12-31 17:11:46 -05:00
Toha
d7b281304b
Add site tivie.id.
Test:

```sh
npm test --- tivie.id

> test
> run-script-os tivie.id

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tivie.id

 PASS  sites/tivie.id/tivie.id.test.js
  √ can generate valid url (4 ms)
  √ can parse response (767 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        5.273 s, estimated 6 s
Ran all test suites matching /tivie.id/i.
```

Grab:

```sh
npm run grab --- --site=tivie.id

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tivie.id

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tivie.id
loading channels...
  found 50 channel(s)
run #1:
Unable to fetch https://tivie.id/film/as%cc%85oka-nwzDnwvClgf4: Request failed with status code 404!
  [1/100] tivie.id (id) - ANTV.id - Dec 31, 2024 (15 programs)
  [2/100] tivie.id (id) - ANTV.id - Jan 1, 2025 (13 programs)
  ...
  [99/100] tivie.id (id) - SindoNewsTV.id - Dec 31, 2024 (22 programs)
  [100/100] tivie.id (id) - SEAToday.id - Jan 1, 2025 (37 programs)
  saving to "guide.xml"...
  done in 00h 08m 58s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2025-01-01 00:19:15 +07:00
PopeyeTheSai10r
5ffe285c1e
Merge pull request #2558 from iptv-org/freearhey-patch-3
Patch 2024.12.2
2024-12-31 08:32:25 -08:00
Ismaël Moret
8a8262eacb
Merge pull request #2485 from davidclaeysquinones/orangetv.orange.es
Add orangetv.es provider
2024-12-31 16:44:41 +01:00
David Claeys
15790a24ee rename provider 2024-12-31 12:36:10 +01:00
Toha
368304fb2e Distinguish between UK and IE channels.
- Update some channels TVG-ID.
- Fix duplicated TVG-ID between UK and IE.

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-31 17:30:52 +07:00
Aleksandr Statciuk
7e7efaa487
Merge pull request #2559 from fraudiay79/cosmotetv.gr
Add Cosmotetv.gr and delete cosmote.gr
2024-12-31 07:30:09 +03:00
fraudiay79
345be3a71d
Create readme.md 2024-12-30 10:50:23 -05:00
fraudiay79
e1a501b0bd
Delete sites/cosmote.gr directory 2024-12-30 09:06:56 -05:00
fraudiay79
b4dafb2dc1
Create cosmotetv.gr.test.js 2024-12-30 09:06:40 -05:00
fraudiay79
312b654937
Create cosmotetv.gr.channels.xml 2024-12-30 09:06:17 -05:00
fraudiay79
af1149548e
Create cosmotetv.gr.config.js 2024-12-30 09:05:46 -05:00
freearhey
8dce850c60 Update README.md 2024-12-30 09:38:09 +03:00
freearhey
c3c70ae627 Update update.yml 2024-12-30 09:38:05 +03:00
freearhey
1d150e0ab7 Update CONTRIBUTING.md 2024-12-30 09:34:02 +03:00
freearhey
7be265e4dd Create .sites/ 2024-12-30 09:33:35 +03:00
freearhey
2c35704fb0 Update scripts/ 2024-12-30 09:33:16 +03:00
freearhey
d9a70f2a1f Update dependencies 2024-12-30 09:32:10 +03:00
freearhey
0c99219400 Create update.test.ts 2024-12-30 09:30:56 +03:00
freearhey
31463dcf39 Update tests/__data__ 2024-12-30 09:30:34 +03:00
PopeyeTheSai10r
bfb9a4413b
Merge pull request #2522 from iptv-org/bellezaemporium/fixes/ziggogo
[Fix] ziggogo.tv
2024-12-29 12:56:19 -08:00
Newbiect
a8e52738f6
Update and rename pluto.tv.sv.channels.xml to pluto.tv_sv.channels.xml 2024-12-29 10:55:52 -05:00
Newbiect
71ad567b75
Update and rename pluto.tv.us.channels.xml to pluto.tv_us.channels.xml 2024-12-29 10:55:29 -05:00
Newbiect
1d24fdca1d
Update and rename pluto.tv.uk.channels.xml to pluto.tv_uk.channels.xml 2024-12-29 10:55:14 -05:00
Newbiect
695e3ffb09
Update and rename pluto.tv.no.channels.xml to pluto.tv_no.channels.xml 2024-12-29 10:54:58 -05:00
Newbiect
633137b7f9
Update and rename pluto.tv.mx.channels.xml to pluto.tv_mx.channels.xml 2024-12-29 10:54:44 -05:00
Newbiect
a0d66974b2
Update and rename pluto.tv.it.channels.xml to pluto.tv_it.channels.xml 2024-12-29 10:54:29 -05:00
Newbiect
c10b464f29
Update and rename pluto.tv.fr.channels.xml to pluto.tv_fr.channels.xml 2024-12-29 10:54:16 -05:00
Newbiect
b282583262
Update and rename pluto.tv.es.channels.xml to pluto.tv_es.channels.xml 2024-12-29 10:54:01 -05:00
Newbiect
d9bce3edc3
Update and rename pluto.tv.dk.channels.xml to pluto.tv_dk.channels.xml 2024-12-29 10:53:44 -05:00
Newbiect
ccde465dcf
Update and rename pluto.tv.de.channels.xml to pluto.tv_de.channels.xml 2024-12-29 10:53:23 -05:00
Newbiect
651920498b
Update and rename pluto.tv.cl.channels.xml to pluto.tv_cl.channels.xml 2024-12-29 10:53:05 -05:00
Newbiect
6f6005e413
Update and rename pluto.tv.ca.channels.xml to pluto.tv_ca.channels.xml 2024-12-29 10:52:50 -05:00
Newbiect
6470fb4d88
Update and rename pluto.tv.br.channels.xml to pluto.tv_br.channels.xml 2024-12-29 10:52:34 -05:00
Newbiect
8ba5c44964
Update and rename pluto.tv.ar.channels.xml to pluto.tv_ar.channels.xml 2024-12-29 10:52:17 -05:00
Newbiect
06fcce0ef0
Update and rename pluto.tv.all.channels.xml to pluto.tv_all.channels.xml 2024-12-29 10:51:57 -05:00
PopeyeTheSai10r
2ef74b7743
Merge pull request #2526 from iptv-org/bellezaemporium/fixes/i.mjh
[Fix] i.mjh.nz
2024-12-28 22:28:37 -08:00
Newbiect
c4952f1eaa
Create readme.md 2024-12-28 23:19:15 -05:00
Aleksandr Statciuk
16334d520c
Merge pull request #2552 from fraudiay79/programetv.ro
Update programetv.ro.config.js
2024-12-29 05:23:18 +03:00
Newbiect
32c2fbdafc
Add files via upload 2024-12-28 15:11:29 -06:00
Newbiect
c1add31472
Create pluto.tv.config.js 2024-12-28 16:11:05 -05:00
Toha
d59f68b9f1
Return first item of program date and icon.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-28 20:13:53 +07:00
fraudiay79
ed3ebb2021
Update programetv.ro.test.js 2024-12-28 00:50:11 -05:00
Toha
d9c8e20a24
Update ziggogo.tv guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-28 11:00:25 +07:00
fraudiay79
81c7b29a05
Update programetv.ro.config.js 2024-12-27 22:36:49 -05:00
Ismaël Moret
eff2f6ba15
Merge pull request #2544 from fraudiay79/ipko.tv
Add ipko.tv and remove ipko.com
2024-12-27 20:46:54 +01:00
PopeyeTheSai10r
f469665e69 update sites.md 2024-12-27 11:15:13 -08:00
Dum4G
62b6bb134e
Merge pull request #2548 from iptv-org/freearhey-patch-2
Update SITES.md
2024-12-27 20:26:42 +03:00
Ismaël Moret
24a90462a5
Merge pull request #2537 from fraudiay79/snrt.ma
Add SNRT (Moroccan National TV)
2024-12-27 17:46:42 +01:00
PopeyeTheSai10r
141fc210c4
Merge pull request #2540 from iptv-org/add-winplay.co
Add winplay.co
2024-12-27 00:10:36 -08:00
freearhey
38579f14cb Update SITES.md 2024-12-27 08:47:42 +03:00
fraudiay79
5d874ea163
Delete sites/ipko.com directory 2024-12-26 23:39:10 -05:00
freearhey
64bc70dbb2 Update SITES.md 2024-12-27 07:09:37 +03:00
freearhey
8b1a77bd40 Update SITES.md 2024-12-27 06:56:41 +03:00
Aleksandr Statciuk
5e420b23e1
Merge pull request #2545 from fraudiay79/neo.io
Add Neo.io
2024-12-27 06:14:35 +03:00
Aleksandr Statciuk
ae8dca6c55
Merge pull request #2546 from fraudiay79/chada.ma
Add Chada.ma
2024-12-27 06:09:51 +03:00
PopeyeTheSai10r
f2b46645ce
Merge pull request #2539 from iptv-org/add-sporttv.pt
Add sporttv.pt
2024-12-26 17:54:46 -08:00
fraudiay79
1da991cb79
Create chada.ma.test.js 2024-12-26 15:42:12 -05:00
fraudiay79
1d142e304e
Create chada.ma.config.js 2024-12-26 15:41:52 -05:00
fraudiay79
7de965ec82
Create chada.ma.channels.xml 2024-12-26 15:41:26 -05:00
fraudiay79
2711e8134a
Create readme.md 2024-12-26 15:40:59 -05:00
fraudiay79
baa6e36c43
Create neo.io.channels.xml 2024-12-26 15:13:26 -05:00
fraudiay79
22a061a384
Create readme.md 2024-12-26 15:13:03 -05:00
fraudiay79
5b4240288d
Create neo.io.config.js 2024-12-26 15:12:43 -05:00
fraudiay79
634188f008
Create neo.io.test.js 2024-12-26 15:12:19 -05:00
fraudiay79
14c4ca3916
Create ipko.tv.test.js 2024-12-26 14:56:29 -05:00
fraudiay79
6bca27bf0b
Create ipko.tv.config.js 2024-12-26 14:55:45 -05:00
fraudiay79
d7eeec1901
Create ipko.tv.channels.xml 2024-12-26 14:55:20 -05:00
fraudiay79
3aec73d2c9
Create readme.md 2024-12-26 14:54:52 -05:00
David Claeys
f13a5ba0f2 update readme 2024-12-26 16:20:48 +01:00
David Claeys
19952d37e5 edit channels 2024-12-26 16:01:19 +01:00
David Claeys
2ef311b8a2 update channels 2024-12-26 15:53:29 +01:00
David Claeys
2bba1fadda update channel 2024-12-26 15:41:28 +01:00
David Claeys
f51439d6fb update channels 2024-12-26 15:18:27 +01:00
David Claeys
9b9131526e update channel 2024-12-26 15:14:21 +01:00
David Claeys
1db77a4529 revert channel changes 2024-12-26 11:37:08 +01:00
David Claeys
56da008b2a update channels xml 2024-12-24 08:51:18 +01:00
David Claeys
5e40b51957
Merge branch 'iptv-org:master' into orangetv.orange.es 2024-12-24 08:31:17 +01:00
freearhey
8285ea04f2 Update SITES.md 2024-12-24 03:04:58 +03:00
freearhey
19130007fd Create readme.md 2024-12-24 03:04:55 +03:00
freearhey
925ef03d36 Create winplay.co.channels.xml 2024-12-24 03:04:49 +03:00
freearhey
87b52610a4 Create winplay.co.config.js 2024-12-24 03:03:55 +03:00
freearhey
770b9c856d Create winplay.co.test.js 2024-12-24 03:03:39 +03:00
freearhey
ff84be91f8 Create content.json 2024-12-24 03:02:26 +03:00
freearhey
03bcf1fd70 Update SITES.md 2024-12-23 07:27:03 +03:00
freearhey
4975f04127 Create readme.md 2024-12-23 07:26:55 +03:00
freearhey
88a4afd4bd Create sporttv.pt.channels.xml 2024-12-23 07:26:47 +03:00
freearhey
a7bd3204be Create sporttv.pt.config.js 2024-12-23 07:26:37 +03:00
freearhey
eb10f8207b Create sporttv.pt.test.js 2024-12-23 07:26:25 +03:00
freearhey
bb956bcf07 Create content.html 2024-12-23 07:26:18 +03:00
freearhey
73a80fbb3b Merge branch 'snrt.ma' of https://github.com/fraudiay79/epg into pr/2534 2024-12-22 23:51:56 +03:00
PopeyeTheSai10r
c108aa586e
Merge pull request #2515 from iptv-org/BellezaEmporium-patch-2
[Fix] energeek.cl
2024-12-20 19:46:41 -08:00
Toha
08a6e61f3f
Merge branch 'master' into bellezaemporium/fixes/ziggogo 2024-12-20 22:25:55 +07:00
fraudiay79
d70147cb72
Add files via upload 2024-12-20 08:47:02 -05:00
freearhey
37e27c8cf8 Update yarn.lock 2024-12-20 19:54:59 +07:00
freearhey
838620b698 Update package-lock.json 2024-12-20 19:54:59 +07:00
Toha
a5229d3af0 Simultaneous fetch is now external package.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-20 19:54:59 +07:00
Toha
916b5f5234 Use simultaneous fetch helper.
- Introduce fetch helper for site to fetch guide simultaneously.
- Clean-up unused requires.
- Updated tv.yandex.ru cookies.

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-20 19:54:59 +07:00
David Claeys
ceebaed60f
Merge branch 'iptv-org:master' into orangetv.orange.es 2024-12-20 08:19:10 +01:00
PopeyeTheSai10r
f00d53cb7b
Merge pull request #2527 from iptv-org/bellezaemporium/fixes/iltalehti
[Fix] iltalehti.fi
2024-12-19 15:52:24 -08:00
PopeyeTheSai10r
f7eefb173e
Merge pull request #2524 from iptv-org/bellezaemporium/fixes/i24news
[Fix] i24news.tv
2024-12-19 15:44:28 -08:00
PopeyeTheSai10r
fd91a9c532
Merge pull request #2525 from iptv-org/bellezaemporium/fixes/pickx
[Fix] pickx.be
2024-12-19 15:42:30 -08:00
Ismaël Moret
f6ff5076ae
added program genre 2024-12-19 23:06:36 +01:00
Ismaël Moret
259af9879c
fixed test 2024-12-19 23:06:11 +01:00
Ismaël Moret
470605534a
Update orangetv.es.config.js 2024-12-19 22:36:57 +01:00
Ismaël Moret
b0cf90be1f
fix config 2024-12-19 22:25:01 +01:00
fraudiay79
f6c67b239b Add cyta.com.cy
Add cyta.com.cy guide (Cyprus)
2024-12-19 15:09:04 -05:00
fraudiay79
f501229b65 Add stod2.is
Add stod2.is guide
2024-12-19 14:54:34 -05:00
fraudiay79
d0acdfe25a Add SNRT.ma
Add SNRT (Moroccan National TV)
2024-12-19 14:32:35 -05:00
Ismaël Moret
53e05d1bce
Update orangetv.es.channels.xml 2024-12-19 16:11:52 +01:00
Ismaël Moret
e00efc77b9
Update iltalehti.fi.config.js 2024-12-19 16:04:03 +01:00
Ismaël Moret
67e7f13c02
Update iltalehti.fi.test.js 2024-12-19 16:03:48 +01:00
David Claeys
4a7d324c7b
Merge branch 'iptv-org:master' into orangetv.orange.es 2024-12-19 16:02:42 +01:00
Ismaël Moret
e1cda12de3
Update i.mjh.nz.test.js 2024-12-19 15:58:44 +01:00
Ismaël Moret
51bbe74046
Update i.mjh.nz.config.js 2024-12-19 15:58:18 +01:00
Ismaël Moret
782f911d3e
Update pickx.be.test.js 2024-12-19 15:55:39 +01:00
Ismaël Moret
8374cd5885
Update pickx.be.config.js 2024-12-19 15:55:23 +01:00
Ismaël Moret
38ab58d03a
Update i24news.tv.test.js 2024-12-19 15:53:07 +01:00
Ismaël Moret
ed3ede914c
Update i24news.tv.config.js 2024-12-19 15:52:56 +01:00
Ismaël Moret
7a9ece8e59
Update i24news.tv.channels.xml 2024-12-19 15:52:45 +01:00
Ismaël Moret
4f2f73e6e0
Update program.json 2024-12-19 15:47:11 +01:00
Ismaël Moret
74ce38bc07
Update content_1800.json 2024-12-19 15:46:48 +01:00
Ismaël Moret
b72ea4ab08
Update content_1200.json 2024-12-19 15:46:38 +01:00
Ismaël Moret
5ca80a9f1d
Update content_0600.json 2024-12-19 15:46:29 +01:00
Ismaël Moret
fd284303ce
Update content_0000.json 2024-12-19 15:46:18 +01:00
Ismaël Moret
a7ee0415e7
update test 2024-12-19 15:46:03 +01:00
Ismaël Moret
28e00b209a
[ziggo] new endpoints 2024-12-19 15:44:34 +01:00
freearhey
af932a972c Update tvarenasport.hr.config.js
Move code from tvarenasport.com/tvarenasport.com.config.js
2024-12-19 21:40:14 +07:00
Ismaël Moret
5431648dbf
Update chaines-tv.orange.fr.config.js 2024-12-19 15:36:31 +01:00
Ismaël Moret
7096beec7d
Update chaines-tv.orange.fr.test.js 2024-12-19 15:36:12 +01:00
Ismaël Moret
865b7beca7
add season data 2024-12-19 15:34:43 +01:00
Ismaël Moret
ee36284d54
Update sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
2024-12-19 10:58:48 +01:00
Ismaël Moret
aebd280b64
Merge branch 'master' into BellezaEmporium-patch-1 2024-12-18 22:33:16 +01:00
Toha
f644583a65 Update tvplus.com.tr guide.
Test:

```sh
npm test -- tvplus.com.tr

> test
> run-script-os tvplus.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr

 PASS  sites/tvplus.com.tr/tvplus.com.tr.test.js
  √ can generate valid url (4 ms)
  √ can parse response (15 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.648 s, estimated 4 s
Ran all test suites matching /tvplus.com.tr/i.
```

Grab:

```sh
npm run grab -- --site=tvplus.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvplus.com.tr
loading channels...
  found 10 channel(s)
run #1:
  [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs)
  [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs)
  [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs)
  [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs)
  [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs)
  [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs)
  [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs)
  [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs)
  [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs)
  [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs)
  [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs)
  [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs)
  [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs)
  [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs)
  [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs)
  [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs)
  [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs)
  [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs)
  [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs)
  [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs)
  saving to "guide.xml"...
  done in 00h 02m 17s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-18 21:32:33 +00:00
freearhey
d50bc8ee2f Add missing space 2024-12-18 21:27:55 +00:00
freearhey
0b2e2db664 Add support for absolute output path
Resolves https://github.com/iptv-org/epg/issues/2342
2024-12-18 21:27:55 +00:00
freearhey
60e246080b Replace -- with --- in npm commands
Resolves https://github.com/iptv-org/epg/issues/2354

Details: https://github.com/npm/cli/issues/3136
2024-12-18 21:27:55 +00:00
freearhey
76ef025765 Upgrade dependencies 2024-12-18 21:27:54 +00:00
freearhey
43b6679fa0 Update validate.test.ts 2024-12-18 21:27:54 +00:00
freearhey
d92b106514 Upgrade tsx package 2024-12-18 21:27:54 +00:00
freearhey
ca43ef969c Update queueCreator.ts 2024-12-18 21:27:54 +00:00
Toha
91f72c5bb2 Update tvplus.com.tr guide.
Test:

```sh
npm test -- tvplus.com.tr

> test
> run-script-os tvplus.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr

 PASS  sites/tvplus.com.tr/tvplus.com.tr.test.js
  √ can generate valid url (4 ms)
  √ can parse response (15 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.648 s, estimated 4 s
Ran all test suites matching /tvplus.com.tr/i.
```

Grab:

```sh
npm run grab -- --site=tvplus.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvplus.com.tr
loading channels...
  found 10 channel(s)
run #1:
  [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs)
  [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs)
  [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs)
  [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs)
  [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs)
  [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs)
  [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs)
  [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs)
  [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs)
  [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs)
  [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs)
  [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs)
  [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs)
  [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs)
  [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs)
  [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs)
  [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs)
  [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs)
  [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs)
  [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs)
  saving to "guide.xml"...
  done in 00h 02m 17s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-18 21:27:54 +00:00
Toha
5fd4eaf869 Update tvplus.com.tr guide.
Test:

```sh
npm test -- tvplus.com.tr

> test
> run-script-os tvplus.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr

 PASS  sites/tvplus.com.tr/tvplus.com.tr.test.js
  √ can generate valid url (4 ms)
  √ can parse response (15 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.648 s, estimated 4 s
Ran all test suites matching /tvplus.com.tr/i.
```

Grab:

```sh
npm run grab -- --site=tvplus.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvplus.com.tr
loading channels...
  found 10 channel(s)
run #1:
  [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs)
  [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs)
  [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs)
  [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs)
  [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs)
  [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs)
  [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs)
  [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs)
  [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs)
  [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs)
  [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs)
  [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs)
  [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs)
  [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs)
  [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs)
  [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs)
  [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs)
  [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs)
  [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs)
  [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs)
  saving to "guide.xml"...
  done in 00h 02m 17s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-18 21:26:43 +00:00
freearhey
aba9bff1e1 Update epg-parser package again 2024-12-18 22:06:09 +03:00
freearhey
cba34bd351 Merge branch 'master' into BellezaEmporium-patch-2 2024-12-18 22:05:18 +03:00
freearhey
4a7f522397 Update energeek.cl.config.js 2024-12-18 22:02:31 +03:00
freearhey
d236606a63 Update epg-parser package 2024-12-18 22:02:26 +03:00
Ismaël Moret
6677161431
add an or case 2024-12-18 19:11:37 +01:00
Ismaël Moret
7237a62d94
Merge pull request #2507 from iptv-org/freearhey-patch1
Patch 2024.12.1
2024-12-18 00:01:40 +01:00
Ismaël Moret
9227e76eb2
Merge pull request #2508 from tohenk/fix/tvplus.com.tr
Update tvplus.com.tr guide.
2024-12-17 20:13:57 +01:00
freearhey
8110659652 Add missing space 2024-12-17 20:14:19 +03:00
freearhey
300380af90 Merge branch 'fix/tvplus.com.tr' of https://github.com/tohenk/iptv-org-epg into pr/2508 2024-12-17 20:06:12 +03:00
Ismaël Moret
07eadd7c93
[Fix] energeek.cl 2024-12-17 17:01:53 +01:00
Ismaël Moret
b79b3336a0
chaines-tv.orange.fr : fix 2024-12-17 16:31:16 +01:00
Toha
458cac0894
Update tvplus.com.tr guide.
Test:

```sh
npm test -- tvplus.com.tr

> test
> run-script-os tvplus.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr

 PASS  sites/tvplus.com.tr/tvplus.com.tr.test.js
  √ can generate valid url (4 ms)
  √ can parse response (15 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.648 s, estimated 4 s
Ran all test suites matching /tvplus.com.tr/i.
```

Grab:

```sh
npm run grab -- --site=tvplus.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvplus.com.tr
loading channels...
  found 10 channel(s)
run #1:
  [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs)
  [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs)
  [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs)
  [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs)
  [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs)
  [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs)
  [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs)
  [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs)
  [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs)
  [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs)
  [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs)
  [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs)
  [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs)
  [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs)
  [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs)
  [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs)
  [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs)
  [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs)
  [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs)
  [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs)
  saving to "guide.xml"...
  done in 00h 02m 17s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-17 08:54:11 +07:00
PopeyeTheSai10r
b9bbd32d35
Merge pull request #2503 from tohenk/fix/virgintvgo.virginmedia.com
Update virgintvgo.virginmedia.com guide.
2024-12-15 16:22:50 -08:00
PopeyeTheSai10r
271094555d
Merge pull request #2504 from tohenk/fix/sky.com
Update sky.com guide.
2024-12-15 16:21:23 -08:00
PopeyeTheSai10r
0e27c4d917
Merge pull request #2505 from tohenk/fix/musor.tv
Update musor.tv guide.
2024-12-15 16:20:49 -08:00
Toha
efd24aac90
Update tvplus.com.tr guide.
Test:

```sh
npm test -- tvplus.com.tr

> test
> run-script-os tvplus.com.tr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr

 PASS  sites/tvplus.com.tr/tvplus.com.tr.test.js
  √ can generate valid url (4 ms)
  √ can parse response (15 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.648 s, estimated 4 s
Ran all test suites matching /tvplus.com.tr/i.
```

Grab:

```sh
npm run grab -- --site=tvplus.com.tr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvplus.com.tr
loading channels...
  found 10 channel(s)
run #1:
  [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs)
  [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs)
  [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs)
  [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs)
  [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs)
  [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs)
  [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs)
  [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs)
  [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs)
  [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs)
  [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs)
  [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs)
  [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs)
  [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs)
  [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs)
  [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs)
  [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs)
  [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs)
  [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs)
  [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs)
  saving to "guide.xml"...
  done in 00h 02m 17s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-15 22:49:55 +07:00
freearhey
2a0d7cf004 Add support for absolute output path
Resolves https://github.com/iptv-org/epg/issues/2342
2024-12-15 18:08:01 +03:00
freearhey
28c8e3d74f Replace -- with --- in npm commands
Resolves https://github.com/iptv-org/epg/issues/2354

Details: https://github.com/npm/cli/issues/3136
2024-12-15 17:32:49 +03:00
Toha
ac914c7081
Update musor.tv guide.
Test:

```sh
npm test -- musor.tv

> test
> run-script-os musor.tv

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand musor.tv

 PASS  sites/musor.tv/musor.tv.test.js (7.206 s)
  √ can generate valid url (14 ms)
  √ can generate valid url for today
  √ can parse response (372 ms)
  √ can handle empty guide (2 ms)

Test Suites: 1 passed, 1 total
Tests:       4 passed, 4 total
Snapshots:   0 total
Time:        7.437 s
Ran all test suites matching /musor.tv/i.
```

Grab:

```sh
npm run grab -- --site=musor.tv

> grab
> npx tsx scripts/commands/epg/grab.ts --site=musor.tv

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: musor.tv
loading channels...
  found 18 channel(s)
run #1:
  [1/36] musor.tv (en) - ClubMTVEurope.uk - Dec 15, 2024 (11 programs)
  [2/36] musor.tv (en) - ClubMTVEurope.uk - Dec 16, 2024 (10 programs)
  [3/36] musor.tv (en) - Travelxp.in - Dec 16, 2024 (49 programs)
  [4/36] musor.tv (en) - Travelxp.in - Dec 15, 2024 (61 programs)
  [5/36] musor.tv (en) - TraceUrban.fr - Dec 16, 2024 (10 programs)
  [6/36] musor.tv (en) - TraceUrban.fr - Dec 15, 2024 (11 programs)
  [7/36] musor.tv (en) - TraceSportStars.fr - Dec 16, 2024 (48 programs)
  [8/36] musor.tv (en) - TraceSportStars.fr - Dec 15, 2024 (60 programs)
  [9/36] musor.tv (en) - TotalDanceTV.hu - Dec 16, 2024 (0 programs)
    ERR: socket hang up
  [10/36] musor.tv (en) - TotalDanceTV.hu - Dec 15, 2024 (30 programs)
  [11/36] musor.tv (en) - StingrayCMusic.ca - Dec 16, 2024 (11 programs)
  [12/36] musor.tv (en) - StingrayCMusic.ca - Dec 15, 2024 (12 programs)
  [13/36] musor.tv (en) - StingrayClassica.ca - Dec 16, 2024 (31 programs)
  [14/36] musor.tv (en) - StingrayClassica.ca - Dec 15, 2024 (34 programs)
  [15/36] musor.tv (en) - SkyNewsInternational.uk - Dec 16, 2024 (42 programs)
  [16/36] musor.tv (en) - SkyNewsInternational.uk - Dec 15, 2024 (47 programs)
  [17/36] musor.tv (en) - MTVLive.uk - Dec 16, 2024 (26 programs)
  [18/36] musor.tv (en) - MTVLive.uk - Dec 15, 2024 (31 programs)
  [19/36] musor.tv (en) - MTVHitsEurope.uk - Dec 16, 2024 (13 programs)
  [20/36] musor.tv (en) - MTVHitsEurope.uk - Dec 15, 2024 (13 programs)
  [21/36] musor.tv (en) - MTVGlobal.uk - Dec 16, 2024 (34 programs)
  [22/36] musor.tv (en) - MTVGlobal.uk - Dec 15, 2024 (38 programs)
  [23/36] musor.tv (en) - MTV90s.uk - Dec 16, 2024 (10 programs)
  [24/36] musor.tv (en) - MTV90s.uk - Dec 15, 2024 (10 programs)
  [25/36] musor.tv (en) - MTV00s.uk - Dec 16, 2024 (8 programs)
  [26/36] musor.tv (en) - MTV00s.uk - Dec 15, 2024 (11 programs)
  [27/36] musor.tv (en) - FilmBoxArthouse.nl - Dec 16, 2024 (21 programs)
  [28/36] musor.tv (en) - FilmBoxArthouse.nl - Dec 15, 2024 (27 programs)
  [29/36] musor.tv (en) - FightBox.nl - Dec 16, 2024 (24 programs)
  [30/36] musor.tv (en) - FightBox.nl - Dec 15, 2024 (33 programs)
  [31/36] musor.tv (en) - ExtremeSportsChannel.nl - Dec 16, 2024 (20 programs)
  [32/36] musor.tv (en) - ExtremeSportsChannel.nl - Dec 15, 2024 (25 programs)
  [33/36] musor.tv (en) - EnglishClubTV.uk - Dec 16, 2024 (134 programs)
  [34/36] musor.tv (en) - EnglishClubTV.uk - Dec 15, 2024 (129 programs)
  [35/36] musor.tv (en) - EEurope.nl - Dec 16, 2024 (26 programs)
  [36/36] musor.tv (en) - EEurope.nl - Dec 15, 2024 (32 programs)
  saving to "guide.xml"...
  done in 00h 02m 35s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-15 18:52:30 +07:00
freearhey
9f89cd2160 Upgrade dependencies 2024-12-15 07:25:39 +03:00
freearhey
5f8f2509c1 Update validate.test.ts 2024-12-15 06:17:31 +03:00
freearhey
ba47fb481c Upgrade tsx package 2024-12-15 06:10:37 +03:00
freearhey
0c048691df Update queueCreator.ts 2024-12-15 06:02:22 +03:00
Toha
c54509f95e
Update sky.com guide.
Test:

```sh
npm test -- /sky.com

> test
> run-script-os /sky.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand /sky.com

 PASS  sites/sky.com/sky.com.test.js
  √ can generate valid url (3 ms)
  √ can parse response (11 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.533 s, estimated 4 s
Ran all test suites matching /\\sky.com/i.
```

Grab:

```sh
npm run grab -- --site=sky.com

> grab
> npx tsx scripts/commands/epg/grab.ts --site=sky.com

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: sky.com
loading channels...
  found 558 channel(s)
run #1:
  [1/1116] sky.com (en) - 1009 - Dec 14, 2024 (35 programs)
  [2/1116] sky.com (en) - 1009 - Dec 15, 2024 (34 programs)
  ...
  [1115/1116] sky.com (en) - SkySportsNews.uk - Dec 15, 2024 (26 programs)
  [1116/1116] sky.com (en) - TLCHD.uk - Dec 14, 2024 (30 programs)
  saving to "guide.xml"...
  done in 00h 04m 32s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-15 03:46:36 +07:00
Toha
70e37c6760
Update virgintvgo.virginmedia.com guide.
Test:

```sh
npm test -- virgintvgo.virginmedia.com

> test
> run-script-os virgintvgo.virginmedia.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand virgintvgo.virginmedia.com

 PASS  sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.test.js
  √ can generate valid url (3 ms)
  √ can parse response (1028 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        4.181 s, estimated 5 s
Ran all test suites matching /virgintvgo.virginmedia.com/i.
```

Grab:

```sh
npm run grab -- --site=virgintvgo.virginmedia.com

> grab
> npx tsx scripts/commands/epg/grab.ts --site=virgintvgo.virginmedia.com

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: virgintvgo.virginmedia.com
loading channels...
  found 238 channel(s)
run #1:
  [1/476] virgintvgo.virginmedia.com (en) - 138 - Dec 14, 2024 (8 programs)
  [2/476] virgintvgo.virginmedia.com (en) - 138 - Dec 15, 2024 (8 programs)
  ...
  [475/476] virgintvgo.virginmedia.com (en) - 195 - Dec 15, 2024 (39 programs)
  [476/476] virgintvgo.virginmedia.com (en) - 195 - Dec 14, 2024 (40 programs)
  saving to "guide.xml"...
  done in 00h 08m 57s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-14 23:36:26 +07:00
PopeyeTheSai10r
581f5e0ca9
Merge pull request #2499 from tohenk/fix/tvarenasport.hr
Update tvarenasport.hr guide.
2024-12-10 15:38:07 -08:00
PopeyeTheSai10r
b4ca127825
Merge pull request #2500 from tohenk/fix/startimestv.com
Update startimestv.com guide.
2024-12-10 15:37:37 -08:00
Toha
769379a707
Update startimestv.com guide.
Test:

```sh
npm test -- startimestv.com

> test
> run-script-os startimestv.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand startimestv.com

 PASS  sites/startimestv.com/startimestv.com.test.js
  √ can generate valid url (3 ms)
  √ can parse response (114 ms)
  √ can handle empty guide (2 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        4.618 s, estimated 5 s
Ran all test suites matching /startimestv.com/i.
```

Grab:

```sh
npm run grab -- --site=startimestv.com

> grab
> npx tsx scripts/commands/epg/grab.ts --site=startimestv.com

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: startimestv.com
loading channels...
  found 77 channel(s)
run #1:
  [1/154] startimestv.com (en) - 648 - Dec 10, 2024 (17 programs)
  [2/154] startimestv.com (en) - 648 - Dec 11, 2024 (18 programs)
  ...
  [153/154] startimestv.com (pt) - DisneyChannel.pt - Dec 11, 2024 (61 programs)
  [154/154] startimestv.com (en) - ZeeOneAfrica.za - Dec 10, 2024 (22 programs)
  saving to "guide.xml"...
  done in 00h 01m 02s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-10 22:59:14 +07:00
David Claeys
0cda076648
Merge branch 'iptv-org:master' into orangetv.orange.es 2024-12-10 08:57:02 +01:00
Toha
37505d391b
Update tvarenasport.hr guide.
It is now derived from tvarenasport.com.

Test:

```sh
npm test -- tvarenasport.com

> test
> run-script-os tvarenasport.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvarenasport.com

 PASS  sites/tvarenasport.com/tvarenasport.com.test.js (5.391 s)
  √ can generate valid url (3 ms)
  √ can parse response (877 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        5.555 s, estimated 6 s
Ran all test suites matching /tvarenasport.com/i.
```

```sh
npm test -- tvarenasport.hr

> test
> run-script-os tvarenasport.hr

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvarenasport.hr

 PASS  sites/tvarenasport.hr/tvarenasport.hr.test.js (5.578 s)
  √ can generate valid url (4 ms)
  √ can parse response (327 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        5.774 s
Ran all test suites matching /tvarenasport.hr/i.
```

Grab:

```sh
npm run grab -- --site=tvarenasport.hr

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvarenasport.hr

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvarenasport.hr
loading channels...
  found 10 channel(s)
run #1:
  [1/20] tvarenasport.hr (hr) - ArenaSport1.hr - Dec 10, 2024 (17 programs)
  [2/20] tvarenasport.hr (hr) - ArenaSport1.hr - Dec 11, 2024 (17 programs)
  ...
  [19/20] tvarenasport.hr (hr) - ArenaSport2.hr - Dec 11, 2024 (12 programs)
  [20/20] tvarenasport.hr (hr) - ArenaSport2.hr - Dec 10, 2024 (12 programs)
  saving to "guide.xml"...
  done in 00h 00m 11s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-10 08:17:23 +07:00
Aleksandr Statciuk
32c32206a0
Update SITES.md 2024-12-09 23:26:51 +03:00
PopeyeTheSai10r
f9c8fc1b2d
Merge pull request #2496 from tohenk/fix/mytelly.co.uk
Update mytelly.co.uk guide.
2024-12-08 07:13:22 -08:00
Toha
aa04d9482e
Fetch detailed guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-07 23:49:27 +07:00
PopeyeTheSai10r
0e0d2f06b4
Merge pull request #2495 from tohenk/fix/tvarenasport.com
Update tvarenasport.com guide.
2024-12-07 08:48:51 -08:00
Toha
81509d07c5
Refactor fetch worker as async function.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-07 21:41:30 +07:00
Toha
4aa23fa862
Update mytelly.co.uk guide.
Test:

```sh
npm test -- mytelly.co.uk

> test
> run-script-os mytelly.co.uk

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand mytelly.co.uk

 PASS  sites/mytelly.co.uk/mytelly.co.uk.test.js
  √ can generate valid url (4 ms)
  √ can parse response (135 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        4.146 s, estimated 5 s
Ran all test suites matching /mytelly.co.uk/i.
```

Grab:

```sh
npm run grab -- --site=mytelly.co.uk

> grab
> npx tsx scripts/commands/epg/grab.ts --site=mytelly.co.uk

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: mytelly.co.uk
loading channels...
  found 488 channel(s)
run #1:
  [1/976] mytelly.co.uk (en) - 63/mtv-xmas - Dec 7, 2024 (14 programs)
  [2/976] mytelly.co.uk (en) - 63/mtv-xmas - Dec 8, 2024 (11 programs)
  ...
  [975/976] mytelly.co.uk (en) - TNTSports6.uk - Dec 8, 2024 (3 programs)
  [976/976] mytelly.co.uk (en) - SkySportsMix.uk - Dec 8, 2024 (17 programs)
  saving to "guide.xml"...
  done in 00h 04m 16s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-07 21:07:16 +07:00
Toha
34da0a19eb
Update tvarenasport.com guide.
Test:

```sh
npm test -- tvarenasport.com

> test
> run-script-os tvarenasport.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tvarenasport.com

 PASS  sites/tvarenasport.com/tvarenasport.com.test.js (5.89 s)
  √ can parse response (977 ms)
  √ can handle empty guide

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        6.097 s
Ran all test suites matching /tvarenasport.com/i.
```

Grab:

```sh
npm run grab -- --site=tvarenasport.com

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tvarenasport.com

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tvarenasport.com
loading channels...
  found 14 channel(s)
run #1:
  [1/28] tvarenasport.com (sr) - ArenaSport1.rs - Dec 7, 2024 (16 programs)
  [2/28] tvarenasport.com (sr) - ArenaSport1.rs - Dec 8, 2024 (14 programs)
  ...
  [27/28] tvarenasport.com (sr) - ArenaSport1Premium.rs - Dec 8, 2024 (17 programs)
  [28/28] tvarenasport.com (sr) - ArenaSport1Premium.rs - Dec 7, 2024 (19 programs)
  saving to "guide.xml"...
  done in 00h 00m 29s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-07 17:07:29 +07:00
PopeyeTheSai10r
ce4f3e6935
Merge pull request #2494 from tohenk/fix/programme.tvb.com
Update programme.tvb.com guide.
2024-12-06 17:07:33 -08:00
PopeyeTheSai10r
dbee67e132
Merge pull request #2432 from LITUATUI/patch-6
Update nostv.pt.channels.xml with 2 new channels
2024-12-06 17:05:20 -08:00
Toha
f9515b3962
Update programme.tvb.com guide.
Test:

```sh
npm test -- programme.tvb.com

> test
> run-script-os programme.tvb.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand programme.tvb.com

 PASS  sites/programme.tvb.com/programme.tvb.com.test.js (5.14 s)
  √ can generate valid url (4 ms)
  √ can parse response (en) (41 ms)
  √ can parse response (zh) (2 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       4 passed, 4 total
Snapshots:   0 total
Time:        5.391 s
Ran all test suites matching /programme.tvb.com/i.
```

Grab:

```sh
npm run grab -- --site=programme.tvb.com --lang=en

> grab
> npx tsx scripts/commands/epg/grab.ts --site=programme.tvb.com --lang=en

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: programme.tvb.com
  lang: en
loading channels...
  found 4 channel(s)
run #1:
  [1/8] programme.tvb.com (en) - B - Dec 6, 2024 (37 programs)
  [2/8] programme.tvb.com (en) - B - Dec 7, 2024 (33 programs)
  [3/8] programme.tvb.com (en) - TVBNewsChannel.hk - Dec 7, 2024 (48 programs)
  [4/8] programme.tvb.com (en) - TVBNewsChannel.hk - Dec 6, 2024 (50 programs)
  [5/8] programme.tvb.com (en) - Pearl.hk - Dec 7, 2024 (32 programs)
  [6/8] programme.tvb.com (en) - Pearl.hk - Dec 6, 2024 (37 programs)
  [7/8] programme.tvb.com (en) - Jade.hk - Dec 7, 2024 (36 programs)
  [8/8] programme.tvb.com (en) - Jade.hk - Dec 6, 2024 (48 programs)
  saving to "guide.xml"...
  done in 00h 00m 03s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-06 20:58:13 +07:00
Ismaël Moret
f6815932dc
Merge pull request #2493 from mapi68/master
Fix mediaset.it link in SITES.md
2024-12-05 13:03:54 +01:00
Aleksandr Statciuk
ca95a7aaec
Update nostv.pt.channels.xml 2024-12-05 12:18:19 +03:00
PopeyeTheSai10r
581441834a
Merge pull request #2491 from tohenk/fix/tv.nu
Update tv.nu guide.
2024-12-04 18:46:29 -08:00
PopeyeTheSai10r
4ea82f7738
Merge pull request #2492 from tohenk/fix/starhubtvplus.com
Update starhubtvplus.com guide.
2024-12-04 18:44:38 -08:00
mapi68
bac72f5044
Fix mediaset.it link in SITES.md 2024-12-05 02:51:29 +01:00
Toha
4c706f49a4
Update starhubtvplus.com guide.
Test:

```sh
npm test -- starhubtvplus.com

> test
> run-script-os starhubtvplus.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand starhubtvplus.com

 PASS  sites/starhubtvplus.com/starhubtvplus.com.test.js
  √ can generate valid url (3 ms)
  √ can parse response (3 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        4.337 s
Ran all test suites matching /starhubtvplus.com/i.
```

Grab:

```sh
npm run grab -- --site=starhubtvplus.com --lang=en

> grab
> npx tsx scripts/commands/epg/grab.ts --site=starhubtvplus.com --lang=en

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: starhubtvplus.com
  lang: en
loading channels...
  found 116 channel(s)
run #1:
  [1/232] starhubtvplus.com (en) - 7c0ee1eb-5f74-4f5a-a338-69eb125badb4 - Dec 4, 2024 (26 programs)
  [2/232] starhubtvplus.com (en) - 7c0ee1eb-5f74-4f5a-a338-69eb125badb4 - Dec 5, 2024 (26 programs)
  ...
  [231/232] starhubtvplus.com (en) - 210ba103-0d19-4b26-bb9f-36d531d7471f - Dec 5, 2024 (39 programs)
  [232/232] starhubtvplus.com (en) - 210ba103-0d19-4b26-bb9f-36d531d7471f - Dec 4, 2024 (39 programs)
  saving to "guide.xml"...
  done in 00h 00m 22s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-04 20:56:00 +07:00
Toha
9c6978deba
Update tv.nu guide.
Test:

```sh
npm test -- tv.nu

> test
> run-script-os tv.nu

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand tv.nu

 PASS  sites/tv.nu/tv.nu.test.js (6.72 s)
  √ can generate valid url (5 ms)
  √ can parse response (7 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        7.246 s
Ran all test suites matching /tv.nu/i.
```

Grab:

```sh
npm run grab -- --site=tv.nu

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tv.nu

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tv.nu
loading channels...
  found 199 channel(s)
run #1:
  [1/398] tv.nu (da) - dk4.dk - Dec 4, 2024 (41 programs)
  [2/398] tv.nu (da) - dk4.dk - Dec 5, 2024 (43 programs)
  ...
  [397/398] tv.nu (sv) - VSportUltraHD.se - Dec 4, 2024 (7 programs)
  [398/398] tv.nu (sv) - VSportUltraHD.se - Dec 5, 2024 (7 programs)
  saving to "guide.xml"...
  done in 00h 02m 40s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-04 12:59:29 +07:00
PopeyeTheSai10r
864e0ac2c4
Merge pull request #2486 from tohenk/fix/license
Fix package license as UNLICENSED.
2024-12-03 17:06:51 -08:00
Ismaël Moret
d16a81e5a1
Merge pull request #2487 from tohenk/fix/dependencies
Bump libxmljs2 to 0.35.0.
2024-12-03 13:49:55 +01:00
Toha
964590ac80
Bump libxmljs2 to 0.35.0.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-03 00:17:35 +07:00
Toha
ca64f1fb23
Fix package license as UNLICENSED.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-03 00:06:16 +07:00
Aleksandr Statciuk
296d6162ec
Merge pull request #2480 from iptv-org/BellezaEmporium-patch-1
pickx.be : automatic API URL finding
2024-12-02 20:05:15 +03:00
Ismaël Moret
bdb3a1c617
Update pickx.be.config.js 2024-12-02 23:22:26 +07:00
David Claeys
b9af697c17 edit channel list 2024-12-02 15:46:28 +01:00
David Claeys
2bd9b22520 add provider tests 2024-12-02 15:41:50 +01:00
Ismaël Moret
3ff01091c8
Merge pull request #2481 from tohenk/fix/tv.yandex.ru
Update tv.yandex.ru guide.
2024-12-02 15:27:33 +01:00
David Claeys
b275a318bd Merge branch 'orangetv.orange.es' of https://github.com/davidclaeysquinones/epg into orangetv.orange.es 2024-12-02 13:59:07 +01:00
David Claeys
ffd195141f fix issues parser 2024-12-02 13:59:03 +01:00
David Claeys
62d02baa88
Merge branch 'iptv-org:master' into orangetv.orange.es 2024-12-02 11:31:51 +01:00
David Claeys
f628a8035a improvement provider 2024-12-01 16:24:55 +01:00
David Claeys
69259aee97 edit to channels file 2024-12-01 16:14:10 +01:00
Toha
975abcd1b4
Update test cookies and api URL.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-01 07:32:26 +07:00
PopeyeTheSai10r
1883338c0a
Merge pull request #2482 from tohenk/fix/rotana.net
Update rotana.net guide.
2024-11-30 10:51:24 -08:00
Aleksandr Statciuk
047b9db726
Merge pull request #2483 from tohenk/fix/osn.com
Update osn.com guide.
2024-11-30 17:41:53 +03:00
David Claeys
a3314923f0 add orangetv.es 2024-11-29 13:35:09 +01:00
Ismaël Moret
da18b70ddb
Merge pull request #2472 from tohenk/id-guides/firstmedia.com
Update firstmedia.com guide.
2024-11-28 17:51:10 +01:00
Ismaël Moret
3856ad2f3f
Merge pull request #2471 from tohenk/id-guides/dens.tv
Update dens.tv guide.
2024-11-28 17:50:46 +01:00
Aleksandr Statciuk
e5f0850b3b
Merge pull request #2477 from tohenk/id-guides/visionplus.id
Update visionplus.id guide.
2024-11-27 17:43:40 +03:00
Toha
1d3008d144
Update osn.com guide.
Test

```
npm test -- osn.com

> test
> run-script-os osn.com

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand osn.com

 PASS  sites/osn.com/osn.com.test.js (5.194 s)
  √ can generate valid request headers (6 ms)
  √ can generate valid url (2 ms)
  √ can parse response (ar) (112 ms)
  √ can parse response (en) (9 ms)
  √ can handle empty guide (1 ms)

Test Suites: 1 passed, 1 total
Tests:       5 passed, 5 total
Snapshots:   0 total
Time:        5.499 s
Ran all test suites matching /osn.com/i.
```

Grab

```
npm run grab -- --site=osn.com --lang=ar

> grab
> npx tsx scripts/commands/epg/grab.ts --site=osn.com --lang=ar

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: osn.com
  lang: ar
loading channels...
  found 59 channel(s)
run #1:
  [1/118] osn.com (ar) - DWR - Nov 27, 2024 (24 programs)
  [2/118] osn.com (ar) - DWR - Nov 28, 2024 (24 programs)
  ...
  [117/118] osn.com (ar) - OSNYahalaBilArabi.ae - Nov 28, 2024 (29 programs)
  [118/118] osn.com (ar) - TheFilipinoChannelMiddleEast.us - Nov 28, 2024 (30 programs)
  saving to "guide.xml"...
  done in 00h 01m 23s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-27 20:42:06 +07:00
Toha
11c618c3e5
Increase fetch worker.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-27 12:13:05 +07:00
PopeyeTheSai10r
78dad4cfb4
Merge pull request #2468 from Mauricio300808/master
Adding headers to tvtv.us
2024-11-26 16:51:18 -08:00
Toha
e09316dc63
Update rotana.net guide.
Test

```shell
npm test -- rotana.net

> test
> run-script-os rotana.net

> test:win32
> SET "TZ=Pacific/Nauru" && npx jest --runInBand rotana.net

 PASS  sites/rotana.net/rotana.net.test.js (6.081 s)
  √ can use defined user agent (3 ms)
  √ can generate valid english url (1 ms)
  √ can generate valid arabic url
  √ can parse english response (630 ms)
  √ can parse arabic response (560 ms)
  √ can handle empty guide (3 ms)

Test Suites: 1 passed, 1 total
Tests:       6 passed, 6 total
Snapshots:   0 total
Time:        6.406 s, estimated 8 s
Ran all test suites matching /rotana.net/i.
```

Grab

```shell
npm run grab -- --site=rotana.net --lang=en

> grab
> npx tsx scripts/commands/epg/grab.ts --site=rotana.net --lang=en

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: rotana.net
  lang: en
loading channels...
  found 16 channel(s)
run #1:
  [1/32] rotana.net (en) - 432 - Nov 26, 2024 (24 programs)
  [2/32] rotana.net (en) - 432 - Nov 27, 2024 (23 programs)
  [3/32] rotana.net (en) - 433 - Nov 27, 2024 (14 programs)
  [4/32] rotana.net (en) - LBC.sa - Nov 27, 2024 (19 programs)
  [5/32] rotana.net (en) - LBC.sa - Nov 26, 2024 (20 programs)
  [6/32] rotana.net (en) - 433 - Nov 26, 2024 (14 programs)
  [7/32] rotana.net (en) - AlResalah.sa - Nov 27, 2024 (54 programs)
  [8/32] rotana.net (en) - RotanaAflam.sa - Nov 26, 2024 (16 programs)
  [9/32] rotana.net (en) - AlResalah.sa - Nov 26, 2024 (57 programs)
  [10/32] rotana.net (en) - MPlusHD.sa - Nov 27, 2024 (2 programs)
  [11/32] rotana.net (en) - MPlusHD.sa - Nov 26, 2024 (240 programs)
  [12/32] rotana.net (en) - RotanaComedy.sa - Nov 26, 2024 (13 programs)
  [13/32] rotana.net (en) - RotanaClip.sa - Nov 27, 2024 (2 programs)
  [14/32] rotana.net (en) - RotanaClip.sa - Nov 26, 2024 (246 programs)
  [15/32] rotana.net (en) - RotanaClassic.sa - Nov 27, 2024 (18 programs)
  [16/32] rotana.net (en) - RotanaClassic.sa - Nov 26, 2024 (18 programs)
  [17/32] rotana.net (en) - RotanaCinemaKSA.sa - Nov 27, 2024 (13 programs)
  [18/32] rotana.net (en) - RotanaCinemaKSA.sa - Nov 26, 2024 (14 programs)
  [19/32] rotana.net (en) - RotanaCinemaEgypt.eg - Nov 27, 2024 (12 programs)
  [20/32] rotana.net (en) - RotanaCinemaEgypt.eg - Nov 26, 2024 (13 programs)
  [21/32] rotana.net (en) - RotanaAmerica.sa - Nov 27, 2024 (18 programs)
  [22/32] rotana.net (en) - RotanaAmerica.sa - Nov 26, 2024 (15 programs)
  [23/32] rotana.net (en) - RotanaAflam.sa - Nov 27, 2024 (16 programs)
  [24/32] rotana.net (en) - RotanaKids.sa - Nov 26, 2024 (83 programs)
  [25/32] rotana.net (en) - RotanaKhalijia.sa - Nov 26, 2024 (23 programs)
  [26/32] rotana.net (en) - RotanaDrama.sa - Nov 27, 2024 (26 programs)
  [27/32] rotana.net (en) - RotanaMusic.sa - Nov 27, 2024 (0 programs)
  [28/32] rotana.net (en) - RotanaMusic.sa - Nov 26, 2024 (0 programs)
  [29/32] rotana.net (en) - RotanaKhalijia.sa - Nov 27, 2024 (24 programs)
  [30/32] rotana.net (en) - RotanaDrama.sa - Nov 26, 2024 (26 programs)
  [31/32] rotana.net (en) - RotanaKids.sa - Nov 27, 2024 (83 programs)
  [32/32] rotana.net (en) - RotanaComedy.sa - Nov 27, 2024 (13 programs)
  saving to "guide.xml"...
  done in 00h 00m 49s
```

Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-27 03:48:25 +07:00
Ismaël Moret
b311572748
Merge pull request #2470 from tohenk/id-guides/cubmu.com
Update cubmu.com guide.
2024-11-26 19:01:19 +01:00
Ismaël Moret
f2c8b78cf9
Merge pull request #2473 from tohenk/id-guides/indihometv.com
Update indihometv.com guide.
2024-11-26 19:00:33 +01:00
Ismaël Moret
683d153acb
Merge pull request #2474 from tohenk/id-guides/mncvision.id
Update mncvision.id guide.
2024-11-26 18:59:58 +01:00
Ismaël Moret
332fda82d2
Merge pull request #2476 from tohenk/id-guides/vidio.com
Update vidio.com guide.
2024-11-26 18:59:11 +01:00
Toha
29bdcc94c3
Update tv.yandex.ru guide.
```sh
npm run grab -- --site=tv.yandex.ru

> grab
> npx tsx scripts/commands/epg/grab.ts --site=tv.yandex.ru

starting...
config:
  output: guide.xml
  maxConnections: 1
  gzip: false
  site: tv.yandex.ru
loading channels...
  found 1 channel(s)
run #1:
  [1/1] tv.yandex.ru (ru) - 3ABNRussia.ru - Nov 26, 2024 (86 programs)
  saving to "guide.xml"...
  done in 00h 01m 22s
```
2024-11-26 21:34:47 +07:00
Toha
e54b28ba14
Get channels using Api.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-26 20:47:55 +07:00
Ismaël Moret
61afe090b6
Merge pull request #2458 from klausellus-wallace/feature/extend-web.magentatv.de-information
extend extracted information for web.magentatv.de
2024-11-26 13:47:33 +01:00
Ismaël Moret
3fdd0953e0
Merge pull request #2475 from tohenk/id-guides/moji.id
Update moji.id guide.
2024-11-26 12:53:29 +01:00
Ismaël Moret
d15911006e
Merge pull request #2430 from davidclaeysquinones/issue_2368
Update pickx provider url
2024-11-26 11:37:33 +01:00
Ismaël Moret
152764276b
Merge pull request #2467 from shayypy/master
feat: `nhl.com` site
2024-11-26 11:35:56 +01:00
Aleksandr Statciuk
6261018ff8
Merge pull request #2478 from diogotcorreia/chore-upgrade-epg-grabber
chore: upgrade epg-grabber to 0.37.2
2024-11-26 13:35:13 +03:00
Aleksandr Statciuk
bc59424bb9
Update SITES.md 2024-11-25 19:31:22 +03:00
PopeyeTheSai10r
5ffe5b492a
Merge pull request #2457 from rchaud/feature/fix-ontvtonight
Fix ontvtonight.com
2024-11-25 07:50:06 -08:00
freearhey
61b202e89a Update readme.md 2024-11-25 18:05:10 +03:00
Diogo Correia
46b096821f
chore: upgrade epg-grabber to 0.37.2
This fixes an issue with image URLs not being escaped and therefore
resulting in invalid XML.

See https://github.com/freearhey/epg-grabber/pull/21
2024-11-25 12:08:33 +01:00
Toha
9d6b1c3a07
Bump dens.tv api to dens3.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-24 23:12:46 +07:00
Toha
af72a08e5f
Update firstmedia.com guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-24 21:07:18 +07:00
Toha
1f8d82e869
Set fetch days to 2 days.
In case of the date is behind current time zone, setting days to 1 day only
yield previous day guide so it becomes expired.

Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-24 20:47:23 +07:00
Toha
2d03b36bb3
Update indihometv.com guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-24 20:47:09 +07:00
Toha
f6d53587f3
Parse season and episode for visionplus.id.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-24 17:01:19 +07:00
Toha
9ab13c3583
Update visionplus.id guide.
This site now can serve id and en language.

Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-23 22:54:08 +07:00
Toha
4c6e9a85bf
Update vidio.com guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-23 22:51:24 +07:00
Toha
dd5e3aa18a
Update moji.id guide.
Change site language to id and fix test.

Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-23 22:48:33 +07:00
Toha
e54a15e3f8
Update mncvision.id guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-23 22:45:14 +07:00
Toha
8693a1b062
Update dens.tv guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-23 22:38:12 +07:00
Toha
684762ef3e
Update cubmu.com guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2024-11-23 22:36:05 +07:00
shay
b491620697 chore: remove confusing category determination
it's all sports in the end
2024-11-21 18:52:15 -06:00
shay
5d33db08b8 feat: nhl.com site
I was having trouble with the extant sites for this channel so I decided to add a source for the league's own guide. Unfortunately it's missing images since I don't know where they need to be hosted :(
2024-11-21 18:30:57 -06:00
Mauricio300808
4979d2f178
Merge pull request #1 from Mauricio300808/Fix-tvtv.us-issue.-adding-headers
Fix tvtv.us issue. adding headers
2024-11-20 15:43:15 -06:00
Mauricio300808
ea02e243c6
Fix tvtv.us issue. adding headers
Fix tvtv.us issue. adding headers
2024-11-20 15:41:59 -06:00
David Claeys
5fb5e4c18b fix provider url 2024-11-08 13:02:35 +01:00
Lukas Wagner
3a8ea65cd4 extend extracted information for web.magentatv.de
Now populates:
 - season
 - episode
 - director
 - producers
 - adapters
 - country
 - date
 - urls
2024-11-05 18:38:18 +01:00
Roberto Chaud
28b12e0635 fix ontvtonight 2024-10-31 14:06:14 -05:00
Aleksandr Statciuk
7610f7b9f5
Merge pull request #2409 from Animenosekai/master
Adding the `s.mxtv.jp` and `www.skyperfectv.co.jp` sites and mapping IDs for `tvguide.myjcom.jp`
2024-10-14 18:34:00 +03:00
PopeyeTheSai10r
a3e7661f95
Merge pull request #2447 from Arkina1234/patch-1
Update tvpassport.com.channels.xml
2024-10-14 03:50:25 -07:00
Ismaël Moret
3b7a36b6b3 Merge remote-tracking branch 'origin/master' into pr/Arkina1234/2447 2024-10-14 09:42:45 +00:00
Ismaël Moret
3559fa7206 LF -> CRLF 2024-10-14 09:41:57 +00:00
Animenosekai
aa77d8abe6 [fix] fixing skyperfectv.co.jp 2024-10-13 21:38:15 +02:00
Anise
276414bc63
Merge branch 'iptv-org:master' into master 2024-10-13 21:12:13 +02:00
PopeyeTheSai10r
fd382db08d
Merge pull request #2429 from davidclaeysquinones/telenet.tv
Telenet.tv
2024-10-11 20:23:20 -07:00
PopeyeTheSai10r
2241bc261f
Merge pull request #2441 from Kamala-Harris2024/cleanup
`tv.blue.ch` cleanup
2024-10-09 17:07:56 -07:00
Arkina
47dc060370
Update tvpassport.com.channels.xml 2024-10-08 05:03:36 -04:00
Arkina
d388019d5e
Update tvpassport.com.channels.xml 2024-10-08 04:53:14 -04:00
davidclaeysquinones
4fb094f958
Merge branch 'iptv-org:master' into telenet.tv 2024-10-04 11:58:13 +02:00
davidclaeysquinones
8f743fb091
Merge branch 'iptv-org:master' into issue_2368 2024-10-04 11:54:15 +02:00
Alstruit
713dbf60a1
Merge pull request #2442 from Kamala-Harris2024/smth 2024-10-01 22:24:07 -05:00
Ismaël Moret
d90c7a54b9
Merge pull request #2439 from aarubui/master
add hoy.tv
2024-09-29 18:00:41 +02:00
Ismaël Moret
225b88ebc1
Merge pull request #2435 from Cringe-Arab/more-channels
CBS MeTV and NBC channels for `tvpassport.com`
2024-09-29 17:59:33 +02:00
PopeyeTheSai10r
48a95e8e63
Merge pull request #2431 from LITUATUI/patch-5
Update meo.pt.channels.xml with 2 new channels
2024-09-29 02:43:04 -07:00
PopeyeTheSai10r
53f7672966
Merge pull request #2424 from harunmahfud/feature/update-vidio-scripts-and-channels
Update Vidio Scripts and Channels
2024-09-28 19:25:56 -07:00
PopeyeTheSai10r
9c8353cc73
Merge pull request #2425 from harunmahfud/fix/mewatch-sg
Fix mewatch.sg
2024-09-27 18:53:45 -07:00
Cringe-Arab
e92787862c
Update SITES.md 2024-09-25 15:42:01 +03:00
CringeArab
fbff9fe72b cleanup 2024-09-25 15:25:58 +03:00
aarubui
20aa77f179 add hoy.tv 2024-09-24 10:06:29 +10:00
Pedro Lima
fb130f8ef5
Update meo.pt.channels.xml 2024-09-18 10:16:07 +01:00
Pedro Lima
4acd7bbcda
Update nostv.pt.channels.xml 2024-09-18 10:15:10 +01:00
CringeArab
8567f94606 code review changes 2024-09-15 10:45:22 +03:00
CringeArab
bfe1340236 CBS MeTV NBC 2024-09-14 20:56:13 +03:00
PopeyeTheSai10r
c69f3c93b1
Merge pull request #2427 from Cringe-Arab/more-channels
FOX and ABC channels for `tvpassport.com`
2024-09-13 21:53:44 -07:00
PopeyeTheSai10r
0ebcc922f8
Merge pull request #2413 from iptv-org/BellezaEmporium-patch-1
Delete sites/disneystar.com directory
2024-09-13 21:53:02 -07:00
Ismaël Moret
b3966a11d4
Merge branch 'master' into BellezaEmporium-patch-1 2024-09-08 14:10:06 +02:00
Ismaël Moret
58aec98334
Update SITES.md 2024-09-08 14:09:49 +02:00
Pedro Lima
faaa83a553
Update nostv.pt.channels.xml with 2 new channels
Channel Now and Sport TV 7.
2024-09-08 01:41:28 +01:00
Pedro Lima
46ee9deb3d
Update meo.pt.channels.xml with 2 new channels
Channel Now and Sport TV 7.
2024-09-08 01:35:19 +01:00
Mahfud Harun
e7335a8662 Update expected URL in test
update the `hour` param to 12 because the default TZ in test is `Pacific/Nauru` (GMT+12)
2024-09-08 07:09:35 +07:00
davidclaeysquinones
0cf0421731
Merge branch 'iptv-org:master' into issue_2368 2024-09-07 22:19:49 +02:00
davidclaeysquinones
cb74f26744
Merge branch 'iptv-org:master' into telenet.tv 2024-09-07 22:19:21 +02:00
freearhey
4e3b06a86e Update SITES.md 2024-09-07 22:29:03 +03:00
CringeArab
696af9445e fox lies channels 2024-09-07 19:42:06 +03:00
CringeArab
b25303d4b8 abc fake news 2024-09-07 18:16:40 +03:00
Dum4G
a1dbe00f5f
Merge pull request #2423 from Cringe-Arab/more-channels
more channels added for `tvpassport.com`
2024-09-07 17:10:14 +03:00
CringeArab
649d358c0e code review changes 2024-09-04 17:52:36 +03:00
Mahfud Harun
a7a4b3c95b Use timezone offset to get programme list 2024-09-04 00:19:41 +07:00
Mahfud Harun
5600003128 Update channels.xml 2024-09-03 21:24:42 +07:00
Mahfud Harun
e3ae8f4292 Skip channel addition if no site_id was found 2024-09-03 21:24:22 +07:00
davidclaeysquinones
60d77bd797
Merge branch 'iptv-org:master' into telenet.tv 2024-09-03 11:47:20 +02:00
Mahfud Harun
b74954eb90
Update channels.xml 2024-09-02 23:45:17 +07:00
Mahfud Harun
1ccb266519
Skip all radio channels and duplicate channels 2024-09-02 23:45:05 +07:00
David Claeys
4ef4930f28 add additional theme channel 2024-09-02 15:48:51 +02:00
David Claeys
8075318ba0 update version url 2024-09-02 13:42:22 +02:00
Cringe-Arab
2484afa989
CBS News 24/7 2024-09-01 23:36:36 +03:00
CringeArab
56161b5301 more channels added 2024-09-01 13:47:37 +03:00
Animenosekai
badfc0a7cd [fix] changing incorrect xmltv_id for パチ・スロ サイトセブンTV in SkyPerfect! 2024-08-27 18:01:47 +02:00
Animenosekai
55ab874160 [update] add @BellezaEmporium code 2024-08-27 18:01:09 +02:00
Animenosekai
f641443a9d [update] change back the URLs 2024-08-25 16:37:26 +02:00
Animenosekai
74e40a8e6d [update] www.skyperfectv.co.jp -> skyperfectv.co.jp 2024-08-25 16:35:05 +02:00
Animenosekai
98fd78075f [update] revert yarn.lock changes 2024-08-25 16:25:59 +02:00
Ismaël Moret
eb12de48fd
Delete sites/disneystar.com directory
Disney/Star stopped giving TV Guides.
2024-08-14 11:55:13 +02:00
PopeyeTheSai10r
270e85cfae
Merge pull request #2410 from ToRvaLDz/master
Adding subtitle, catgory, season, episode,  thumb to mediasetinfinity.mediaset.it
2024-08-13 17:00:41 -07:00
Marco Migozzi
1a7c1cac4c Revert "Add .dockerignore file and Dockerfile, update .gitignore in /output directory"
This reverts commit 9d3623294e.
2024-08-12 14:04:06 +02:00
Marco Migozzi
9d3623294e Add .dockerignore file and Dockerfile, update .gitignore in /output directory 2024-08-02 15:48:27 +02:00
Animenosekai
c4783349b2 [update] use the new IDs 2024-08-01 22:27:28 +02:00
Marco Migozzi
793c74ca39 Refined program data extraction by adding parsing for season, episode, and high-resolution thumbnails. Enhanced data object to include category and optional description, thus improving data completeness and accuracy. 2024-08-01 14:09:16 +02:00
Animenosekai
8069622f59 [update] adding missing IDs to SkyPerfect! 2024-08-01 01:51:41 +02:00
Animenosekai
4bc62d1849 [update] adding new XMLTV-IDs to some JCOM channels 2024-08-01 01:50:54 +02:00
Animenosekai
b9e4d9483a [add] adding missing IDs to JCOM and Sky Perfect! 2024-08-01 00:33:38 +02:00
Animenosekai
c6bdfea482 [fix] fixing premium channels from www.skyperfectv.co.jp 2024-07-31 20:09:09 +02:00
Anise
ef3503c0ad
Merge branch 'iptv-org:master' into master 2024-07-31 18:28:03 +02:00
Animenosekai
d5b79b61fd [add] adding SkyPerfect 2024-07-31 18:27:36 +02:00
Animenosekai
acc18d1f07 [add] adding s.mxtv.jp 2024-07-31 14:24:51 +02:00
PopeyeTheSai10r
704b6b3583
Merge pull request #2381 from davidclaeysquinones/telenet.tv
Add program icons to Telenet.Tv icons
2024-07-30 20:13:50 -07:00
Animenosekai
84525ca40c [add] adding the IDs for MTV, Mystery Channel, Space Shower, MONDO, Nikkei CNBC, Pachinko Pachislo and GSTV [add] adding TSS from JCOM 2024-07-27 17:47:02 +02:00
davidclaeysquinones
9096014b64
Merge branch 'iptv-org:master' into telenet.tv 2024-07-24 14:12:30 +02:00
David Claeys
b627ec0f56 fix production endpoint in test 2024-07-24 14:11:55 +02:00
David Claeys
faa6fa6cd5 merge from master 2024-07-17 13:09:29 +02:00
David Claeys
6d8c08fa6b update version url 2024-07-17 13:01:19 +02:00
David Claeys
7d9c7dc20d update version url 2024-07-17 12:56:56 +02:00
PopeyeTheSai10r
85939cddfd
Merge pull request #2402 from iptv-org/patch-2024.06.1
Patch 2024.06.1
2024-06-29 20:04:03 -07:00
PopeyeTheSai10r
cd084edc9b
Merge pull request #2389 from iptv-org/add-skylife.co.kr
Add skylife.co.kr
2024-06-29 08:42:08 -07:00
PopeyeTheSai10r
a3b46c7a23
Merge pull request #2391 from iptv-org/add-awilime.com
Add awilime.com
2024-06-29 08:40:12 -07:00
PopeyeTheSai10r
b52ff68fd9
Merge pull request #2397 from iptv-org/fix-tvguide.com
Fix tvguide.com
2024-06-26 17:02:56 -07:00
davidclaeysquinones
a0e26763c9
Merge branch 'iptv-org:master' into telenet.tv 2024-06-26 14:46:12 +02:00
freearhey
1a703ce4ab Merge branch 'master' into patch-2024.06.1 2024-06-26 15:43:11 +03:00
freearhey
0973a6bd4f Upgrade dependencies 2024-06-26 15:41:30 +03:00
David Claeys
0b74e95558 code refractoring + fix tests 2024-06-25 13:56:04 +02:00
PopeyeTheSai10r
356bcf2120
Merge pull request #2388 from iptv-org/update-ontvtonight.com
Update ontvtonight.com
2024-06-25 00:39:56 -07:00
davidclaeysquinones
51244812c5
Merge branch 'iptv-org:master' into telenet.tv 2024-06-25 09:24:55 +02:00
freearhey
bb6771f539 Replaces icon with image 2024-06-24 16:49:35 +03:00
freearhey
1dd0f2f970 Update SITES.md
https://github.com/iptv-org/epg/issues/2398
https://github.com/iptv-org/epg/issues/2399
https://github.com/iptv-org/epg/issues/2400
2024-06-24 16:09:05 +03:00
freearhey
4c255ea7d8 Update tvguide.com.test.js 2024-06-24 15:59:19 +03:00
freearhey
5b376e916e Update SITES.md
https://github.com/iptv-org/epg/issues/2396
2024-06-24 15:57:08 +03:00
freearhey
95ad473a62 Update SITES.md
https://github.com/iptv-org/epg/issues/2395
2024-06-24 15:55:49 +03:00
freearhey
8b9a1f9f1d Update SITES.md
https://github.com/iptv-org/epg/issues/2394
2024-06-24 15:52:39 +03:00
freearhey
e52718ff56 Update SITES.md
https://github.com/iptv-org/epg/issues/2393
2024-06-24 15:49:41 +03:00
freearhey
f6e1a12ef2 Update SITES.md
https://github.com/iptv-org/epg/issues/2392
2024-06-24 15:47:52 +03:00
freearhey
9fbc6f4aa3 Update SITES.md 2024-06-24 15:21:54 +03:00
freearhey
241ffe358b Create readme.md 2024-06-24 15:21:50 +03:00
freearhey
2d6a5e0fd2 Create awilime.com.channels.xml 2024-06-24 15:21:45 +03:00
freearhey
85a9758533 Create awilime.com.config.js 2024-06-24 15:21:40 +03:00
freearhey
df0b4bda25 Create content.html 2024-06-24 15:21:35 +03:00
freearhey
dea1656a37 Create awilime.com.test.js 2024-06-24 15:21:31 +03:00
freearhey
6968d6f7c0 Update SITES.md 2024-06-24 13:46:09 +03:00
freearhey
983c92ce8e Create readme.md 2024-06-24 13:44:53 +03:00
freearhey
1d8bb576dc Create skylife.co.kr.channels.xml 2024-06-24 13:44:44 +03:00
freearhey
f94086afc7 Create skylife.co.kr.config.js 2024-06-24 13:44:37 +03:00
freearhey
ebee0d0b5f Create skylife.co.kr.test.js 2024-06-24 13:44:30 +03:00
freearhey
d3b5e65622 Create __data__/ 2024-06-24 13:44:20 +03:00
PopeyeTheSai10r
0eaff54a31
Merge pull request #2382 from iptv-org/Update_2024-06-05
Update web.magentatv.de.config.js & osn.com.config.js
2024-06-23 09:48:12 -07:00
Aleksandr Statciuk
18e1b1aabe
Merge pull request #2375 from davidclaeysquinones/issue_2368
update pickx provider
2024-06-22 20:03:29 +03:00
PopeyeTheSai10r
3a80661c6b Update web.magentatv.de.config.js
Fixes #2367
2024-06-22 08:02:26 -07:00
PopeyeTheSai10r
ae6cefd4b3
Merge pull request #2290 from xemles/patch-1
Update tvcesoir.fr.channels.xml
2024-06-22 07:30:32 -07:00
freearhey
4b915de665 Update SITES.md
https://github.com/iptv-org/epg/issues/2325
2024-06-22 17:28:50 +03:00
freearhey
33c14f36da Update SITES.md
https://github.com/iptv-org/epg/issues/2357
2024-06-22 17:10:44 +03:00
freearhey
13d2d84fd4 Update SITES.md
https://github.com/iptv-org/epg/issues/2358
https://github.com/iptv-org/epg/issues/2282
2024-06-22 17:08:50 +03:00
freearhey
3f62207d47 Update ontvtonight.com_us.channels.xml 2024-06-22 17:05:30 +03:00
freearhey
c1835ac2eb Update ontvtonight.com.config.js 2024-06-22 17:05:27 +03:00
freearhey
fee7c4b2ab Update SITES.md
https://github.com/iptv-org/epg/issues/2363
https://github.com/iptv-org/epg/issues/2361
https://github.com/iptv-org/epg/issues/2348
2024-06-22 16:55:44 +03:00
freearhey
73c4192b64 Update SITES.md
https://github.com/iptv-org/epg/issues/2365
2024-06-22 16:53:13 +03:00
freearhey
a69793064a Update SITES.md
https://github.com/iptv-org/epg/issues/2377
2024-06-22 16:49:06 +03:00
freearhey
9be9a35a6c Update SITES.md 2024-06-22 16:31:38 +03:00
freearhey
ffb999a7bc Merge branch 'master' of https://github.com/iptv-org/epg 2024-06-22 16:28:09 +03:00
freearhey
e2f96199b7 Update SITES.md 2024-06-22 16:28:00 +03:00
Alstruit
8f82e249a7
Merge pull request #2370 from singkie/patch-240429 2024-06-22 08:18:39 -05:00
freearhey
ceac5b280b Merge branch 'master' into pr/2370 2024-06-22 16:03:48 +03:00
PopeyeTheSai10r
06a4a8fe1d
Merge pull request #2383 from bradmurray/patch-1
Update ontvtonight.com_us.channels.xml
2024-06-19 09:27:53 -07:00
Brad Murray
0d8b4333e3
Update ontvtonight.com_us.channels.xml 2024-06-17 21:11:42 +00:00
PopeyeTheSai10r
297fd5b874
Merge pull request #2380 from apps-bilocom/patch-1
Update programme-tv.net.channels.xml
2024-06-16 09:56:34 -07:00
PopeyeTheSai10r
a186195795
Merge pull request #2374 from singkie/patch-1
Update vidio.com.channels.xml
2024-06-15 06:25:02 -07:00
PopeyeTheSai10r
4c3212de03
Merge pull request #2371 from iptv-org/Fix-tvprofil.com
Update tvprofil.com.config.js
2024-06-15 06:01:09 -07:00
David Claeys
9aae181496 update version url 2024-06-12 12:47:18 +02:00
Brad Murray
00f078dc75
Update ontvtonight.com_us.channels.xml 2024-06-08 19:23:11 +00:00
PopeyeTheSai10r
d9c138815d
Merge pull request #2379 from bradmurray/master
Added missing xmltv_ids to tvpassport and ontvtonight
2024-06-05 16:40:53 -07:00
David Claeys
d4abf29012 update version url 2024-06-03 15:30:12 +02:00
David Claeys
40fd3b9e1e fix version url 2024-06-03 08:40:18 +02:00
David Claeys
51694c0b23 update version path 2024-05-31 10:33:22 +02:00
David Claeys
80b70804ca add program icons 2024-05-29 10:25:21 +02:00
David Claeys
71b21dc42d Merge branch 'issue_2368' of https://github.com/davidclaeysquinones/epg into issue_2368 2024-05-29 09:08:10 +02:00
apps-bilocom
7e42eb0141
Update programme-tv.net.channels.xml
Remove old channels
Update Channels
2024-05-27 15:02:27 +02:00
David Claeys
79462c20bb update version url 2024-05-24 15:36:09 +02:00
Brad Murray
b3aacb3fa1
Update tvpassport.com.channels.xml
Added missing xmltv_ids
2024-05-23 02:02:24 +00:00
Brad Murray
9851f4e99f
Update ontvtonight.com_us.channels.xml
Added missing xmltv_ids
2024-05-23 02:01:27 +00:00
davidclaeysquinones
69a57edd3f
Merge branch 'iptv-org:master' into issue_2368 2024-05-15 10:27:44 +02:00
David Claeys
145bbbf356 update pickx provider 2024-05-14 13:56:37 +02:00
singkie
2cd911f294
Update vidio.com.channels.xml
add spotv indonesia
2024-05-14 12:20:37 +07:00
PopeyeTheSai10r
c7285cadc9
Merge pull request #2346 from jimmyfortinx/fix/french-channels-tvpassport
Update tvpassport.com channels languages
2024-05-10 23:59:35 -07:00
PopeyeTheSai10r
2be8cebc68 Update tvprofil.com.config.js
Fixes #2341
2024-05-10 20:11:25 -07:00
PopeyeTheSai10r
ca3bb355b0
Merge pull request #2289 from xemles/patch-2
Removed other channels due to most being played with hours of delay a…
2024-05-10 19:22:30 -07:00
PopeyeTheSai10r
8b5c618e89
Merge pull request #2336 from kontell/patch-2
Update sky.com.channels.xml
2024-05-10 17:55:48 -07:00
PopeyeTheSai10r
c3c0c26048
Merge pull request #2369 from davidclaeysquinones/issue_2368
#2368 fix version path pickx.be
2024-05-08 18:51:01 -07:00
Alstruit
8f15484315
Merge pull request #2329 from LITUATUI/patch-1
Update meo.pt.channels.xml
2024-05-08 07:22:17 -05:00
singkie
f4d108f668
Update visionplus.id.channels.xml 2024-05-08 08:03:53 +07:00
singkie
e91d6ccb5d
fix result visionplus.id.channels.xml 2024-05-08 07:48:00 +07:00
singkie
4b25e9ffcc
Update visionplus.id.channels.xml 2024-05-08 07:45:42 +07:00
David Claeys
79a6c2ea78 #2368 fix version path pickx.be 2024-05-07 12:55:21 +02:00
Ismaël Moret
677640d119
Merge pull request #2330 from LITUATUI/patch-2
Update nostv.pt.channels.xml
2024-05-06 10:53:30 +02:00
singkie
3a1ab102d3
wip: check vision music 2024-05-06 08:27:49 +07:00
singkie
8a01e20a45
wip: check vision sports 2024-05-06 08:26:26 +07:00
singkie
54fc157381
wip: check vision movies 2024-05-06 08:21:32 +07:00
singkie
277f27da05
wip: check vision kids 2024-05-06 08:14:18 +07:00
singkie
96bea1e4f5
wip: check vision knowledge 2024-05-06 08:11:13 +07:00
singkie
1982200ab2
wip: check vision news 2024-05-06 08:04:55 +07:00
singkie
ff773b7260
wip: check vplus entertainment 2024-05-06 07:56:39 +07:00
singkie
3a90d66a9e
wip: check vplus nasional 2024-05-06 07:47:17 +07:00
PopeyeTheSai10r
e0266b8038
Merge pull request #2359 from dbistriceanu/programetv.ro
Fix programetv.ro issue reported in #2356
2024-05-04 15:45:32 -07:00
PopeyeTheSai10r
e2575d3c0a
Merge pull request #2299 from xemles/patch-7
The UK version and the Swiss version don't play the same program
2024-05-03 23:18:02 -07:00
PopeyeTheSai10r
7e80e85ac0
Merge pull request #2332 from cruizno/patch-1
Update tvguide.com.config.js
2024-05-03 21:08:05 -07:00
Jimmy Fortin
11b8e7e738
fix investigation, max, unis and ami télé 2024-04-27 11:34:56 -04:00
Jimmy Fortin
09a8f5f1b3
fix moi et compagnie 2024-04-21 15:20:44 -04:00
Jimmy Fortin
2499652c8e
Merge branch 'master' into fix/french-channels-tvpassport 2024-04-21 15:12:48 -04:00
Dum4G
494a8fd3f3
Merge pull request #2351 from Animenosekai/master
Adding more channels using `tvguide.myjcom.jp`
2024-04-21 01:01:32 +03:00
Daniel Bistriceanu
4ad07c9dd9
Fix regex for parsing data 2024-04-20 23:48:23 +03:00
Animenosekai
21caa7ab84 Adding more channels using tvguide.myjcom.jp 2024-04-07 17:21:47 +02:00
Jimmy Fortin
d57b46469c
fix series plus and radio-canada ids 2024-04-06 16:32:55 -04:00
Jimmy Fortin
d70bed6c98
fix télé-québec id 2024-04-05 19:23:17 -04:00
Jimmy Fortin
818ffdea10
series+, z, zeste, qub and telequebec 2024-04-05 09:42:35 -04:00
Jimmy Fortin
70ac020248
Update tvpassport.com channels languages 2024-04-01 11:40:28 -04:00
kontell
ff9d52bc09
Update sky.com.channels.xml
Added Sky Sports Tennis
2024-02-26 16:41:38 +00:00
cruizno
70a9af0c4e Update tvguide.com.config.js 2024-02-18 00:25:46 -06:00
Pedro Lima
4914a32db7
Update nostv.pt.channels.xml
Fox channels are now STAR.
2024-02-15 16:08:34 +00:00
Pedro Lima
9f29c83d49
Update meo.pt.channels.xml
Fox channels are now STAR.
2024-02-15 15:58:16 +00:00
Dum4G
a1ca6b3335
Merge pull request #2298 from xemles/patch-6
Update chaines-tv.orange.fr.config.js
2024-02-05 17:12:57 +03:00
PopeyeTheSai10r
58987b81a5
Merge pull request #2313 from Sicilykill/issue_2312
Resolves #2312
2024-02-05 06:12:28 -08:00
Dum4G
eee14ca3f6
Merge pull request #2323 from Sicilykill/issue_2322
Resolves issue #2322
2024-02-05 17:10:37 +03:00
sicilykill
d6f90caa18 Updating test to use new url function 2024-02-02 14:02:50 -06:00
sicilykill
4597be781e Adding funtion to fetch api version 2024-02-02 14:02:13 -06:00
PopeyeTheSai10r
ca0069b86d
Merge pull request #2316 from xemles/patch-8
Update canalplus.com_re.channels.xml
2024-01-30 13:09:12 -08:00
xemles
89edd2f36b
Update programme-tv.vini.pf.channels.xml 2024-01-28 14:05:18 +01:00
PopeyeTheSai10r
3faa9c2bdd
Merge pull request #2317 from xemles/patch-9
Update mi.tv_br.channels.xml
2024-01-28 01:59:06 -08:00
xemles
11e8576c2b
Update mi.tv_cl.channels.xml 2024-01-25 09:02:01 +01:00
xemles
22f5fb2dbd
Update mi.tv_br.channels.xml
While the name does say NHK like in NHK World Japan, the schedule shown is actually the one of NHKWorldPremium.jp.
Not switching the id though since it might be fixed at some point.
2024-01-25 08:58:21 +01:00
xemles
d7396072f2
Update canalplus.com_re.channels.xml
Added only this one because there may be a delay with the metropolitan broadcast for most other channels.
2024-01-21 21:08:03 +01:00
PopeyeTheSai10r
2709a1d075
Merge pull request #2314 from Sicilykill/issue_2301
Resolves issue reported in #2301
2024-01-21 06:09:00 -08:00
Sicilykill
51fa709319
Update SITES.md 2024-01-20 16:39:59 -06:00
sicilykill
109be00bbc Resolves issue reported in #2301 2024-01-20 11:29:53 -06:00
sicilykill
2fd0581746 Updating mediaset tests 2024-01-20 11:07:34 -06:00
sicilykill
eb277f1f2a Adding tgcom24 channel 2024-01-20 10:29:05 -06:00
sicilykill
5c52c4dd14 Updating mediaset guide to use new endpoint and json structure 2024-01-20 10:25:52 -06:00
xemles
8a1669d134
The UK version and the Swiss version don't play the same program
The UK version and the Swiss version don't play the same program, so this is linking to the wrong one.
2024-01-01 21:10:33 +01:00
xemles
96e948d6af
Update chaines-tv.orange.fr.config.js 2023-12-31 00:21:47 +01:00
freearhey
d86d0c8711 Update SITES.md 2023-12-29 06:15:33 +03:00
Aleksandr Statciuk
44e70d7f23
Merge pull request #2294 from xemles/master
Updated locales
2023-12-29 06:07:51 +03:00
xemles
4b8f3fad10 Reverted, fixed encoding issues and added a bigger dataset 2023-12-28 21:12:23 +00:00
Aleksandr Statciuk
c19810a03d
Merge pull request #2295 from adrianmihalko/patch-1
Add Mozi Klub and Sorozat Klub to musor.tv.channels.xml
2023-12-28 05:08:25 +03:00
adrianmihalko
f39f687078
Remove invalid xmltv_id
They are new channels without xmltv_id.
2023-12-28 01:13:27 +01:00
adrianmihalko
bca08d994e
Add Mozi Klub and Sorozat Klub to musor.tv.channels.xml 2023-12-28 01:01:33 +01:00
Aleksandr Statciuk
bb9c859a70
Merge pull request #2291 from xemles/patch-5
16/9 better quality parseIcon (we could technically go higher)
2023-12-26 09:29:20 +03:00
xemles
3e5af1ae3b
Merge branch 'iptv-org:master' into patch-5 2023-12-26 02:03:26 +01:00
xemles
43b4dfff92
Update programme-tv.net.test.js 2023-12-26 02:03:00 +01:00
Aleksandr Statciuk
c2b2989665
Merge pull request #2288 from xemles/patch-3
Programs in french even though the site is in fact polish. (pretty su…
2023-12-26 02:17:59 +03:00
Aleksandr Statciuk
f7c52c8cd1
Merge pull request #2287 from xemles/patch-4
TVChile.cl -> fr to es (There's most likely more in the same case)
2023-12-26 02:17:30 +03:00
xemles
7c64de6f82
16/9 better quality parseIcon (we could technically go higher) 2023-12-25 17:56:27 +01:00
xemles
fc5d1c295d
TVChile.cl -> fr to es (There's most likely more in the same case) 2023-12-25 17:32:38 +01:00
xemles
8ee4df1668
Programs in french even though the site is in fact polish. (pretty sure there's more but that's the ones i've noticed) 2023-12-25 17:29:25 +01:00
xemles
53a8bc2728
Removed other channels due to most being played with hours of delay as compared to metropolitan France.
Tahiti is 11 hours behind France, so most programs are delayed by 11 hours except their local channels, so they should either have their own id or be removed from the EPG.
2023-12-25 17:25:34 +01:00
xemles
15ab6429de
Update tvcesoir.fr.channels.xml
Removed RTL9 which actually just puts the programs of the German RTL.de channel.
2023-12-25 17:19:39 +01:00
Aleksandr Statciuk
35c92189e3
Merge pull request #2285 from gohoski/patch-1
Add KG channels to tv.mail.ru guide
2023-12-21 23:27:36 +03:00
Gleb
8b6cc7cb56
Add Kyrgyzstani channels 2023-12-21 22:18:20 +03:00
Aleksandr Statciuk
381b07907d
Update SITES.md 2023-12-19 06:16:06 +03:00
Aleksandr Statciuk
019c7274e4
Merge pull request #2281 from tohenk/fix/player.ee.co.uk
Update player.ee.co.uk (aka bt.com) guide.
2023-12-14 07:02:28 +03:00
Aleksandr Statciuk
2212f38f19
Merge branch 'master' into fix/player.ee.co.uk 2023-12-14 07:02:04 +03:00
Aleksandr Statciuk
4aed895db7
Merge pull request #2280 from tohenk/fix/pickx.be
Update pickx.be (aka proximusmwc.be) guide.
2023-12-14 06:53:44 +03:00
Aleksandr Statciuk
70d895093f
Merge pull request #2279 from tohenk/fix/nostv.pt
Update nostv.pt guide.
2023-12-14 06:41:18 +03:00
Toha
b55137acd7
Site player.ee.co.uk now functional.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-14 00:45:09 +07:00
Toha
ca06116397
Update player.ee.co.uk (aka bt.com) guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-14 00:39:55 +07:00
Toha
2f2a4fcd92
Site pickx.be now functional.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-13 19:59:31 +07:00
Toha
688df489e4
Update pickx.be (aka proximusmwc.be) guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-13 19:55:57 +07:00
Toha
38dd5264f2
Site nostv.pt is now functional.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-12 18:28:25 +07:00
Toha
3efd67800c
Update nostv.pt guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-12 18:21:55 +07:00
Aleksandr Statciuk
485e674b33
Update SITES.md 2023-12-12 07:26:06 +03:00
Aleksandr Statciuk
2a24447824
Merge pull request #2278 from tohenk/fix/tv.trueid.net
Update tv.trueid.net guide.
2023-12-12 07:25:15 +03:00
freearhey
2027cb84b6 Update readme.md 2023-12-12 07:24:37 +03:00
Toha
826099ebf1
Update tv.trueid.net guide.
This site only provides guides for today at current time, so it is necessary
to get the guide at proper time (0:00 of Asia/Bangkok) to get the complete
guides.

Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-12 00:56:32 +07:00
Aleksandr Statciuk
d639ed991f
Update SITES.md 2023-12-11 19:03:33 +03:00
Aleksandr Statciuk
99ae79c9b1
Merge pull request #2277 from tohenk/fix/rotana.net
Update rotana.net guide.
2023-12-11 19:02:42 +03:00
Toha
5ac1b0a0cf
Update rotana.net guide.
This site now uses separate XHR request to fetch program description.
2023-12-11 22:53:22 +07:00
Aleksandr Statciuk
cc78a87d38
Update SITES.md 2023-12-11 18:48:28 +03:00
Aleksandr Statciuk
b487e3ffb3
Update SITES.md 2023-12-10 19:48:11 +03:00
Aleksandr Statciuk
31af44e311
Update SITES.md 2023-12-10 00:08:49 +03:00
freearhey
d4e9f8d062 Update mujtvprogram.cz 2023-12-09 21:14:24 +03:00
freearhey
7844d3fc03 Fixes xmltv_id 2023-12-09 21:06:58 +03:00
Aleksandr Statciuk
c228d4c0cc
Merge pull request #2274 from tohenk/indihometv.com-guide
Update indihometv.com guide.
2023-12-08 21:36:37 +03:00
Toha
59750c9620
Update indihometv.com guide.
Signed-off-by: Toha <tohenk@yahoo.com>
2023-12-08 15:34:09 +07:00
1320 changed files with 325877 additions and 52677 deletions

View file

@ -1,39 +0,0 @@
{
"env": {
"node": true,
"es2021": true,
"jest": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
"@typescript-eslint/no-var-requires": "off",
"no-case-declarations": "off",
"linebreak-style": [
"error",
"windows"
],
"quotes": [
"error",
"single",
{
"avoidEscape": true
}
],
"semi": [
"error",
"never"
]
}
}

View file

@ -0,0 +1,30 @@
name: ✍️ Channel Request
description: Request to add a channel to the guide
labels: ['channel request']
body:
- type: markdown
attributes:
value: |
Please fill out the request as much as possible so we can efficiently process your request.
- type: input
attributes:
label: Site
description: The name of the site
placeholder: 'guidatv.sky.it'
validations:
required: true
- type: textarea
attributes:
label: Channels
description: List of channels to be added
placeholder: 'BBC One'
validations:
required: true
- type: textarea
attributes:
label: Notes
description: Anything else we should know?

View file

@ -0,0 +1,24 @@
name: ✨ Feature request
description: Ask for a feature to be added to the guide
labels: ['feature request']
body:
- type: markdown
attributes:
value: |
Please fill out the issue template as much as you can so we could efficiently process your request.
- type: input
attributes:
label: Site
description: The name of the site
placeholder: 'guidatv.sky.it'
validations:
required: true
- type: textarea
attributes:
label: Description
description: Detailed description of the feature.
validations:
required: true

View file

@ -1,8 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: 💡 Feature request
url: https://github.com/orgs/iptv-org/discussions/categories/ideas
about: For any ideas or feature requests
- name: ❓ Ask a question
url: https://github.com/orgs/iptv-org/discussions/categories/q-a
about: Ask questions about this project

52
.github/workflows/check.yml vendored Normal file
View file

@ -0,0 +1,52 @@
name: check
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize, reopened, edited]
branches:
- master
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: changed files
id: files
run: |
JS_ANY_CHANGED=false
JS_ALL_CHANGED_FILES=$(git diff --name-only tests/**/*.js tests/**/*.ts scripts/**/*.js scripts/**/*.mts scripts/**/*.ts sites/**/*.js sites/**/*.ts | tr '\n' ' ')
if [ -n "${JS_ALL_CHANGED_FILES}" ]; then
JS_ANY_CHANGED=true
fi
echo "js_all_changed_files=$JS_ALL_CHANGED_FILES" >> "$GITHUB_OUTPUT"
echo "js_any_changed=$JS_ANY_CHANGED" >> "$GITHUB_OUTPUT"
CHANNELS_ANY_CHANGED=false
CHANNELS_ALL_CHANGED_FILES=$(git diff --name-only sites/**/*.channels.xml | tr '\n' ' ')
if [ -n "${CHANNELS_ALL_CHANGED_FILES}" ]; then
CHANNELS_ANY_CHANGED=true
fi
echo "channels_all_changed_files=$CHANNELS_ALL_CHANGED_FILES" >> "$GITHUB_OUTPUT"
echo "channels_any_changed=$CHANNELS_ANY_CHANGED" >> "$GITHUB_OUTPUT"
- uses: actions/setup-node@v4
if: ${{ !env.ACT && (steps.files.outputs.js_any_changed == 'true' || steps.files.outputs.channels_any_changed == 'true') }}
with:
node-version: 22
cache: 'npm'
- name: install dependencies
if: steps.files.outputs.js_any_changed == 'true' || steps.files.outputs.channels_any_changed == 'true'
run: SKIP_POSTINSTALL=1 npm install
- name: check changed js-files
if: steps.files.outputs.js_any_changed == 'true'
run: |
npx eslint ${{ steps.files.outputs.js_all_changed_files }}
- name: check changed *.channels.xml
if: steps.files.outputs.channels_any_changed == 'true'
run: |
npm run channels:lint -- ${{ steps.files.outputs.channels_all_changed_files }}
npm run postinstall
npm run channels:validate -- ${{ steps.files.outputs.channels_all_changed_files }}

View file

@ -25,13 +25,26 @@ jobs:
- uses: actions/setup-node@v3
if: ${{ !env.ACT }}
with:
node-version: 18
node-version: 22
cache: 'npm'
- name: install dependencies
run: npm install
- name: check *.channels.xml
run: |
npm run channels:lint
- name: update sites.md
run: npm run sites:update
- run: git status
- name: commit changes to sites.md
if: ${{ !env.ACT && github.ref == 'refs/heads/master' }}
run: |
SITE=SITES.md
CHANGED=$(git diff ${SITE})
if [ -n "${CHANGED}" ]; then
git add ${SITE}
git commit -m "[Bot] Update ${SITE}" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/${{ github.run_id }}) workflow." --no-verify
git push
fi
- name: generate .api/guides.json
run: npm run api:generate
- run: git status

5
.gitignore vendored
View file

@ -2,4 +2,7 @@
/temp/
/channels.xml
/guide.xml
/guide.xml.gz
/guide.xml.gz
# macOS
.DS_Store

7
.husky/channels_lint.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/sh
channels_changed="$(git diff --staged --name-only --diff-filter=ACMR -- 'sites/**/*.channels.xml' | sed 's| |\\ |g')"
if [ ! -z "$channels_changed" ]; then
npm run channels:lint -- $channels_changed
fi

7
.husky/channels_validate.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/sh
channels_changed="$(git diff --staged --name-only --diff-filter=ACMR -- 'sites/**/*.channels.xml' | sed 's| |\\ |g')"
if [ ! -z "$channels_changed" ]; then
npm run channels:validate -- $channels_changed
fi

3
.husky/pre-commit Normal file
View file

@ -0,0 +1,3 @@
.husky/scripts_lint.sh
.husky/channels_lint.sh
.husky/channels_validate.sh

7
.husky/scripts_lint.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/sh
scripts_changed="$(git diff --staged --name-only --diff-filter=ACMR -- 'tests/**/*.ts' 'tests/**/*.js' 'scripts/**/*.ts' 'scripts/**/*.mts' 'scripts/**/*.js' 'sites/**/*.js' 'sites/**/*.ts' | sed 's| |\\ |g')"
if [ ! -z "$scripts_changed" ]; then
npx eslint $scripts_changed
fi

View file

@ -1,7 +1,7 @@
module.exports = {
tabWidth: 2,
useTabs: false,
endOfLine: 'lf',
endOfLine: 'crlf',
semi: false,
singleQuote: true,
printWidth: 100,

View file

@ -8,47 +8,247 @@
### How to add a channel to the guide?
Open the [/sites](/sites) folder and select the source that you know has the guide for the channel you want.
To ask for help with adding a channel simply fill out this [form](https://github.com/iptv-org/epg/issues/new?assignees=&labels=channel+request&projects=&template=2_channel-request.yml).
Then in the selected folder open the file `*.channels.xml` and add to it:
If you want to add a channel to the list yourself, here are the instructions on how to do it.
First select the site from [SITES.md](SITES.md) that you know has a guide for the channel you need. Then go to the folder with its config and open the file `*.channels.xml`.
Make sure that the desired channel is not already in the list. If it is not, simply add its description to the end of the list as shown here:
```xml
<channel site="SITE" lang="LANGUAGE_CODE" xmltv_id="CHANNEL_ID" site_id="SITE_ID">CHANNEL_NAME</channel>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
...
<channel site="SITE" lang="LANGUAGE_CODE" xmltv_id="CHANNEL_ID" site_id="SITE_ID">CHANNEL_NAME</channel>
</channels>
```
| Attribute | Description | Example |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- |
| SITE | Site domain name. | `example.com` |
| LANGUAGE_CODE | Language of the guide ([ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) code). | `en` |
| CHANNEL_ID | Channel ID from [iptv-org/database](https://github.com/iptv-org/database). A complete list of supported channels can also be found at https://iptv-org.github.io/. | `BBCOne.uk` |
| SITE_ID | Unique ID of the channel used in the source. | `bbc1` |
| CHANNEL_NAME | Name of the channel used in the source. | `BBC 1` |
| Attribute | Description | Example |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| SITE | Site domain name. | `example.com` |
| LANGUAGE_CODE | Language of the guide ([ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) code). | `en` |
| CHANNEL_ID | ID of the channel. Full list of supported channels with corresponding ID could be found on [iptv-org.github.io](https://iptv-org.github.io/). | `HBO.us@East` |
| SITE_ID | Unique ID of the channel used in the source. | `hbo` |
| CHANNEL_NAME | Name of the channel used in the source. | `HBO East` |
After that just commit all changes and send a pull request.
After that just [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) all changes and send a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
### How to report broken guide?
If you start to get errors when downloading the guide or if nothing loads at all, please let us know via this [form](https://github.com/iptv-org/epg/issues/new?assignees=&labels=broken+guide&projects=&template=3_broken-guide.yml).
### How to add a new source to the repository?
To do this, you must create a new folder in the [/sites](/sites) with at least 3 files:
If you are not familiar with javascript programming, you can ask for help from other community members through this [form](https://github.com/iptv-org/epg/issues/new?assignees=&labels=source+request&projects=&template=1_source-request.yml). Otherwise, below are the instructions for you.
To start with, you need to create a new folder in the [/sites](/sites) folder and put at least 4 files in it:
<details>
<summary>example.com.config.js</summary>
<br>
This file describes what kind of request we need to send to get the guide for a particular channel on a certain date. It also describes how to parse the response.
This file describes what kind of request we need to send to get the guide for a particular channel on a certain date and how to parse the response.
```js
module.exports = {
site: 'example.com',
url: function ({ channel, date }) {
url({ channel, date }) {
return `https://example.com/api/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
parser: function ({ content }) {
return JSON.parse(content)
parser(context) {
try {
return JSON.parse(context.content)
} catch {
return []
}
}
}
```
More detailed instructions for this file can be found here: https://github.com/freearhey/epg-grabber#site-config
### Context Object
From each function in `config.js` you can access a `context` object containing the following data:
- `channel`: The object describing the current channel (xmltv_id, site_id, name, lang)
- `date`: The 'dayjs' instance with the requested date
- `content`: The response data as a String
- `buffer`: The response data as an ArrayBuffer
- `headers`: The response headers
- `request`: The request config
- `cached`: A boolean to check whether this request was cached or not
### Program Properties
List of properties that can be assigned to each program during parsing.
| Property | Aliases | Type | Required |
| --------------- | -------------------------------- | ------------------------------------------ | -------- |
| start | | `String \| Number \| Date()` | true |
| stop | | `String \| Number \| Date()` | true |
| title | titles | `String \| Object \| String[] \| Object[]` | true |
| subTitle | subTitles, sub_title, sub_titles | `String \| Object \| String[] \| Object[]` | false |
| description | desc, descriptions | `String \| Object \| String[] \| Object[]` | false |
| date | | `String \| Number \| Date()` | false |
| category | categories | `String \| Object \| String[] \| Object[]` | false |
| keyword | keywords | `String \| Object \| String[] \| Object[]` | false |
| language | languages | `String \| Object \| String[] \| Object[]` | false |
| origLanguage | origLanguages | `String \| Object \| String[] \| Object[]` | false |
| length | | `String \| Object \| String[] \| Object[]` | false |
| url | urls | `String \| Object \| String[] \| Object[]` | false |
| country | countries | `String \| Object \| String[] \| Object[]` | false |
| video | | `Object` | false |
| audio | | `Object` | false |
| season | | `String \| Number` | false |
| episode | | `String \| Number` | false |
| episodeNumber | episodeNum, episodeNumbers | `Object` | false |
| previouslyShown | | `String \| Object \| String[] \| Object[]` | false |
| premiere | | `String \| Object \| String[] \| Object[]` | false |
| lastChance | | `String \| Object \| String[] \| Object[]` | false |
| new | | `Boolean` | false |
| subtitles | | `Object \| Object[]` | false |
| rating | ratings | `String \| Object \| String[] \| Object[]` | false |
| starRating | starRatings | `String \| Object \| String[] \| Object[]` | false |
| review | reviews | `String \| Object \| String[] \| Object[]` | false |
| director | directors | `String \| Object \| String[] \| Object[]` | false |
| actor | actors | `String \| Object \| String[] \| Object[]` | false |
| writer | writers | `String \| Object \| String[] \| Object[]` | false |
| adapter | adapters | `String \| Object \| String[] \| Object[]` | false |
| producer | producers | `String \| Object \| String[] \| Object[]` | false |
| presenter | presenters | `String \| Object \| String[] \| Object[]` | false |
| composer | composers | `String \| Object \| String[] \| Object[]` | false |
| editor | editors | `String \| Object \| String[] \| Object[]` | false |
| commentator | commentators | `String \| Object \| String[] \| Object[]` | false |
| guest | guests | `String \| Object \| String[] \| Object[]` | false |
| image | images | `String \| Object \| String[] \| Object[]` | false |
| icon | icons | `String \| Object \| String[] \| Object[]` | false |
Example:
```js
{
start: '2021-03-19T06:00:00.000Z',
stop: '2021-03-19T06:30:00.000Z',
title: 'Program 1',
subTitle: 'Sub-title & 1',
description: 'Description for Program 1',
date: '2022-05-06',
categories: ['Comedy', 'Drama'],
keywords: [
{ lang: 'en', value: 'physical-comedy' },
{ lang: 'en', value: 'romantic' }
],
language: 'English',
origLanguage: { lang: 'en', value: 'French' },
length: { units: 'minutes', value: '60' },
url: 'http://example.com/title.html',
country: 'US',
video: {
present: 'yes',
colour: 'no',
aspect: '16:9',
quality: 'HDTV'
},
audio: {
present: 'yes',
stereo: 'Dolby Digital'
},
season: 9,
episode: 239,
previouslyShown: [{ start: '20080711000000', channel: 'channel-two.tv' }],
premiere: 'First time on British TV',
lastChance: [{ lang: 'en', value: 'Last time on this channel' }],
new: true,
subtitles: [
{ type: 'teletext', language: 'English' },
{ type: 'onscreen', language: [{ lang: 'en', value: 'Spanish' }] }
],
rating: {
system: 'MPAA',
value: 'P&G',
icon: 'http://example.com/pg_symbol.png'
},
starRatings: [
{
system: 'TV Guide',
value: '4/5',
icon: [{ src: 'stars.png', width: 100, height: 100 }]
},
{
system: 'IMDB',
value: '8/10'
}
],
reviews: [
{
type: 'text',
source: 'Rotten Tomatoes',
reviewer: 'Joe Bloggs',
lang: 'en',
value: 'This is a fantastic show!'
},
{
type: 'text',
source: 'IDMB',
reviewer: 'Jane Doe',
lang: 'en',
value: 'I love this show!'
},
{
type: 'url',
source: 'Rotten Tomatoes',
reviewer: 'Joe Bloggs',
lang: 'en',
value: 'https://example.com/programme_one_review'
}
],
directors: [
{
value: 'Director 1',
url: { value: 'http://example.com/director1.html', system: 'TestSystem' },
image: [
'https://example.com/image1.jpg',
{
value: 'https://example.com/image2.jpg',
type: 'person',
size: '2',
system: 'TestSystem',
orient: 'P'
}
]
},
'Director 2'
],
actors: ['Actor 1', 'Actor 2'],
writer: 'Writer 1',
producers: 'Roger Dobkowitz',
presenters: 'Drew Carey',
images: [
{
type: 'poster',
size: '1',
orient: 'P',
system: 'tvdb',
value: 'https://tvdb.com/programme_one_poster_1.jpg'
},
{
type: 'poster',
size: '2',
orient: 'P',
system: 'tmdb',
value: 'https://tmdb.com/programme_one_poster_2.jpg'
},
{
type: 'backdrop',
size: '3',
orient: 'L',
system: 'tvdb',
value: 'https://tvdb.com/programme_one_backdrop_3.jpg'
}
],
icon: 'https://example.com/images/Program1.png?x=шеллы&sid=777'
}
```
</details>
@ -59,44 +259,50 @@ More detailed instructions for this file can be found here: https://github.com/f
With this file we can test the previously created config and make sure it works as you expect.
```js
const { url, parser } = require('./example.com.config.js')
const { parser, url } = require('./example.com.config.js')
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-11-18', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk', lang: 'en' }
const date = dayjs.utc('2025-01-12', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk' }
it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2022-11-18')
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12')
})
it('can parse response', () => {
const content = `[{"start":"2022-11-18T01:30:00.000Z","stop":"2022-11-18T02:00:00.000Z","title":"Program 1"}]`
const content =
'[{"title":"Program 1","start":"2025-01-12T00:00:00.000Z","stop":"2025-01-12T00:30:00.000Z"},{"title":"Program 2","start":"2025-01-12T00:30:00.000Z","stop":"2025-01-12T01:00:00.000Z"}]'
const results = parser({ content })
expect(results).toMatchObject([
{
start: '2022-11-18T01:30:00.000Z',
stop: '2022-11-18T02:00:00.000Z',
title: 'Program 1'
}
])
expect(results.length).toBe(2)
expect(results[0]).toMatchObject({
title: 'Program 1',
start: '2025-01-12T00:00:00.000Z',
stop: '2025-01-12T00:30:00.000Z'
})
expect(results[1]).toMatchObject({
title: 'Program 2',
start: '2025-01-12T00:30:00.000Z',
stop: '2025-01-12T01:00:00.000Z'
})
})
it('can handle empty guide', () => {
const results = parser({ content: '' })
const result = parser({
date,
channel,
content: ''
})
expect(results).toMatchObject([])
expect(result).toMatchObject([])
})
```
To run the tests you can use the following command:
```sh
npm test -- example.com
```
Detailed documentation for the tests can be found here: https://jestjs.io/docs/using-matchers
</details>
@ -110,21 +316,89 @@ This file contains a list of channels available at the source.
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<channels>
<channel site="example.com" lang="en" xmltv_id="BBCOne.uk" site_id="bbc1">BBC 1</channel>
<channel site="example.com" lang="en" xmltv_id="BBCOne.uk" site_id="bbc1">BBC One</channel>
</channels>
```
</details>
After creating all the files we can make sure that the guide loads correctly and has no errors using the command:
<details>
<summary>readme.md</summary>
<br>
This file contains instructions on how to use this config.
````
# example.com
https://example.com
### Download the guide
```sh
npm run grab -- --site=example.com
npm run grab --- --site=example.com
```
If the download is successful, the `guide.xml` file with the ready to use program should appear in the root directory.
### Test
After that, all that remains is to commit all the changes and send a pull request.
```sh
npm test --- example.com
```
````
</details>
The fastest way to create all these files is to use the command:
```sh
npm run sites:init --- example.com
```
After you finish working on the files you can make sure that everything works by running the config test:
```
npm test --- example.com
```
Then check that all channels have the correct `xmltv-id`:
```
npm run channels:validate sites/example.com/example.com.channels.xml
```
And then try downloading the guide itself:
```
npm run grab --- example.com
```
If everything goes well just [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) all changes and send us a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
### How to map the channels?
In order for the guides to be linked with playlists from [iptv-org/iptv](https://github.com/iptv-org/iptv) and also with our other projects, each channel must have the same ID in the description as in our [iptv-org/database](https://github.com/iptv-org/database).
To check this, select one of the sites in the [SITES.md](SITES.md), open its `*.channels.xml` file and check that all channels have a valid `xmltv_id`. A list of all channels with corresponding IDs can be found at [iptv-org.github.io](https://iptv-org.github.io/).
If the channel is not in our database yet, you can add it to it through this [form](https://github.com/iptv-org/database/issues/new?assignees=&labels=channels%3Aadd&projects=&template=1_channels_add.yml&title=Add%3A+).
If the `*.channels.xml` file contains many channels without `xmltv_id`, you can speed up the process by running the command in the [Console](https://en.wikipedia.org/wiki/Windows_Console) (or [Terminal](<https://en.wikipedia.org/wiki/Terminal_(macOS)>) if you have macOS):
```sh
npm run channels:edit path/to/channels.xml
```
This way, you can map channels by simply selecting the proper ID from the list:
```sh
? Select channel ID for "BBC One" (bbc1): (Use arrow keys)
BBCOne.uk (BBC One, BBC1, BBC Television, BBC Television Service)
BBCOneHD.uk (BBC One HD)
Type...
Skip
```
Once complete, [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) all changes and send a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
## Project Structure
@ -147,13 +421,16 @@ For scripts to work, you must have [Node.js](https://nodejs.org/en) installed on
To run scripts use the `npm run <script-name>` command.
- `act:check`: allows to test the [check](https://github.com/iptv-org/iptv/blob/master/.github/workflows/check.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act).
- `act:update`: allows to test the [update](https://github.com/iptv-org/iptv/blob/master/.github/workflows/update.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act).
- `api:load`: downloads the latest channels data from the [iptv-org/api](https://github.com/iptv-org/api).
- `api:generate`: generates a JSON file with all channels for the [iptv-org/api](https://github.com/iptv-org/api) repository.
- `channels:lint`: сhecks the channel lists for syntax errors.
- `channels:parse`: generates a list of channels based on the site configuration.
- `channels:editor`: utility for quick channels markup.
- `channels:edit`: utility for quick channels mapping.
- `channels:validate`: checks the description of channels for errors.
- `sites:init`: creates a new site config from the template.
- `sites:update`: updates the list of sites and their status in [SITES.md](SITES.md).
- `grab`: downloads a program from a specified source.
- `serve`: starts the [web server](https://github.com/vercel/serve).
- `lint`: сhecks the scripts for syntax errors.

24
Dockerfile Normal file
View file

@ -0,0 +1,24 @@
FROM node:22-alpine
ARG GIT_REPO=https://github.com/iptv-org/epg.git
ARG GIT_BRANCH=master
ARG WORKDIR=/epg
ENV CRON_SCHEDULE="0 0 * * *"
ENV GZIP=false
ENV MAX_CONNECTIONS=1
ENV DAYS=
RUN apk update \
&& apk upgrade --available \
&& apk add curl git tzdata bash \
&& npm install -g npm@latest \
&& npm install pm2 -g \
&& mkdir $(echo "${WORKDIR}") -p \
&& cd $WORKDIR \
&& git clone --depth 1 -b $(echo "${GIT_BRANCH} ${GIT_REPO}") . \
&& npm install \
&& mkdir /public
RUN apk del git curl \
&& rm -rf /var/cache/apk/*
COPY pm2.config.js $WORKDIR
WORKDIR $WORKDIR
EXPOSE 3000
CMD [ "pm2-runtime", "pm2.config.js" ]

142
README.md
View file

@ -1,4 +1,4 @@
# EPG
# EPG [![update](https://github.com/iptv-org/epg/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/epg/actions/workflows/update.yml)
Tools for downloading the EPG (Electronic Program Guide) for thousands of TV channels from hundreds of sources.
@ -7,6 +7,7 @@ Tools for downloading the EPG (Electronic Program Guide) for thousands of TV cha
- ✨ [Installation](#installation)
- 🚀 [Usage](#usage)
- 💫 [Update](#update)
- 🐋 [Docker](#docker)
- 📺 [Playlists](#playlists)
- 🗄 [Database](#database)
- 👨‍💻 [API](#api)
@ -39,50 +40,31 @@ npm install
## Usage
To start the download of the guide, select one of the [supported sites](SITES.md) and paste its name into the command below:
To start the download of the guide, select one of the supported sites from [SITES.md](SITES.md) file and paste its name into the command below:
```sh
npm run grab -- --site=example.com
npm run grab --- --site=example.com
```
And once the download is complete, the guide will be saved to the `guide.xml` file.
Then run it and wait for the guide to finish downloading. When finished, a new `guide.xml` file will appear in the current directory.
You can also customize the behavior of the script using this options:
```sh
Usage: npm run grab -- [options]
Usage: npm run grab --- [options]
Options:
-s, --site <name> Name of the site to parse
-c, --channels <path> Path to *.channels.xml file (required if the "--site" attribute is
not specified)
-o, --output <path> Path to output file (default: "guide.xml")
-l, --lang <code> Filter channels by language (ISO 639-2 code)
-t, --timeout <milliseconds> Override the default timeout for each request
-d, --delay <milliseconds> Override the default delay between request
--days <days> Override the number of days for which the program will be loaded
(defaults to the value from the site config)
--maxConnections <number> Limit on the number of concurrent requests (default: 1)
--cron <expression> Schedule a script run (example: "0 0 * * *")
--gzip Create a compressed version of the guide as well (default: false)
```
### Access the guide by URL
You can make the guide available via URL by running your own server:
```sh
npm run serve
```
After that, the guide will be available at the link:
```
http://localhost:3000/guide.xml
```
In addition it will be available to other devices on the same local network at the address:
```
http://<your_local_ip_address>:3000/guide.xml
-l, --lang <codes> Allows you to restrict downloading to channels in specified languages only (example: "en,id")
-t, --timeout <milliseconds> Timeout for each request in milliseconds (default: 0)
-d, --delay <milliseconds> Delay between request in milliseconds (default: 0)
-x, --proxy <url> Use the specified proxy (example: "socks5://username:password@127.0.0.1:1234")
--days <days> Number of days for which the program will be loaded (defaults to the value from the site config)
--maxConnections <number> Number of concurrent requests (default: 1)
--gzip Specifies whether or not to create a compressed version of the guide (default: false)
```
### Parallel downloading
@ -90,7 +72,7 @@ http://<your_local_ip_address>:3000/guide.xml
By default, the guide for each channel is downloaded one by one, but you can change this behavior by increasing the number of simultaneous requests using the `--maxConnections` attribute:
```sh
npm run grab -- --site=example.com --maxConnections=10
npm run grab --- --site=example.com --maxConnections=10
```
But be aware that under heavy load, some sites may start return an error or completely block your access.
@ -110,17 +92,47 @@ Create an XML file and copy the descriptions of all the channels you need from t
And then specify the path to that file via the `--channels` attribute:
```sh
npm run grab -- --channels=path/to/custom.channels.xml
npm run grab --- --channels=path/to/custom.channels.xml
```
### Run on schedule
If you want to download the guide automatically on a schedule, you need to pass a valid [cron expression](https://crontab.guru/) to the script using the `--cron` attribute:
To download the guide on a schedule, you can use the included process manager. Just run it with desire [cron expression](https://crontab.guru/) and the `grab` options:
```sh
npm run grab -- --site=example.com --cron="0 0 * * *"
npx pm2 start npm --no-autorestart --cron-restart="0 0,12 * * *" -- run grab --- --site=example.com
```
To track the process, you can use the command:
```sh
npx pm2 logs
```
For more info go to [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/) documentation.
### Access the guide by URL
You can make the guide available via URL by running your own server. The easiest way to do this is to run this command:
```sh
npx serve
```
After that, the guide will be available at the link:
```
http://localhost:3000/guide.xml
```
In addition it will be available to other devices on the same local network at the address:
```
http://<your_local_ip_address>:3000/guide.xml
```
For more info go to [serve](https://github.com/vercel/serve) documentation.
## Update
If you have downloaded the repository code according to the instructions above, then to update it will be enough to run the command:
@ -135,9 +147,61 @@ And then update all the dependencies:
npm install
```
## Playlists
## Docker
Playlists with already linked guides can be found in the [iptv-org/iptv](https://github.com/iptv-org/iptv) repository.
### Build an image
```sh
docker build -t iptv-org/epg --no-cache .
```
### Create and run container
```sh
docker run -p 3000:3000 -v /path/to/channels.xml:/epg/channels.xml iptv-org/epg
```
By default, the guide will be downloaded every day at 00:00 UTC and saved to the `/epg/public/guide.xml` file inside the container.
From the outside, it will be available at this link:
```
http://localhost:3000/guide.xml
```
or
```
http://<your_local_ip_address>:3000/guide.xml
```
### Environment Variables
To fine-tune the execution, you can pass environment variables to the container as follows:
```sh
docker run \
-p 5000:3000 \
-v /path/to/channels.xml:/epg/channels.xml \
-e CRON_SCHEDULE="0 0,12 * * *" \
-e MAX_CONNECTIONS=10 \
-e GZIP=true \
-e PROXY="socks5://127.0.0.1:1234" \
-e DAYS=14 \
-e TIMEOUT=5 \
-e DELAY=2 \
iptv-org/epg
```
| Variable | Description |
| --------------- | ------------------------------------------------------------------------------------------------------------------ |
| CRON_SCHEDULE | A [cron expression](https://crontab.guru/) describing the schedule of the guide loadings (default: "0 0 \* \* \*") |
| MAX_CONNECTIONS | Limit on the number of concurrent requests (default: 1) |
| GZIP | Boolean value indicating whether to create a compressed version of the guide (default: false) |
| PROXY | Use the specified proxy |
| DAYS | Number of days for which the guide will be loaded (defaults to the value from the site config) |
| TIMEOUT | Timeout for each request in milliseconds (default: 0) |
| DELAY | Delay between request in milliseconds (default: 0) |
## Database

432
SITES.md
View file

@ -1,195 +1,237 @@
# Sites
| Site | Status | Notes |
| ------------------------------------------------------------------ | ------ | ------------------------------------------- |
| [9tv.co.il](sites/9tv.co.il) | 🟢 | |
| [abc.net.au](sites/abc.net.au) | 🟢 | |
| [allente.dk](sites/allente.dk) | 🟢 | |
| [allente.fi](sites/allente.fi) | 🟢 | |
| [allente.no](sites/allente.no) | 🟢 | |
| [allente.se](sites/allente.se) | 🟢 | |
| [andorradifusio.ad](sites/andorradifusio.ad) | 🟢 | |
| [anteltv.com.uy](sites/anteltv.com.uy) | 🟢 | |
| [arianaafgtv.com](sites/arianaafgtv.com) | 🟢 | |
| [arianatelevision.com](sites/arianatelevision.com) | 🟢 | |
| [arirang.com](sites/arirang.com) | 🟢 | |
| [artonline.tv](sites/artonline.tv) | 🟢 | |
| [bein.com](sites/bein.com) | 🟢 | |
| [beinsports.com](sites/beinsports.com) | 🟢 | |
| [berrymedia.co.kr](sites/berrymedia.co.kr) | 🟢 | |
| [bt.com](sites/bt.com) | 🔴 | https://github.com/iptv-org/epg/issues/2221 |
| [cablego.com.pe](sites/cablego.com.pe) | 🟢 | |
| [cableplus.com.uy](sites/cableplus.com.uy) | 🟢 | |
| [canalplus-haiti.com](sites/canalplus-haiti.com) | 🔴 | https://github.com/iptv-org/epg/issues/2237 |
| [canalplus.com](sites/canalplus.com) | 🟢 | |
| [cgates.lt](sites/cgates.lt) | 🟢 | |
| [chaines-tv.orange.fr](sites/chaines-tv.orange.fr) | 🟢 | |
| [clickthecity.com](sites/clickthecity.com) | 🟢 | |
| [comteco.com.bo](sites/comteco.com.bo) | 🔴 | https://github.com/iptv-org/epg/issues/2239 |
| [content.astro.com.my](sites/content.astro.com.my) | 🟢 | |
| [cosmote.gr](sites/cosmote.gr) | 🟢 | |
| [cubmu.com](sites/cubmu.com) | 🟢 | |
| [dens.tv](sites/dens.tv) | 🟢 | |
| [digiturk.com.tr](sites/digiturk.com.tr) | 🟢 | |
| [directv.com](sites/directv.com) | 🟢 | |
| [directv.com.ar](sites/directv.com.ar) | 🔴 | https://github.com/iptv-org/epg/issues/2248 |
| [directv.com.uy](sites/directv.com.uy) | 🟢 | |
| [dishtv.in](sites/dishtv.in) | 🟢 | |
| [disneystar.com](sites/disneystar.com) | 🟢 | |
| [dsmart.com.tr](sites/dsmart.com.tr) | 🟢 | |
| [dstv.com](sites/dstv.com) | 🟢 | |
| [elcinema.com](sites/elcinema.com) | 🟢 | |
| [ena.skylifetv.co.kr](sites/ena.skylifetv.co.kr) | 🟢 | |
| [energeek.cl](sites/energeek.cl) | 🟢 | |
| [entertainment.ie](sites/entertainment.ie) | 🟢 | |
| [epg.i-cable.com](sites/epg.i-cable.com) | 🔴 | https://github.com/iptv-org/epg/issues/2228 |
| [firstmedia.com](sites/firstmedia.com) | 🟢 | |
| [flixed.io](sites/flixed.io) | 🟢 | |
| [foxsports.com.au](sites/foxsports.com.au) | 🟢 | |
| [foxtel.com.au](sites/foxtel.com.au) | 🟢 | |
| [frikanalen.no](sites/frikanalen.no) | 🟢 | |
| [gatotv.com](sites/gatotv.com) | 🟢 | |
| [getafteritmedia.com](sites/getafteritmedia.com) | 🟢 | |
| [guida.tv](sites/guida.tv) | 🟢 | |
| [guidatv.sky.it](sites/guidatv.sky.it) | 🟢 | |
| [hd-plus.de](sites/hd-plus.de) | 🔴 | https://github.com/iptv-org/epg/issues/2173 |
| [horizon.tv](sites/horizon.tv) | 🟢 | |
| [i.mjh.nz](sites/i.mjh.nz) | 🟢 | |
| [i24news.tv](sites/i24news.tv) | 🟢 | |
| [iltalehti.fi](sites/iltalehti.fi) | 🟢 | |
| [indihometv.com](sites/indihometv.com) | 🟢 | |
| [ionplustv.com](sites/ionplustv.com) | 🟢 | |
| [ipko.com](sites/ipko.com) | 🟢 | |
| [kan.org.il](sites/kan.org.il) | 🔴 | https://github.com/iptv-org/epg/issues/2273 |
| [knr.gl](sites/knr.gl) | 🟢 | |
| [kplus.vn](sites/kplus.vn) | 🔴 | https://github.com/iptv-org/epg/issues/2240 |
| [kvf.fo](sites/kvf.fo) | 🟢 | |
| [m.tv.sms.cz](sites/m.tv.sms.cz) | 🔴 | https://github.com/iptv-org/epg/issues/2241 |
| [m.tving.com](sites/m.tving.com) | 🟢 | |
| [magticom.ge](sites/magticom.ge) | 🟢 | |
| [mako.co.il](sites/mako.co.il) | 🟢 | |
| [maxtv.hrvatskitelekom.hr](sites/maxtv.hrvatskitelekom.hr) | 🟢 | |
| [maxtvgo.mk](sites/maxtvgo.mk) | 🟢 | |
| [mediagenie.co.kr](sites/mediagenie.co.kr) | 🟢 | |
| [mediaklikk.hu](sites/mediaklikk.hu) | 🟢 | |
| [mediaset.it](sites/mediaset.it) | 🟢 | |
| [melita.com](sites/melita.com) | 🟢 | |
| [meo.pt](sites/meo.pt) | 🟢 | |
| [meuguia.tv](sites/meuguia.tv) | 🟢 | |
| [mewatch.sg](sites/mewatch.sg) | 🟢 | |
| [mi.tv](sites/mi.tv) | 🟢 | |
| [mncvision.id](sites/mncvision.id) | 🟢 | |
| [moji.id](sites/moji.id) | 🟢 | |
| [mon-programme-tv.be](sites/mon-programme-tv.be) | 🟢 | |
| [movistarplus.es](sites/movistarplus.es) | 🟢 | |
| [mtel.ba](sites/mtel.ba) | 🟢 | |
| [mts.rs](sites/mts.rs) | 🟢 | |
| [mujtvprogram.cz](sites/mujtvprogram.cz) | 🟢 | |
| [musor.tv](sites/musor.tv) | 🟢 | |
| [myafn.dodmedia.osd.mil](sites/myafn.dodmedia.osd.mil) | 🟢 | |
| [mysky.com.ph](sites/mysky.com.ph) | 🟢 | |
| [mytelly.co.uk](sites/mytelly.co.uk) | 🟢 | |
| [mytvsuper.com](sites/mytvsuper.com) | 🟢 | |
| [nhk.or.jp](sites/nhk.or.jp) | 🟢 | |
| [nhkworldpremium.com](sites/nhkworldpremium.com) | 🟢 | |
| [nos.pt](sites/nos.pt) | 🔴 | https://github.com/iptv-org/epg/issues/2183 |
| [novacyprus.com](sites/novacyprus.com) | 🟢 | |
| [novasports.gr](sites/novasports.gr) | 🟢 | |
| [nowplayer.now.com](sites/nowplayer.now.com) | 🔴 | https://github.com/iptv-org/epg/issues/2247 |
| [nuevosiglo.com.uy](sites/nuevosiglo.com.uy) | 🟢 | |
| [nzxmltv.com](sites/nzxmltv.com) | 🟢 | |
| [ontvtonight.com](sites/ontvtonight.com) | 🟢 | |
| [osn.com](sites/osn.com) | 🟢 | |
| [pbsguam.org](sites/pbsguam.org) | 🟢 | |
| [playtv.unifi.com.my](sites/playtv.unifi.com.my) | 🟢 | |
| [plex.tv](sites/plex.tv) | 🟢 | |
| [programacion-tv.elpais.com](sites/programacion-tv.elpais.com) | 🟢 | |
| [programacion.tcc.com.uy](sites/programacion.tcc.com.uy) | 🟢 | |
| [programetv.ro](sites/programetv.ro) | 🟢 | |
| [programme-tv.net](sites/programme-tv.net) | 🟢 | |
| [programme-tv.vini.pf](sites/programme-tv.vini.pf) | 🟢 | |
| [programme.tvb.com](sites/programme.tvb.com) | 🔴 | https://github.com/iptv-org/epg/issues/2254 |
| [programtv.onet.pl](sites/programtv.onet.pl) | 🟢 | |
| [proximusmwc.be](sites/proximusmwc.be) | 🔴 | https://github.com/iptv-org/epg/issues/2212 |
| [raiplay.it](sites/raiplay.it) | 🟢 | |
| [reportv.com.ar](sites/reportv.com.ar) | 🟢 | |
| [rev.bs](sites/rev.bs) | 🔴 | https://github.com/iptv-org/epg/issues/2255 |
| [rotana.net](sites/rotana.net) | 🔴 | https://github.com/iptv-org/epg/issues/2256 |
| [rtb.gov.bn](sites/rtb.gov.bn) | 🔴 | https://github.com/iptv-org/epg/issues/2257 |
| [rthk.hk](sites/rthk.hk) | 🟢 | |
| [rtmklik.rtm.gov.my](sites/rtmklik.rtm.gov.my) | 🟢 | |
| [rtp.pt](sites/rtp.pt) | 🟢 | |
| [ruv.is](sites/ruv.is) | 🟢 | |
| [sat.tv](sites/sat.tv) | 🟢 | |
| [shahid.mbc.net](sites/shahid.mbc.net) | 🟢 | |
| [siba.com.co](sites/siba.com.co) | 🟢 | |
| [singtel.com](sites/singtel.com) | 🟢 | |
| [sjonvarp.is](sites/sjonvarp.is) | 🟢 | |
| [sky.co.nz](sites/sky.co.nz) | 🟢 | |
| [sky.com](sites/sky.com) | 🟢 | |
| [sky.de](sites/sky.de) | 🟢 | |
| [starhubtvplus.com](sites/starhubtvplus.com) | 🟢 | |
| [startimestv.com](sites/startimestv.com) | 🟢 | |
| [streamingtvguides.com](sites/streamingtvguides.com) | 🟢 | |
| [superguidatv.it](sites/superguidatv.it) | 🟢 | |
| [taiwanplus.com](sites/taiwanplus.com) | 🟢 | |
| [tapdmv.com](sites/tapdmv.com) | 🟢 | |
| [telenet.tv](sites/telenet.tv) | 🟢 | |
| [teliatv.ee](sites/teliatv.ee) | 🟢 | |
| [telkussa.fi](sites/telkussa.fi) | 🟢 | |
| [telsu.fi](sites/telsu.fi) | 🟢 | |
| [tivu.tv](sites/tivu.tv) | 🟢 | |
| [toonamiaftermath.com](sites/toonamiaftermath.com) | 🟢 | |
| [turksatkablo.com.tr](sites/turksatkablo.com.tr) | 🟢 | |
| [tv-programme.telecablesat.fr](sites/tv-programme.telecablesat.fr) | 🟢 | |
| [tv.blue.ch](sites/tv.blue.ch) | 🟢 | |
| [tv.cctv.com](sites/tv.cctv.com) | 🟢 | |
| [tv.dir.bg](sites/tv.dir.bg) | 🟢 | |
| [tv.lv](sites/tv.lv) | 🟢 | |
| [tv.magenta.at](sites/tv.magenta.at) | 🟢 | |
| [tv.mail.ru](sites/tv.mail.ru) | 🟢 | |
| [tv.movistar.com.pe](sites/tv.movistar.com.pe) | 🟢 | |
| [tv.nu](sites/tv.nu) | 🟢 | |
| [tv.post.lu](sites/tv.post.lu) | 🟢 | |
| [tv.trueid.net](sites/tv.trueid.net) | 🔴 | https://github.com/iptv-org/epg/issues/2164 |
| [tv.yandex.ru](sites/tv.yandex.ru) | 🟢 | |
| [tv.yettel.hu](sites/tv.yettel.hu) | 🔴 | https://github.com/iptv-org/epg/issues/2263 |
| [tv2go.t-2.net](sites/tv2go.t-2.net) | 🟢 | |
| [tv24.co.uk](sites/tv24.co.uk) | 🟢 | |
| [tv24.se](sites/tv24.se) | 🟢 | |
| [tva.tv](sites/tva.tv) | 🔴 | https://github.com/iptv-org/epg/issues/2264 |
| [tvarenasport.com](sites/tvarenasport.com) | 🔴 | https://github.com/iptv-org/epg/issues/2266 |
| [tvarenasport.hr](sites/tvarenasport.hr) | 🔴 | https://github.com/iptv-org/epg/issues/2267 |
| [tvcesoir.fr](sites/tvcesoir.fr) | 🟢 | |
| [tvcubana.icrt.cu](sites/tvcubana.icrt.cu) | 🟢 | |
| [tvgids.nl](sites/tvgids.nl) | 🟢 | |
| [tvguide.com](sites/tvguide.com) | 🟢 | |
| [tvguide.myjcom.jp](sites/tvguide.myjcom.jp) | 🟢 | |
| [tvhebdo.com](sites/tvhebdo.com) | 🟢 | |
| [tvheute.at](sites/tvheute.at) | 🟢 | |
| [tvim.tv](sites/tvim.tv) | 🟢 | |
| [tvireland.ie](sites/tvireland.ie) | 🟢 | |
| [tvmi.mt](sites/tvmi.mt) | 🟢 | |
| [tvmusor.hu](sites/tvmusor.hu) | 🟢 | |
| [tvpassport.com](sites/tvpassport.com) | 🟢 | |
| [tvplus.com.tr](sites/tvplus.com.tr) | 🟢 | |
| [tvprofil.com](sites/tvprofil.com) | 🟢 | |
| [tvtv.us](sites/tvtv.us) | 🔴 | https://github.com/iptv-org/epg/issues/2176 |
| [vidio.com](sites/vidio.com) | 🟢 | |
| [virginmediatelevision.ie](sites/virginmediatelevision.ie) | 🟢 | |
| [virgintvgo.virginmedia.com](sites/virgintvgo.virginmedia.com) | 🟢 | |
| [visionplus.id](sites/visionplus.id) | 🟢 | |
| [vivacom.bg](sites/vivacom.bg) | 🔴 | https://github.com/iptv-org/epg/issues/2270 |
| [vtm.be](sites/vtm.be) | 🟢 | |
| [walesi.com.fj](sites/walesi.com.fj) | 🟢 | |
| [watch.sportsnet.ca](sites/watch.sportsnet.ca) | 🟢 | |
| [watchyour.tv](sites/watchyour.tv) | 🟢 | |
| [wavve.com](sites/wavve.com) | 🟢 | |
| [web.magentatv.de](sites/web.magentatv.de) | 🟢 | |
| [webtv.delta.nl](sites/webtv.delta.nl) | 🟢 | |
| [worldfishingnetwork.com](sites/worldfishingnetwork.com) | 🟢 | |
| [xumo.tv](sites/xumo.tv) | 🟢 | |
| [zap.co.ao](sites/zap.co.ao) | 🟢 | |
| [ziggogo.tv](sites/ziggogo.tv) | 🟢 | |
| [znbc.co.zm](sites/znbc.co.zm) | 🟢 | |
| [zuragt.mn](sites/zuragt.mn) | 🟢 | |
# Sites
<table>
<thead>
<tr><th align="left">Site</th><th align="left" colspan="2">Channels<br>(total / with xmltv-id)</th><th align="left">Status</th><th align="left">Notes</th></tr>
</thead>
<tbody>
<tr><td><a href="sites/9tv.co.il">9tv.co.il</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/abc.net.au">abc.net.au</a></td><td align="right">548</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/allente.dk">allente.dk</a></td><td align="right">74</td><td align="right">44</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/allente.fi">allente.fi</a></td><td align="right">71</td><td align="right">25</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/allente.no">allente.no</a></td><td align="right">84</td><td align="right">53</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/allente.se">allente.se</a></td><td align="right">92</td><td align="right">92</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/andorradifusio.ad">andorradifusio.ad</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/anteltv.com.uy">anteltv.com.uy</a></td><td align="right">53</td><td align="right">47</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/antennaeurope.gr">antennaeurope.gr</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/antennapacific.gr">antennapacific.gr</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/antennasatellite.gr">antennasatellite.gr</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/arianaafgtv.com">arianaafgtv.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/arianatelevision.com">arianatelevision.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/arirang.com">arirang.com</a></td><td align="right">3</td><td align="right">3</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/artonline.tv">artonline.tv</a></td><td align="right">5</td><td align="right">5</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/awilime.com">awilime.com</a></td><td align="right">111</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/bein.com">bein.com</a></td><td align="right">160</td><td align="right">160</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/beinsports.com">beinsports.com</a></td><td align="right">104</td><td align="right">81</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/berrymedia.co.kr">berrymedia.co.kr</a></td><td align="right">5</td><td align="right">5</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/cableplus.com.uy">cableplus.com.uy</a></td><td align="right">171</td><td align="right">47</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/canalplus.com">canalplus.com</a></td><td align="right">11720</td><td align="right">212</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/cgates.lt">cgates.lt</a></td><td align="right">102</td><td align="right">61</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/chada.ma">chada.ma</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/chaines-tv.orange.fr">chaines-tv.orange.fr</a></td><td align="right">296</td><td align="right">147</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/clickthecity.com">clickthecity.com</a></td><td align="right">32</td><td align="right">30</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/content.astro.com.my">content.astro.com.my</a></td><td align="right">157</td><td align="right">112</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/cosmotetv.gr">cosmotetv.gr</a></td><td align="right">108</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/cubmu.com">cubmu.com</a></td><td align="right">174</td><td align="right">122</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/cyta.com.cy">cyta.com.cy</a></td><td align="right">116</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/dens.tv">dens.tv</a></td><td align="right">67</td><td align="right">64</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/digea.gr">digea.gr</a></td><td align="right">92</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/digiturk.com.tr">digiturk.com.tr</a></td><td align="right">108</td><td align="right">107</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/directv.com">directv.com</a></td><td align="right">1043</td><td align="right">698</td><td align="center">🔴</td><td>https://github.com/iptv-org/epg/issues/2284</td></tr>
<tr><td><a href="sites/directv.com.ar">directv.com.ar</a></td><td align="right">412</td><td align="right">229</td><td align="center">🔴</td><td>https://github.com/iptv-org/epg/issues/2339</td></tr>
<tr><td><a href="sites/directv.com.uy">directv.com.uy</a></td><td align="right">143</td><td align="right">142</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/dishtv.in">dishtv.in</a></td><td align="right">448</td><td align="right">89</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/dna.fi">dna.fi</a></td><td align="right">122</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/dsmart.com.tr">dsmart.com.tr</a></td><td align="right">104</td><td align="right">90</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/dstv.com">dstv.com</a></td><td align="right">6983</td><td align="right">181</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/dtv8.net">dtv8.net</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/elcinema.com">elcinema.com</a></td><td align="right">262</td><td align="right">226</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/ena.skylifetv.co.kr">ena.skylifetv.co.kr</a></td><td align="right">6</td><td align="right">6</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/energeek.cl">energeek.cl</a></td><td align="right">6</td><td align="right">3</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/entertainment.ie">entertainment.ie</a></td><td align="right">109</td><td align="right">95</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/epg.112114.xyz">epg.112114.xyz</a></td><td align="right">930</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/epg.iptvx.one">epg.iptvx.one</a></td><td align="right">2862</td><td align="right">747</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/epg.telemach.ba">epg.telemach.ba</a></td><td align="right">259</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/epg.telemach.me">epg.telemach.me</a></td><td align="right">216</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/epgshare01.online">epgshare01.online</a></td><td align="right">20970</td><td align="right">17</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/firstmedia.com">firstmedia.com</a></td><td align="right">116</td><td align="right">101</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/foxsports.com.au">foxsports.com.au</a></td><td align="right">7</td><td align="right">7</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/foxtel.com.au">foxtel.com.au</a></td><td align="right">155</td><td align="right">87</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/freetv.tv">freetv.tv</a></td><td align="right">7</td><td align="right">7</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/freeview.co.uk">freeview.co.uk</a></td><td align="right">171</td><td align="right">101</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/frikanalen.no">frikanalen.no</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/galamtv.kz">galamtv.kz</a></td><td align="right">27</td><td align="right">22</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/gatotv.com">gatotv.com</a></td><td align="right">475</td><td align="right">362</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/getafteritmedia.com">getafteritmedia.com</a></td><td align="right">5</td><td align="right">5</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/gigatv.3bbtv.co.th">gigatv.3bbtv.co.th</a></td><td align="right">79</td><td align="right">38</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/guiadetv.com">guiadetv.com</a></td><td align="right">124</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/guida.tv">guida.tv</a></td><td align="right">88</td><td align="right">88</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/guidatv.sky.it">guidatv.sky.it</a></td><td align="right">168</td><td align="right">153</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/horizon.tv">horizon.tv</a></td><td align="right">184</td><td align="right">172</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/hoy.tv">hoy.tv</a></td><td align="right">3</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/i.mjh.nz">i.mjh.nz</a></td><td align="right">6458</td><td align="right">1489</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/i24news.tv">i24news.tv</a></td><td align="right">4</td><td align="right">3</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/iltalehti.fi">iltalehti.fi</a></td><td align="right">142</td><td align="right">44</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/indihometv.com">indihometv.com</a></td><td align="right">130</td><td align="right">124</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/ionplustv.com">ionplustv.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/ipko.tv">ipko.tv</a></td><td align="right">194</td><td align="right">152</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/jiotv.com">jiotv.com</a></td><td align="right">1094</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/kan.org.il">kan.org.il</a></td><td align="right">3</td><td align="right">3</td><td align="center">🔴</td><td>https://github.com/iptv-org/epg/issues/2273</td></tr>
<tr><td><a href="sites/knr.gl">knr.gl</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/kvf.fo">kvf.fo</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/m.tv.sms.cz">m.tv.sms.cz</a></td><td align="right">1027</td><td align="right">451</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/m.tving.com">m.tving.com</a></td><td align="right">30</td><td align="right">26</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/magticom.ge">magticom.ge</a></td><td align="right">240</td><td align="right">110</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mako.co.il">mako.co.il</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/makrodigitaltelevision.com">makrodigitaltelevision.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/maxtvgo.mk">maxtvgo.mk</a></td><td align="right">110</td><td align="right">48</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mediagenie.co.kr">mediagenie.co.kr</a></td><td align="right">5</td><td align="right">4</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mediaklikk.hu">mediaklikk.hu</a></td><td align="right">8</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mediasetinfinity.mediaset.it">mediasetinfinity.mediaset.it</a></td><td align="right">13</td><td align="right">13</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/melita.com">melita.com</a></td><td align="right">127</td><td align="right">111</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/meo.pt">meo.pt</a></td><td align="right">216</td><td align="right">192</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/meuguia.tv">meuguia.tv</a></td><td align="right">102</td><td align="right">97</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mewatch.sg">mewatch.sg</a></td><td align="right">25</td><td align="right">24</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mi.tv">mi.tv</a></td><td align="right">2084</td><td align="right">620</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mncvision.id">mncvision.id</a></td><td align="right">276</td><td align="right">223</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/moji.id">moji.id</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mojmaxtv.hrvatskitelekom.hr">mojmaxtv.hrvatskitelekom.hr</a></td><td align="right">243</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mon-programme-tv.be">mon-programme-tv.be</a></td><td align="right">111</td><td align="right">95</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/movistarplus.es">movistarplus.es</a></td><td align="right">178</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mtel.ba">mtel.ba</a></td><td align="right">501</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mts.rs">mts.rs</a></td><td align="right">457</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mujtvprogram.cz">mujtvprogram.cz</a></td><td align="right">216</td><td align="right">203</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/musor.tv">musor.tv</a></td><td align="right">181</td><td align="right">146</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mysky.com.ph">mysky.com.ph</a></td><td align="right">115</td><td align="right">43</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mytelly.co.uk">mytelly.co.uk</a></td><td align="right">488</td><td align="right">401</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/mytvsuper.com">mytvsuper.com</a></td><td align="right">108</td><td align="right">99</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/neo.io">neo.io</a></td><td align="right">337</td><td align="right">241</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/nhkworldpremium.com">nhkworldpremium.com</a></td><td align="right">2</td><td align="right">2</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/nhl.com">nhl.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/nostv.pt">nostv.pt</a></td><td align="right">168</td><td align="right">155</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/novacyprus.com">novacyprus.com</a></td><td align="right">29</td><td align="right">24</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/novasports.gr">novasports.gr</a></td><td align="right">16</td><td align="right">16</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/nowplayer.now.com">nowplayer.now.com</a></td><td align="right">288</td><td align="right">229</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/nuevosiglo.com.uy">nuevosiglo.com.uy</a></td><td align="right">173</td><td align="right">47</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/nzxmltv.com">nzxmltv.com</a></td><td align="right">532</td><td align="right">118</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/ontvtonight.com">ontvtonight.com</a></td><td align="right">5177</td><td align="right">532</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/opto.sic.pt">opto.sic.pt</a></td><td align="right">4</td><td align="right">4</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/orangetv.orange.es">orangetv.orange.es</a></td><td align="right">168</td><td align="right">165</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/osn.com">osn.com</a></td><td align="right">118</td><td align="right">98</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/pbsguam.org">pbsguam.org</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/pickx.be">pickx.be</a></td><td align="right">404</td><td align="right">391</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/player.ee.co.uk">player.ee.co.uk</a></td><td align="right">241</td><td align="right">206</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/playtv.unifi.com.my">playtv.unifi.com.my</a></td><td align="right">66</td><td align="right">61</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/plex.tv">plex.tv</a></td><td align="right">170</td><td align="right">119</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/pluto.tv">pluto.tv</a></td><td align="right">3302</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programacion-tv.elpais.com">programacion-tv.elpais.com</a></td><td align="right">195</td><td align="right">105</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programacion.tcc.com.uy">programacion.tcc.com.uy</a></td><td align="right">149</td><td align="right">56</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programetv.ro">programetv.ro</a></td><td align="right">331</td><td align="right">225</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programme-tv.net">programme-tv.net</a></td><td align="right">295</td><td align="right">197</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programme-tv.vini.pf">programme-tv.vini.pf</a></td><td align="right">58</td><td align="right">2</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programme.tvb.com">programme.tvb.com</a></td><td align="right">8</td><td align="right">6</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/programtv.onet.pl">programtv.onet.pl</a></td><td align="right">590</td><td align="right">363</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/raiplay.it">raiplay.it</a></td><td align="right">17</td><td align="right">13</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/reportv.com.ar">reportv.com.ar</a></td><td align="right">163</td><td align="right">97</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/rikstv.no">rikstv.no</a></td><td align="right">80</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/rotana.net">rotana.net</a></td><td align="right">32</td><td align="right">28</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/rtb.gov.bn">rtb.gov.bn</a></td><td align="right">3</td><td align="right">3</td><td align="center">🔴</td><td>https://github.com/iptv-org/epg/issues/2257</td></tr>
<tr><td><a href="sites/rthk.hk">rthk.hk</a></td><td align="right">8</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/rtmklik.rtm.gov.my">rtmklik.rtm.gov.my</a></td><td align="right">8</td><td align="right">6</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/rtp.pt">rtp.pt</a></td><td align="right">10</td><td align="right">10</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/ruv.is">ruv.is</a></td><td align="right">2</td><td align="right">2</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/s.mxtv.jp">s.mxtv.jp</a></td><td align="right">2</td><td align="right">2</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/sat.tv">sat.tv</a></td><td align="right">31173</td><td align="right">277</td><td align="center">🔴</td><td>https://github.com/iptv-org/epg/issues/2685</td></tr>
<tr><td><a href="sites/shahid.mbc.net">shahid.mbc.net</a></td><td align="right">231</td><td align="right">165</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/siba.com.co">siba.com.co</a></td><td align="right">98</td><td align="right">96</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/singtel.com">singtel.com</a></td><td align="right">155</td><td align="right">113</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/sjonvarp.is">sjonvarp.is</a></td><td align="right">13</td><td align="right">13</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/sky.co.nz">sky.co.nz</a></td><td align="right">111</td><td align="right">93</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/sky.com">sky.com</a></td><td align="right">532</td><td align="right">433</td><td align="center">🟢</td><td>https://github.com/iptv-org/epg/issues/2763</td></tr>
<tr><td><a href="sites/sky.de">sky.de</a></td><td align="right">75</td><td align="right">75</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/skylife.co.kr">skylife.co.kr</a></td><td align="right">251</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/skyperfectv.co.jp">skyperfectv.co.jp</a></td><td align="right">137</td><td align="right">130</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/snrt.ma">snrt.ma</a></td><td align="right">11</td><td align="right">7</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/sporttv.pt">sporttv.pt</a></td><td align="right">9</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/starhubtvplus.com">starhubtvplus.com</a></td><td align="right">232</td><td align="right">208</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/startimestv.com">startimestv.com</a></td><td align="right">77</td><td align="right">58</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/stod2.is">stod2.is</a></td><td align="right">12</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/streamingtvguides.com">streamingtvguides.com</a></td><td align="right">3066</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/superguidatv.it">superguidatv.it</a></td><td align="right">204</td><td align="right">163</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/taiwanplus.com">taiwanplus.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tapdmv.com">tapdmv.com</a></td><td align="right">39</td><td align="right">7</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/telebilbao.es">telebilbao.es</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/teleboy.ch">teleboy.ch</a></td><td align="right">325</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/telenet.tv">telenet.tv</a></td><td align="right">260</td><td align="right">91</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/teliatv.ee">teliatv.ee</a></td><td align="right">342</td><td align="right">233</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/telkussa.fi">telkussa.fi</a></td><td align="right">66</td><td align="right">32</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/telsu.fi">telsu.fi</a></td><td align="right">17</td><td align="right">15</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/thesportplus.com">thesportplus.com</a></td><td align="right">3</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tivie.id">tivie.id</a></td><td align="right">50</td><td align="right">49</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tivu.tv">tivu.tv</a></td><td align="right">69</td><td align="right">66</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/toonamiaftermath.com">toonamiaftermath.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/turksatkablo.com.tr">turksatkablo.com.tr</a></td><td align="right">175</td><td align="right">167</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv-programme.telecablesat.fr">tv-programme.telecablesat.fr</a></td><td align="right">268</td><td align="right">250</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv-spored.siol.net">tv-spored.siol.net</a></td><td align="right">312</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.blue.ch">tv.blue.ch</a></td><td align="right">1030</td><td align="right">565</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.cctv.com">tv.cctv.com</a></td><td align="right">94</td><td align="right">88</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.dir.bg">tv.dir.bg</a></td><td align="right">111</td><td align="right">96</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.lv">tv.lv</a></td><td align="right">137</td><td align="right">49</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.magenta.at">tv.magenta.at</a></td><td align="right">307</td><td align="right">228</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.mail.ru">tv.mail.ru</a></td><td align="right">664</td><td align="right">644</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.movistar.com.pe">tv.movistar.com.pe</a></td><td align="right">282</td><td align="right">40</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.nu">tv.nu</a></td><td align="right">199</td><td align="right">181</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.post.lu">tv.post.lu</a></td><td align="right">332</td><td align="right">242</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.sfr.fr">tv.sfr.fr</a></td><td align="right">503</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.trueid.net">tv.trueid.net</a></td><td align="right">266</td><td align="right">74</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv.yandex.ru">tv.yandex.ru</a></td><td align="right">97</td><td align="right">67</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv24.co.uk">tv24.co.uk</a></td><td align="right">1072</td><td align="right">39</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv24.se">tv24.se</a></td><td align="right">326</td><td align="right">157</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tv2go.t-2.net">tv2go.t-2.net</a></td><td align="right">335</td><td align="right">254</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvarenasport.com">tvarenasport.com</a></td><td align="right">14</td><td align="right">12</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvarenasport.hr">tvarenasport.hr</a></td><td align="right">10</td><td align="right">10</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvcesoir.fr">tvcesoir.fr</a></td><td align="right">135</td><td align="right">133</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvcubana.icrt.cu">tvcubana.icrt.cu</a></td><td align="right">10</td><td align="right">10</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvgids.nl">tvgids.nl</a></td><td align="right">115</td><td align="right">90</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvguide.com">tvguide.com</a></td><td align="right">153</td><td align="right">150</td><td align="center">🟡</td><td>https://github.com/iptv-org/epg/issues/2644</td></tr>
<tr><td><a href="sites/tvguide.myjcom.jp">tvguide.myjcom.jp</a></td><td align="right">145</td><td align="right">140</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvhebdo.com">tvhebdo.com</a></td><td align="right">317</td><td align="right">215</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvheute.at">tvheute.at</a></td><td align="right">53</td><td align="right">53</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvi.iol.pt">tvi.iol.pt</a></td><td align="right">6</td><td align="right">6</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvim.tv">tvim.tv</a></td><td align="right">25</td><td align="right">19</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvinsider.com">tvinsider.com</a></td><td align="right">374</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvireland.ie">tvireland.ie</a></td><td align="right">334</td><td align="right">304</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvkaista.org">tvkaista.org</a></td><td align="right">149</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvmi.mt">tvmi.mt</a></td><td align="right">3</td><td align="right">3</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvmusor.hu">tvmusor.hu</a></td><td align="right">99</td><td align="right">68</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvmustra.hu">tvmustra.hu</a></td><td align="right">188</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvpassport.com">tvpassport.com</a></td><td align="right">19287</td><td align="right">2511</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvplus.com.tr">tvplus.com.tr</a></td><td align="right">143</td><td align="right">134</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvprofil.com">tvprofil.com</a></td><td align="right">5836</td><td align="right">457</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/tvtv.us">tvtv.us</a></td><td align="right">2299</td><td align="right">2256</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/v3.myafn.dodmedia.osd.mil">v3.myafn.dodmedia.osd.mil</a></td><td align="right">8</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/vidio.com">vidio.com</a></td><td align="right">47</td><td align="right">46</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/virginmediatelevision.ie">virginmediatelevision.ie</a></td><td align="right">5</td><td align="right">5</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/virgintvgo.virginmedia.com">virgintvgo.virginmedia.com</a></td><td align="right">238</td><td align="right">195</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/visionplus.id">visionplus.id</a></td><td align="right">250</td><td align="right">226</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/vivoplay.com.br">vivoplay.com.br</a></td><td align="right">389</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/vtm.be">vtm.be</a></td><td align="right">7</td><td align="right">6</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/walesi.com.fj">walesi.com.fj</a></td><td align="right">9</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/watch.sportsnet.ca">watch.sportsnet.ca</a></td><td align="right">8</td><td align="right">8</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/watchyour.tv">watchyour.tv</a></td><td align="right">40</td><td align="right">24</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/wavve.com">wavve.com</a></td><td align="right">77</td><td align="right">76</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/web.magentatv.de">web.magentatv.de</a></td><td align="right">348</td><td align="right">247</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/webtv.delta.nl">webtv.delta.nl</a></td><td align="right">247</td><td align="right">218</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/winplay.co">winplay.co</a></td><td align="right">2</td><td align="right">2</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/worldfishingnetwork.com">worldfishingnetwork.com</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/www3.nhk.or.jp">www3.nhk.or.jp</a></td><td align="right">1</td><td align="right">1</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/xem.kplus.vn">xem.kplus.vn</a></td><td align="right">77</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/xumo.tv">xumo.tv</a></td><td align="right">350</td><td align="right">33</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/yes.co.il">yes.co.il</a></td><td align="right">174</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/zap.co.ao">zap.co.ao</a></td><td align="right">114</td><td align="right">64</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/zap2it.com">zap2it.com</a></td><td align="right">595</td><td align="right">0</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/ziggogo.tv">ziggogo.tv</a></td><td align="right">152</td><td align="right">130</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/znbc.co.zm">znbc.co.zm</a></td><td align="right">4</td><td align="right">4</td><td align="center">🟢</td><td></td></tr>
<tr><td><a href="sites/zuragt.mn">zuragt.mn</a></td><td align="right">36</td><td align="right">25</td><td align="center">🟢</td><td></td></tr>
</tbody>
</table>

55
eslint.config.mjs Normal file
View file

@ -0,0 +1,55 @@
import typescriptEslint from '@typescript-eslint/eslint-plugin'
import globals from 'globals'
import tsParser from '@typescript-eslint/parser'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import js from '@eslint/js'
import { FlatCompat } from '@eslint/eslintrc'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
})
export default [
...compat.extends('eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'),
{
plugins: {
'@typescript-eslint': typescriptEslint
},
languageOptions: {
globals: {
...globals.node,
...globals.jest
},
parser: tsParser,
ecmaVersion: 'latest',
sourceType: 'module'
},
rules: {
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'off',
'no-case-declarations': 'off',
'linebreak-style': ['error', 'windows'],
quotes: [
'error',
'single',
{
avoidEscape: true
}
],
semi: ['error', 'never']
}
},
{
ignores: ['tests/__data__/']
}
]

7488
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,36 +1,55 @@
{
"name": "epg",
"scripts": {
"act:check": "act pull_request -W .github/workflows/check.yml",
"act:update": "act workflow_dispatch -W .github/workflows/update.yml",
"api:load": "npx tsx scripts/commands/api/load.ts",
"api:generate": "npx tsx scripts/commands/api/generate.ts",
"channels:lint": "npx tsx scripts/commands/channels/lint.ts",
"channels:lint": "npx tsx scripts/commands/channels/lint.mts",
"channels:parse": "npx tsx scripts/commands/channels/parse.ts",
"channels:editor": "npx tsx scripts/commands/channels/editor.ts",
"channels:edit": "npx tsx scripts/commands/channels/edit.ts",
"channels:validate": "npx tsx scripts/commands/channels/validate.ts",
"sites:init": "npx tsx scripts/commands/sites/init.ts",
"sites:update": "npx tsx scripts/commands/sites/update.ts",
"grab": "npx tsx scripts/commands/epg/grab.ts",
"serve": "npx serve",
"lint": "npx eslint \"{scripts,tests}/**/*.{ts,js}\"",
"lint": "npx eslint \"{scripts,tests,sites}/**/*.{ts,mts,js}\"",
"test": "run-script-os",
"test:win32": "SET \"TZ=Pacific/Nauru\" && npx jest --runInBand",
"test:default": "TZ=Pacific/Nauru npx jest --runInBand",
"postinstall": "npm run api:load"
"postinstall": "skip-postinstall || npm run api:load",
"prepare": "husky"
},
"private": true,
"author": "Arhey",
"license": "MIT",
"license": "UNLICENSED",
"jest": {
"setupFiles": [
"<rootDir>/node_modules/jest-offline"
],
"transform": {
"^.+\\.(ts|js)$": "ts-jest"
"^.+\\.(ts|js)$": "@swc/jest"
},
"testRegex": "(tests|sites)/(.*?/)?.*test.(js|ts)$",
"testTimeout": 10000
"testMatch": [
"<rootDir>/sites/**/*.test.(js|ts)",
"<rootDir>/tests/commands/**/*.test.(js|ts)"
],
"testTimeout": 10000,
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!parse-duration/.*)"
]
},
"dependencies": {
"@alex_neo/jest-expect-message": "^1.0.5",
"@freearhey/core": "^0.3.1",
"@freearhey/search-js": "^0.1.1",
"@octokit/core": "^4.1.0",
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.17.0",
"@freearhey/core": "^0.7.0",
"@freearhey/search-js": "^0.1.2",
"@ntlab/sfetch": "^1.2.0",
"@octokit/core": "^6.1.3",
"@octokit/plugin-paginate-rest": "^11.3.6",
"@octokit/plugin-rest-endpoint-methods": "^13.2.6",
"@swc/core": "^1.10.4",
"@swc/jest": "^0.2.37",
"@types/cli-progress": "^3.11.3",
"@types/fs-extra": "^11.0.2",
"@types/inquirer": "^9.0.3",
@ -38,53 +57,57 @@
"@types/lodash": "^4.14.199",
"@types/node-cleanup": "^2.1.2",
"@types/numeral": "^2.0.3",
"@typescript-eslint/eslint-plugin": "^6.7.3",
"@typescript-eslint/eslint-plugin": "^8.18.0",
"@typescript-eslint/parser": "^8.20.0",
"axios": "^1.5.1",
"axios-cookiejar-support": "^4.0.7",
"axios-cookiejar-support": "^5.0.4",
"chalk": "^4.1.2",
"cheerio": "^1.0.0-rc.10",
"cli-progress": "^3.12.0",
"commander": "^8.2.0",
"consola": "^3.2.3",
"cron": "^2.4.3",
"csv-parser": "^3.0.0",
"cwait": "^1.1.2",
"dayjs": "^1.11.10",
"epg-grabber": "^0.36.1",
"epg-parser": "^0.2.0",
"eslint": "^8.17.0",
"epg-grabber": "^0.38.0",
"epg-parser": "^0.3.1",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.0.0",
"form-data": "^4.0.0",
"fs-extra": "^10.0.1",
"glob": "^7.2.0",
"globals": "^15.14.0",
"husky": "^9.1.7",
"iconv-lite": "^0.4.24",
"inquirer": "^8.2.6",
"inquirer": "^12.5.0",
"jest": "^29.7.0",
"jest-offline": "^1.0.1",
"langs": "^2.0.0",
"libxmljs2": "^0.33.0",
"libxml2-wasm": "^0.5.0",
"lodash": "^4.17.21",
"luxon": "^3.3.0",
"markdown-include": "^0.4.3",
"mockdate": "^3.0.5",
"nedb-promises": "^6.0.3",
"node-cleanup": "^2.1.2",
"node-gzip": "^1.1.2",
"numeral": "^2.0.6",
"parse-duration": "^1.0.0",
"pako": "^2.1.0",
"parse-duration": "^2.1.3",
"pdf-parse": "^1.1.1",
"serve": "^14.2.0",
"pm2": "^5.4.3",
"readline": "^1.3.0",
"run-script-os": "^1.1.6",
"serve": "^14.2.4",
"signale": "^1.4.0",
"skip-postinstall": "^1.0.0",
"socks-proxy-agent": "^8.0.5",
"srcset": "^4.0.0",
"table2array": "^0.0.2",
"tabletojson": "^2.0.7",
"tough-cookie": "^4.1.3",
"tough-cookie": "^5.0.0",
"transliteration": "^2.2.0",
"ts-jest": "^29.1.1",
"tsx": "^3.13.0",
"tsx": "^4.19.2",
"unzipit": "^1.4.0",
"wildcard-match": "^5.1.2"
},
"devDependencies": {
"run-script-os": "^1.1.6"
}
}

23
pm2.config.js Normal file
View file

@ -0,0 +1,23 @@
module.exports = {
apps: [
{
name: 'serve',
script: 'npx serve -- public',
instances: 1,
watch: false,
autorestart: true
},
{
name: 'grab',
script: process.env.SITE
? `npm run grab -- --site=${process.env.SITE} ${
process.env.CLANG ? `--lang=${process.env.CLANG}` : ''
} --output=public/guide.xml`
: 'npm run grab -- --channels=channels.xml --output=public/guide.xml',
cron_restart: process.env.CRON || null,
instances: 1,
watch: false,
autorestart: false
}
]
}

View file

@ -1,51 +1,56 @@
import { Logger, Storage, Collection } from '@freearhey/core'
import { ChannelsParser } from '../../core'
import path from 'path'
import { SITES_DIR, API_DIR } from '../../constants'
import { Channel } from 'epg-grabber'
type OutputItem = {
channel: string | null
site: string
site_id: string
site_name: string
lang: string
}
async function main() {
const logger = new Logger()
logger.start('staring...')
logger.info('loading channels...')
const sitesStorage = new Storage(SITES_DIR)
const parser = new ChannelsParser({ storage: sitesStorage })
let files: string[] = []
files = await sitesStorage.list('**/*.channels.xml')
let parsedChannels = new Collection()
for (const filepath of files) {
parsedChannels = parsedChannels.concat(await parser.parse(filepath))
}
logger.info(` found ${parsedChannels.count()} channel(s)`)
const output = parsedChannels.map((channel: Channel): OutputItem => {
return {
channel: channel.xmltv_id || null,
site: channel.site || '',
site_id: channel.site_id || '',
site_name: channel.name,
lang: channel.lang || ''
}
})
const apiStorage = new Storage(API_DIR)
const outputFilename = 'guides.json'
await apiStorage.save('guides.json', output.toJSON())
logger.info(`saved to "${path.join(API_DIR, outputFilename)}"`)
}
main()
import { Logger, Storage, Collection } from '@freearhey/core'
import { ChannelsParser } from '../../core'
import path from 'path'
import { SITES_DIR, API_DIR } from '../../constants'
import epgGrabber from 'epg-grabber'
type OutputItem = {
channel: string | null
feed: string | null
site: string
site_id: string
site_name: string
lang: string
}
async function main() {
const logger = new Logger()
logger.start('staring...')
logger.info('loading channels...')
const sitesStorage = new Storage(SITES_DIR)
const parser = new ChannelsParser({ storage: sitesStorage })
let files: string[] = []
files = await sitesStorage.list('**/*.channels.xml')
let parsedChannels = new Collection()
for (const filepath of files) {
parsedChannels = parsedChannels.concat(await parser.parse(filepath))
}
logger.info(` found ${parsedChannels.count()} channel(s)`)
const output = parsedChannels.map((channel: epgGrabber.Channel): OutputItem => {
const xmltv_id = channel.xmltv_id || ''
const [channelId, feedId] = xmltv_id.split('@')
return {
channel: channelId || null,
feed: feedId || null,
site: channel.site || '',
site_id: channel.site_id || '',
site_name: channel.name,
lang: channel.lang || ''
}
})
const apiStorage = new Storage(API_DIR)
const outputFilename = 'guides.json'
await apiStorage.save('guides.json', output.toJSON())
logger.info(`saved to "${path.join(API_DIR, outputFilename)}"`)
}
main()

View file

@ -1,18 +1,24 @@
import { Logger } from '@freearhey/core'
import { ApiClient } from '../../core'
import { DATA_DIR } from '../../constants'
import { Storage } from '@freearhey/core'
import { DataLoader } from '../../core'
async function main() {
const logger = new Logger()
const client = new ApiClient({ logger })
const storage = new Storage(DATA_DIR)
const loader = new DataLoader({ storage })
const requests = [
client.download('channels.json'),
client.download('countries.json'),
client.download('regions.json'),
client.download('subdivisions.json')
]
await Promise.all(requests)
await Promise.all([
loader.download('blocklist.json'),
loader.download('categories.json'),
loader.download('channels.json'),
loader.download('countries.json'),
loader.download('languages.json'),
loader.download('regions.json'),
loader.download('subdivisions.json'),
loader.download('feeds.json'),
loader.download('timezones.json'),
loader.download('guides.json'),
loader.download('streams.json')
])
}
main()

View file

@ -1 +0,0 @@
/replace.ts

View file

@ -0,0 +1,217 @@
import { Storage, Collection, Logger, Dictionary } from '@freearhey/core'
import { select, input } from '@inquirer/prompts'
import { ChannelsParser, XML } from '../../core'
import { Channel, Feed } from '../../models'
import { DATA_DIR } from '../../constants'
import nodeCleanup from 'node-cleanup'
import { Command } from 'commander'
import readline from 'readline'
import sjs from '@freearhey/search-js'
import { DataProcessor, DataLoader } from '../../core'
import type { DataLoaderData } from '../../types/dataLoader'
import type { DataProcessorData } from '../../types/dataProcessor'
import epgGrabber from 'epg-grabber'
import { ChannelSearchableData } from '../../types/channel'
type ChoiceValue = { type: string; value?: Feed | Channel }
type Choice = { name: string; short?: string; value: ChoiceValue; default?: boolean }
if (process.platform === 'win32') {
readline
.createInterface({
input: process.stdin,
output: process.stdout
})
.on('SIGINT', function () {
process.emit('SIGINT')
})
}
const program = new Command()
program.argument('<filepath>', 'Path to *.channels.xml file to edit').parse(process.argv)
const filepath = program.args[0]
const logger = new Logger()
const storage = new Storage()
let parsedChannels = new Collection()
main(filepath)
nodeCleanup(() => {
save(filepath)
})
export default async function main(filepath: string) {
if (!(await storage.exists(filepath))) {
throw new Error(`File "${filepath}" does not exists`)
}
logger.info('loading data from api...')
const processor = new DataProcessor()
const dataStorage = new Storage(DATA_DIR)
const loader = new DataLoader({ storage: dataStorage })
const data: DataLoaderData = await loader.load()
const { feedsGroupedByChannelId, channels, channelsKeyById }: DataProcessorData =
processor.process(data)
logger.info('loading channels...')
const parser = new ChannelsParser({ storage })
parsedChannels = await parser.parse(filepath)
const parsedChannelsWithoutId = parsedChannels.filter(
(channel: epgGrabber.Channel) => !channel.xmltv_id
)
logger.info(
`found ${parsedChannels.count()} channels (including ${parsedChannelsWithoutId.count()} without ID)`
)
logger.info('creating search index...')
const items = channels.map((channel: Channel) => channel.getSearchable()).all()
const searchIndex = sjs.createIndex(items, {
searchable: ['name', 'altNames', 'guideNames', 'streamNames', 'feedFullNames']
})
logger.info('starting...\n')
for (const parsedChannel of parsedChannelsWithoutId.all()) {
try {
parsedChannel.xmltv_id = await selectChannel(
parsedChannel,
searchIndex,
feedsGroupedByChannelId,
channelsKeyById
)
} catch (err) {
logger.info(err.message)
break
}
}
parsedChannelsWithoutId.forEach((channel: epgGrabber.Channel) => {
if (channel.xmltv_id === '-') {
channel.xmltv_id = ''
}
})
}
async function selectChannel(
channel: epgGrabber.Channel,
searchIndex,
feedsGroupedByChannelId: Dictionary,
channelsKeyById: Dictionary
): Promise<string> {
const query = escapeRegex(channel.name)
const similarChannels = searchIndex
.search(query)
.map((item: ChannelSearchableData) => channelsKeyById.get(item.id))
const selected: ChoiceValue = await select({
message: `Select channel ID for "${channel.name}" (${channel.site_id}):`,
choices: getChannelChoises(new Collection(similarChannels)),
pageSize: 10
})
switch (selected.type) {
case 'skip':
return '-'
case 'type': {
const typedChannelId = await input({ message: ' Channel ID:' })
if (!typedChannelId) return ''
const selectedFeedId = await selectFeed(typedChannelId, feedsGroupedByChannelId)
if (selectedFeedId === '-') return typedChannelId
return [typedChannelId, selectedFeedId].join('@')
}
case 'channel': {
const selectedChannel = selected.value
if (!selectedChannel) return ''
const selectedFeedId = await selectFeed(selectedChannel.id, feedsGroupedByChannelId)
if (selectedFeedId === '-') return selectedChannel.id
return [selectedChannel.id, selectedFeedId].join('@')
}
}
return ''
}
async function selectFeed(channelId: string, feedsGroupedByChannelId: Dictionary): Promise<string> {
const channelFeeds = feedsGroupedByChannelId.has(channelId)
? new Collection(feedsGroupedByChannelId.get(channelId))
: new Collection()
const choices = getFeedChoises(channelFeeds)
const selected: ChoiceValue = await select({
message: `Select feed ID for "${channelId}":`,
choices,
pageSize: 10
})
switch (selected.type) {
case 'skip':
return '-'
case 'type':
return await input({ message: ' Feed ID:', default: 'SD' })
case 'feed':
const selectedFeed = selected.value
if (!selectedFeed) return ''
return selectedFeed.id
}
return ''
}
function getChannelChoises(channels: Collection): Choice[] {
const choises: Choice[] = []
channels.forEach((channel: Channel) => {
const names = new Collection([channel.name, ...channel.getAltNames().all()]).uniq().join(', ')
choises.push({
value: {
type: 'channel',
value: channel
},
name: `${channel.id} (${names})`,
short: `${channel.id}`
})
})
choises.push({ name: 'Type...', value: { type: 'type' } })
choises.push({ name: 'Skip', value: { type: 'skip' } })
return choises
}
function getFeedChoises(feeds: Collection): Choice[] {
const choises: Choice[] = []
feeds.forEach((feed: Feed) => {
let name = `${feed.id} (${feed.name})`
if (feed.isMain) name += ' [main]'
choises.push({
value: {
type: 'feed',
value: feed
},
default: feed.isMain,
name,
short: feed.id
})
})
choises.push({ name: 'Type...', value: { type: 'type' } })
choises.push({ name: 'Skip', value: { type: 'skip' } })
return choises
}
function save(filepath: string) {
if (!storage.existsSync(filepath)) return
const xml = new XML(parsedChannels)
storage.saveSync(filepath, xml.toString())
logger.info(`\nFile '${filepath}' successfully saved`)
}
function escapeRegex(string: string) {
return string.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&')
}

View file

@ -1,179 +0,0 @@
import { DATA_DIR } from '../../constants'
import { Storage, Collection, Dictionary, Logger } from '@freearhey/core'
import { ChannelsParser, XML, ApiChannel } from '../../core'
import { Channel } from 'epg-grabber'
import { transliterate } from 'transliteration'
import nodeCleanup from 'node-cleanup'
import { program } from 'commander'
import inquirer, { QuestionCollection } from 'inquirer'
import sj from '@freearhey/search-js'
program
.argument('<filepath>', 'Path to *.channels.xml file to edit')
.option('-c, --country <name>', 'Default country (ISO 3166 code)', 'US')
.parse(process.argv)
const filepath = program.args[0]
const programOptions = program.opts()
const defaultCountry = programOptions.country.toLowerCase()
const newLabel = ' [new]'
let options = new Collection()
async function main() {
const storage = new Storage()
if (!(await storage.exists(filepath))) {
throw new Error(`File "${filepath}" does not exists`)
}
const parser = new ChannelsParser({ storage })
const parsedChannels = await parser.parse(filepath)
options = parsedChannels.map((channel: Channel): { channel: Channel; delete: boolean } => {
return {
channel,
delete: false
}
})
const dataStorage = new Storage(DATA_DIR)
const channelsContent = await dataStorage.json('channels.json')
const channelsIndex = sj.createIndex(channelsContent)
const buffer = new Dictionary()
for (let option of options.all()) {
const channel: Channel = option.channel
if (channel.xmltv_id) {
if (channel.xmltv_id !== '-') {
buffer.set(`${channel.xmltv_id}/${channel.lang}`, true)
}
continue
}
const choices = getOptions(channelsIndex, channel)
const question: QuestionCollection = {
name: 'option',
message: `Choose xmltv_id for "${channel.name}" (${channel.site_id}):`,
type: 'list',
choices,
pageSize: 10
}
await inquirer.prompt(question).then(async selected => {
switch (selected.option) {
case 'Overwrite':
const input = await getInput(channel)
channel.xmltv_id = input.xmltv_id
break
case 'Skip':
channel.xmltv_id = '-'
break
default:
const [, xmltv_id] = selected.option
.replace(/ \[.*\]/, '')
.split('|')
.map((i: string) => i.trim().replace(newLabel, ''))
channel.xmltv_id = xmltv_id
break
}
const found = buffer.has(`${channel.xmltv_id}/${channel.lang}`)
if (found) {
const question: QuestionCollection = {
name: 'option',
message: `"${channel.xmltv_id}" already on the list. Choose an option:`,
type: 'list',
choices: ['Skip', 'Add', 'Delete'],
pageSize: 5
}
await inquirer.prompt(question).then(async selected => {
switch (selected.option) {
case 'Skip':
channel.xmltv_id = '-'
break
case 'Delete':
option.delete = true
break
default:
break
}
})
} else {
if (channel.xmltv_id !== '-') {
buffer.set(`${channel.xmltv_id}/${channel.lang}`, true)
}
}
})
}
}
main()
function save() {
const logger = new Logger()
const storage = new Storage()
if (!storage.existsSync(filepath)) return
const channels = options
.filter((option: { channel: Channel; delete: boolean }) => !option.delete)
.map((option: { channel: Channel; delete: boolean }) => option.channel)
const xml = new XML(channels)
storage.saveSync(filepath, xml.toString())
logger.info(`\nFile '${filepath}' successfully saved`)
}
nodeCleanup(() => {
save()
})
async function getInput(channel: Channel) {
const name = channel.name.trim()
const input = await inquirer.prompt([
{
name: 'xmltv_id',
message: ' ID:',
type: 'input',
default: generateCode(name, defaultCountry)
}
])
return { name, xmltv_id: input['xmltv_id'] }
}
function getOptions(channelsIndex, channel: Channel) {
const channelId = generateCode(channel.name, defaultCountry)
const query = channel.name
.replace(/\s(SD|TV|HD|SD\/HD|HDTV)$/i, '')
.replace(/(\(|\)|,)/gi, '')
.replace(/\-/gi, ' ')
.replace(/\+/gi, '')
const similar = channelsIndex.search(query).map(item => new ApiChannel(item))
const variants = new Collection()
variants.add(`${channel.name.trim()} | ${channelId}${newLabel}`)
similar.forEach((_channel: ApiChannel) => {
const altNames = _channel.altNames.notEmpty() ? ` (${_channel.altNames.join(',')})` : ''
const closed = _channel.closed ? ` [closed:${_channel.closed}]` : ''
const replacedBy = _channel.replacedBy ? `[replaced_by:${_channel.replacedBy}]` : ''
variants.add(`${_channel.name}${altNames} | ${_channel.id}${closed}${replacedBy}`)
})
variants.add('Overwrite')
variants.add('Skip')
return variants.all()
}
function generateCode(name: string, country: string) {
const channelId: string = transliterate(name)
.replace(/\+/gi, 'Plus')
.replace(/^&/gi, 'And')
.replace(/[^a-z\d]+/gi, '')
return `${channelId}.${country}`
}

View file

@ -0,0 +1,108 @@
import chalk from 'chalk'
import { program } from 'commander'
import { Storage, File } from '@freearhey/core'
import { XmlDocument, XsdValidator, XmlValidateError, ErrorDetail } from 'libxml2-wasm'
const xsd = `<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="channels">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="channel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="channel">
<xs:complexType mixed="true">
<xs:attribute use="required" ref="site"/>
<xs:attribute use="required" ref="lang"/>
<xs:attribute use="required" ref="site_id"/>
<xs:attribute name="xmltv_id" use="required" type="xs:string"/>
<xs:attribute name="logo" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:attribute name="site">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="site_id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="lang">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:schema>`
program.argument('[filepath]', 'Path to *.channels.xml files to check').parse(process.argv)
async function main() {
const storage = new Storage()
let errors: ErrorDetail[] = []
const files = program.args.length ? program.args : await storage.list('sites/**/*.channels.xml')
for (const filepath of files) {
const file = new File(filepath)
if (file.extension() !== 'xml') continue
const xml = await storage.load(filepath)
let localErrors: ErrorDetail[] = []
try {
const schema = XmlDocument.fromString(xsd)
const validator = XsdValidator.fromDoc(schema)
const doc = XmlDocument.fromString(xml)
validator.validate(doc)
schema.dispose()
validator.dispose()
doc.dispose()
} catch (_error) {
const error = _error as XmlValidateError
localErrors = localErrors.concat(error.details)
}
xml.split('\n').forEach((line: string, lineIndex: number) => {
const found = line.match(/='/)
if (found) {
const colIndex = found.index || 0
localErrors.push({
line: lineIndex + 1,
col: colIndex + 1,
message: 'Single quotes cannot be used in attributes'
})
}
})
if (localErrors.length) {
console.log(`\n${chalk.underline(filepath)}`)
localErrors.forEach((error: ErrorDetail) => {
const position = `${error.line}:${error.col}`
console.log(` ${chalk.gray(position.padEnd(4, ' '))} ${error.message.trim()}`)
})
errors = errors.concat(localErrors)
}
}
if (errors.length) {
console.log(chalk.red(`\n${errors.length} error(s)`))
process.exit(1)
}
}
main()

View file

@ -1,78 +0,0 @@
import chalk from 'chalk'
import libxml, { ValidationError } from 'libxmljs2'
import { program } from 'commander'
import { Logger, Storage, File } from '@freearhey/core'
const xsd = `<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="channels">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="channel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="channel">
<xs:complexType mixed="true">
<xs:attribute name="site" use="required" type="xs:string"/>
<xs:attribute name="lang" use="required" type="xs:string"/>
<xs:attribute name="site_id" use="required" type="xs:string"/>
<xs:attribute name="xmltv_id" use="required" type="xs:string"/>
<xs:attribute name="logo" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>`
program
.option(
'-c, --channels <path>',
'Path to channels.xml file to validate',
'sites/**/*.channels.xml'
)
.parse(process.argv)
const options = program.opts()
async function main() {
const logger = new Logger()
const storage = new Storage()
logger.info('options:')
logger.tree(options)
let errors: ValidationError[] = []
const files: string[] = await storage.list(options.channels)
for (const filepath of files) {
const file = new File(filepath)
if (file.extension() !== 'xml') continue
const xml = await storage.load(filepath)
let localErrors: ValidationError[] = []
const xsdDoc = libxml.parseXml(xsd)
const doc = libxml.parseXml(xml)
if (!doc.validate(xsdDoc)) {
localErrors = doc.validationErrors
}
if (localErrors.length) {
console.log(`\n${chalk.underline(filepath)}`)
localErrors.forEach((error: ValidationError) => {
const position = `${error.line}:${error.column}`
console.log(` ${chalk.gray(position.padEnd(4, ' '))} ${error.message.trim()}`)
})
errors = errors.concat(localErrors)
}
}
if (errors.length) {
console.log(chalk.red(`\n${errors.length} error(s)`))
process.exit(1)
}
}
main()

View file

@ -2,7 +2,7 @@ import { Logger, File, Collection, Storage } from '@freearhey/core'
import { ChannelsParser, XML } from '../../core'
import { Channel } from 'epg-grabber'
import { Command } from 'commander'
import path from 'path'
import { pathToFileURL } from 'node:url'
const program = new Command()
program
@ -26,7 +26,7 @@ async function main() {
const logger = new Logger()
const file = new File(options.config)
const dir = file.dirname()
const config = require(path.resolve(options.config))
const config = (await import(pathToFileURL(options.config).toString())).default
const outputFilepath = options.output || `${dir}/${config.site}.channels.xml`
let channels = new Collection()

View file

@ -1,20 +1,13 @@
import { Storage, Collection, Dictionary, File, Logger } from '@freearhey/core'
import { ChannelsParser, ApiChannel } from '../../core'
import { Storage, Collection, Dictionary, File } from '@freearhey/core'
import { ChannelsParser } from '../../core'
import { Channel } from '../../models'
import { program } from 'commander'
import chalk from 'chalk'
import langs from 'langs'
import { DATA_DIR } from '../../constants'
import { Channel } from 'epg-grabber'
import epgGrabber from 'epg-grabber'
program
.option(
'-c, --channels <path>',
'Path to channels.xml file to validate',
'sites/**/*.channels.xml'
)
.parse(process.argv)
const options = program.opts()
program.argument('[filepath]', 'Path to *.channels.xml files to validate').parse(process.argv)
type ValidationError = {
type: 'duplicate' | 'wrong_xmltv_id' | 'wrong_lang'
@ -26,34 +19,30 @@ type ValidationError = {
}
async function main() {
const logger = new Logger()
logger.info('options:')
logger.tree(options)
const parser = new ChannelsParser({ storage: new Storage() })
const dataStorage = new Storage(DATA_DIR)
const channelsContent = await dataStorage.json('channels.json')
const channels = new Collection(channelsContent).map(data => new ApiChannel(data))
const channelsData = await dataStorage.json('channels.json')
const channels = new Collection(channelsData).map(data => new Channel(data))
const channelsGroupedById = channels.groupBy((channel: Channel) => channel.id)
let totalFiles = 0
let totalErrors = 0
const storage = new Storage()
const files: string[] = await storage.list(options.channels)
const files = program.args.length ? program.args : await storage.list('sites/**/*.channels.xml')
for (const filepath of files) {
const file = new File(filepath)
if (file.extension() !== 'xml') continue
const parsedChannels = await parser.parse(filepath)
const bufferById = new Dictionary()
const bufferBySiteId = new Dictionary()
const errors: ValidationError[] = []
parsedChannels.forEach((channel: Channel) => {
const bufferSiteId: string = `${channel.site_id}:${channel.lang}`
if (bufferBySiteId.missing(bufferSiteId)) {
bufferBySiteId.set(bufferSiteId, true)
parsedChannels.forEach((channel: epgGrabber.Channel) => {
const bufferId: string = channel.site_id
if (bufferBySiteId.missing(bufferId)) {
bufferBySiteId.set(bufferId, true)
} else {
errors.push({ type: 'duplicate', ...channel })
totalErrors++
@ -65,24 +54,12 @@ async function main() {
}
if (!channel.xmltv_id) return
const foundChannel = channels.first(
(_channel: ApiChannel) => _channel.id === channel.xmltv_id
)
const [channelId] = channel.xmltv_id.split('@')
const foundChannel = channelsGroupedById.get(channelId)
if (!foundChannel) {
errors.push({ type: 'wrong_xmltv_id', ...channel })
totalErrors++
}
// if (foundChannel && foundChannel.replacedBy) {
// errors.push({ type: 'replaced', ...channel })
// totalErrors++
// }
// if (foundChannel && foundChannel.closed && !foundChannel.replacedBy) {
// errors.push({ type: 'closed', ...channel })
// totalErrors++
// }
})
if (errors.length) {

View file

@ -1,34 +1,49 @@
import { Logger, Timer, Storage, Collection } from '@freearhey/core'
import { program } from 'commander'
import { CronJob } from 'cron'
import { Option, program } from 'commander'
import { QueueCreator, Job, ChannelsParser } from '../../core'
import { Channel } from 'epg-grabber'
import path from 'path'
import { SITES_DIR } from '../../constants'
program
.option('-s, --site <name>', 'Name of the site to parse')
.option(
'-c, --channels <path>',
'Path to *.channels.xml file (required if the "--site" attribute is not specified)'
.addOption(new Option('-s, --site <name>', 'Name of the site to parse'))
.addOption(
new Option(
'-c, --channels <path>',
'Path to *.channels.xml file (required if the "--site" attribute is not specified)'
)
)
.option('-o, --output <path>', 'Path to output file', 'guide.xml')
.option('-l, --lang <code>', 'Filter channels by language (ISO 639-2 code)')
.option('-t, --timeout <milliseconds>', 'Override the default timeout for each request')
.option('-d, --delay <milliseconds>', 'Override the default delay between request')
.option(
'--days <days>',
'Override the number of days for which the program will be loaded (defaults to the value from the site config)',
value => parseInt(value)
.addOption(new Option('-o, --output <path>', 'Path to output file').default('guide.xml'))
.addOption(new Option('-l, --lang <codes>', 'Filter channels by languages (ISO 639-1 codes)'))
.addOption(
new Option('-t, --timeout <milliseconds>', 'Override the default timeout for each request').env(
'TIMEOUT'
)
)
.option(
'--maxConnections <number>',
'Limit on the number of concurrent requests',
value => parseInt(value),
1
.addOption(
new Option('-d, --delay <milliseconds>', 'Override the default delay between request').env(
'DELAY'
)
)
.addOption(new Option('-x, --proxy <url>', 'Use the specified proxy').env('PROXY'))
.addOption(
new Option(
'--days <days>',
'Override the number of days for which the program will be loaded (defaults to the value from the site config)'
)
.argParser(value => parseInt(value))
.env('DAYS')
)
.addOption(
new Option('--maxConnections <number>', 'Limit on the number of concurrent requests')
.default(1)
.env('MAX_CONNECTIONS')
)
.addOption(
new Option('--gzip', 'Create a compressed version of the guide as well')
.default(false)
.env('GZIP')
)
.option('--cron <expression>', 'Schedule a script run (example: "0 0 * * *")')
.option('--gzip', 'Create a compressed version of the guide as well', false)
.parse(process.argv)
export type GrabOptions = {
@ -41,7 +56,7 @@ export type GrabOptions = {
delay?: string
lang?: string
days?: number
cron?: string
proxy?: string
}
const options: GrabOptions = program.opts()
@ -75,22 +90,16 @@ async function main() {
parsedChannels = parsedChannels.concat(await parser.parse(filepath))
}
if (options.lang) {
parsedChannels = parsedChannels.filter((channel: Channel) => channel.lang === options.lang)
parsedChannels = parsedChannels.filter((channel: Channel) => {
if (!options.lang || !channel.lang) return true
return options.lang.includes(channel.lang)
})
}
logger.info(` found ${parsedChannels.count()} channel(s)`)
let runIndex = 1
if (options.cron) {
const cronJob = new CronJob(options.cron, async () => {
logger.info(`run #${runIndex}:`)
await runJob({ logger, parsedChannels })
runIndex++
})
cronJob.start()
} else {
logger.info(`run #${runIndex}:`)
runJob({ logger, parsedChannels })
}
logger.info('run:')
runJob({ logger, parsedChannels })
}
main()

View file

@ -0,0 +1,45 @@
import { Logger, Storage } from '@freearhey/core'
import { SITES_DIR } from '../../constants'
import { pathToFileURL } from 'node:url'
import { program } from 'commander'
import fs from 'fs-extra'
program.argument('<site>', 'Domain name of the site').parse(process.argv)
const domain = program.args[0]
async function main() {
const storage = new Storage(SITES_DIR)
const logger = new Logger()
logger.info(`Initializing "${domain}"...\r\n`)
const dir = domain
if (await storage.exists(dir)) {
throw new Error(`Folder "${dir}" already exists`)
}
await storage.createDir(dir)
logger.info(`Creating "${dir}/${domain}.test.js"...`)
const testTemplate = fs.readFileSync(pathToFileURL('scripts/templates/_test.js'), {
encoding: 'utf8'
})
await storage.save(`${dir}/${domain}.test.js`, testTemplate.replace(/<DOMAIN>/g, domain))
logger.info(`Creating "${dir}/${domain}.config.js"...`)
const configTemplate = fs.readFileSync(pathToFileURL('scripts/templates/_config.js'), {
encoding: 'utf8'
})
await storage.save(`${dir}/${domain}.config.js`, configTemplate.replace(/<DOMAIN>/g, domain))
logger.info(`Creating "${dir}/readme.md"...`)
const readmeTemplate = fs.readFileSync(pathToFileURL('scripts/templates/_readme.md'), {
encoding: 'utf8'
})
await storage.save(`${dir}/readme.md`, readmeTemplate.replace(/<DOMAIN>/g, domain))
logger.info('\r\nDone')
}
main()

View file

@ -0,0 +1,70 @@
import { IssueLoader, HTMLTable, ChannelsParser } from '../../core'
import { Logger, Storage, Collection } from '@freearhey/core'
import { SITES_DIR, ROOT_DIR } from '../../constants'
import { Issue, Site } from '../../models'
import { Channel } from 'epg-grabber'
async function main() {
const logger = new Logger({ disabled: true })
const loader = new IssueLoader()
const sitesStorage = new Storage(SITES_DIR)
const channelsParser = new ChannelsParser({ storage: sitesStorage })
const sites = new Collection()
logger.info('loading list of sites')
const folders = await sitesStorage.list('*/')
logger.info('loading issues...')
const issues = await loader.load()
logger.info('putting the data together...')
const brokenGuideReports = issues.filter(issue =>
issue.labels.find((label: string) => label === 'broken guide')
)
for (const domain of folders) {
const filteredIssues = brokenGuideReports.filter(
(issue: Issue) => domain === issue.data.get('site')
)
const site = new Site({
domain,
issues: filteredIssues
})
const files = await sitesStorage.list(`${domain}/*.channels.xml`)
for (const filepath of files) {
const channels = await channelsParser.parse(filepath)
site.totalChannels += channels.count()
site.markedChannels += channels.filter((channel: Channel) => channel.xmltv_id).count()
}
sites.add(site)
}
logger.info('creating sites table...')
const data = new Collection()
sites.forEach((site: Site) => {
data.add([
{ value: `<a href="sites/${site.domain}">${site.domain}</a>` },
{ value: site.totalChannels, align: 'right' },
{ value: site.markedChannels, align: 'right' },
{ value: site.getStatus().emoji, align: 'center' },
{ value: site.getIssues().all().join(', ') }
])
})
logger.info('updating sites.md...')
const table = new HTMLTable(data.all(), [
{ name: 'Site', align: 'left' },
{ name: 'Channels<br>(total / with xmltv-id)', colspan: 2, align: 'left' },
{ name: 'Status', align: 'left' },
{ name: 'Notes', align: 'left' }
])
const rootStorage = new Storage(ROOT_DIR)
const sitesTemplate = await new Storage().load('scripts/templates/_sites.md')
const sitesContent = sitesTemplate.replace('_TABLE_', table.toString())
await rootStorage.save('SITES.md', sitesContent)
}
main()

View file

@ -1,4 +1,9 @@
export const ROOT_DIR = process.env.ROOT_DIR || '.'
export const SITES_DIR = process.env.SITES_DIR || './sites'
export const GUIDES_DIR = process.env.GUIDES_DIR || './guides'
export const DATA_DIR = process.env.DATA_DIR || './temp/data'
export const API_DIR = process.env.API_DIR || '.api'
export const DOT_SITES_DIR = process.env.DOT_SITES_DIR || './.sites'
export const TESTING = process.env.NODE_ENV === 'test' ? true : false
export const OWNER = 'iptv-org'
export const REPO = 'epg'

View file

@ -1,79 +0,0 @@
import { Collection } from '@freearhey/core'
type ApiChannelProps = {
id: string
name: string
alt_names: string[]
network: string
owners: string[]
country: string
subdivision: string
city: string
broadcast_area: string[]
languages: string[]
categories: string[]
is_nsfw: boolean
launched: string
closed: string
replaced_by: string
website: string
logo: string
}
export class ApiChannel {
id: string
name: string
altNames: Collection
network: string
owners: Collection
country: string
subdivision: string
city: string
broadcastArea: Collection
languages: Collection
categories: Collection
isNSFW: boolean
launched: string
closed: string
replacedBy: string
website: string
logo: string
constructor({
id,
name,
alt_names,
network,
owners,
country,
subdivision,
city,
broadcast_area,
languages,
categories,
is_nsfw,
launched,
closed,
replaced_by,
website,
logo
}: ApiChannelProps) {
this.id = id
this.name = name
this.altNames = new Collection(alt_names)
this.network = network
this.owners = new Collection(owners)
this.country = country
this.subdivision = subdivision
this.city = city
this.broadcastArea = new Collection(broadcast_area)
this.languages = new Collection(languages)
this.categories = new Collection(categories)
this.isNSFW = is_nsfw
this.launched = launched
this.closed = closed
this.replacedBy = replaced_by
this.website = website
this.logo = logo
}
}

View file

@ -1,59 +1,16 @@
import { Logger, Storage } from '@freearhey/core'
import axios, { AxiosInstance, AxiosResponse, AxiosProgressEvent } from 'axios'
import cliProgress, { MultiBar } from 'cli-progress'
import numeral from 'numeral'
import axios, { AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios'
export class ApiClient {
progressBar: MultiBar
client: AxiosInstance
storage: Storage
logger: Logger
instance: AxiosInstance
constructor({ logger }: { logger: Logger }) {
this.logger = logger
this.client = axios.create({
constructor() {
this.instance = axios.create({
baseURL: 'https://iptv-org.github.io/api',
responseType: 'stream'
})
this.storage = new Storage()
this.progressBar = new cliProgress.MultiBar({
stopOnComplete: true,
hideCursor: true,
forceRedraw: true,
barsize: 36,
format(options, params, payload) {
const filename = payload.filename.padEnd(18, ' ')
const barsize = options.barsize || 40
const percent = (params.progress * 100).toFixed(2)
const speed = payload.speed ? numeral(payload.speed).format('0.0 b') + '/s' : 'N/A'
const total = numeral(params.total).format('0.0 b')
const completeSize = Math.round(params.progress * barsize)
const incompleteSize = barsize - completeSize
const bar =
options.barCompleteString && options.barIncompleteString
? options.barCompleteString.substr(0, completeSize) +
options.barGlue +
options.barIncompleteString.substr(0, incompleteSize)
: '-'.repeat(barsize)
return `${filename} [${bar}] ${percent}% | ETA: ${params.eta}s | ${total} | ${speed}`
}
})
}
async download(filename: string) {
const stream = await this.storage.createStream(`/temp/data/${filename}`)
const bar = this.progressBar.create(0, 0, { filename })
this.client
.get(`https://iptv-org.github.io/api/${filename}`, {
onDownloadProgress({ total, loaded, rate }: AxiosProgressEvent) {
if (total) bar.setTotal(total)
bar.update(loaded, { speed: rate })
}
})
.then((response: AxiosResponse) => {
response.data.pipe(stream)
})
get(url: string, options: AxiosRequestConfig): Promise<AxiosResponse> {
return this.instance.get(url, options)
}
}

View file

@ -7,7 +7,7 @@ export class ConfigLoader {
const fileUrl = pathToFileURL(filepath).toString()
const config = (await import(fileUrl)).default
const defaultConfig = {
days: 2,
days: 1,
delay: 0,
output: 'guide.xml',
request: {

100
scripts/core/dataLoader.ts Normal file
View file

@ -0,0 +1,100 @@
import type { DataLoaderProps, DataLoaderData } from '../types/dataLoader'
import cliProgress, { MultiBar } from 'cli-progress'
import { Storage } from '@freearhey/core'
import { ApiClient } from './apiClient'
import numeral from 'numeral'
export class DataLoader {
client: ApiClient
storage: Storage
progressBar: MultiBar
constructor(props: DataLoaderProps) {
this.client = new ApiClient()
this.storage = props.storage
this.progressBar = new cliProgress.MultiBar({
stopOnComplete: true,
hideCursor: true,
forceRedraw: true,
barsize: 36,
format(options, params, payload) {
const filename = payload.filename.padEnd(18, ' ')
const barsize = options.barsize || 40
const percent = (params.progress * 100).toFixed(2)
const speed = payload.speed ? numeral(payload.speed).format('0.0 b') + '/s' : 'N/A'
const total = numeral(params.total).format('0.0 b')
const completeSize = Math.round(params.progress * barsize)
const incompleteSize = barsize - completeSize
const bar =
options.barCompleteString && options.barIncompleteString
? options.barCompleteString.substr(0, completeSize) +
options.barGlue +
options.barIncompleteString.substr(0, incompleteSize)
: '-'.repeat(barsize)
return `${filename} [${bar}] ${percent}% | ETA: ${params.eta}s | ${total} | ${speed}`
}
})
}
async load(): Promise<DataLoaderData> {
const [
countries,
regions,
subdivisions,
languages,
categories,
blocklist,
channels,
feeds,
timezones,
guides,
streams
] = await Promise.all([
this.storage.json('countries.json'),
this.storage.json('regions.json'),
this.storage.json('subdivisions.json'),
this.storage.json('languages.json'),
this.storage.json('categories.json'),
this.storage.json('blocklist.json'),
this.storage.json('channels.json'),
this.storage.json('feeds.json'),
this.storage.json('timezones.json'),
this.storage.json('guides.json'),
this.storage.json('streams.json')
])
return {
countries,
regions,
subdivisions,
languages,
categories,
blocklist,
channels,
feeds,
timezones,
guides,
streams
}
}
async download(filename: string) {
if (!this.storage || !this.progressBar) return
const stream = await this.storage.createStream(filename)
const progressBar = this.progressBar.create(0, 0, { filename })
this.client
.get(filename, {
responseType: 'stream',
onDownloadProgress({ total, loaded, rate }) {
if (total) progressBar.setTotal(total)
progressBar.update(loaded, { speed: rate })
}
})
.then(response => {
response.data.pipe(stream)
})
}
}

View file

@ -0,0 +1,39 @@
import { DataLoaderData } from '../types/dataLoader'
import { Collection } from '@freearhey/core'
import { Channel, Feed, Guide, Stream } from '../models'
export class DataProcessor {
constructor() {}
process(data: DataLoaderData) {
let channels = new Collection(data.channels).map(data => new Channel(data))
const channelsKeyById = channels.keyBy((channel: Channel) => channel.id)
const guides = new Collection(data.guides).map(data => new Guide(data))
const guidesGroupedByStreamId = guides.groupBy((guide: Guide) => guide.getStreamId())
const streams = new Collection(data.streams).map(data => new Stream(data))
const streamsGroupedById = streams.groupBy((stream: Stream) => stream.getId())
const feeds = new Collection(data.feeds).map(data =>
new Feed(data)
.withGuides(guidesGroupedByStreamId)
.withStreams(streamsGroupedById)
.withChannel(channelsKeyById)
)
const feedsGroupedByChannelId = feeds.groupBy((feed: Feed) => feed.channelId)
channels = channels.map((channel: Channel) => channel.withFeeds(feedsGroupedByChannelId))
return {
feedsGroupedByChannelId,
guidesGroupedByStreamId,
streamsGroupedById,
channelsKeyById,
channels,
streams,
guides,
feeds
}
}
}

View file

@ -1,5 +1,6 @@
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
const date = {}
@ -10,4 +11,4 @@ date.getUTC = function (d = null) {
return dayjs.utc().startOf('d')
}
module.exports = date
export default date

View file

@ -1,8 +1,9 @@
import { EPGGrabber, GrabCallbackData, EPGGrabberMock, SiteConfig, Channel } from 'epg-grabber'
import { Logger, Collection } from '@freearhey/core'
import { Queue } from './'
import { Queue, ProxyParser } from './'
import { GrabOptions } from '../commands/epg/grab'
import { TaskQueue, PromisyClass } from 'cwait'
import { SocksProxyAgent } from 'socks-proxy-agent'
type GrabberProps = {
logger: Logger
@ -14,6 +15,7 @@ export class Grabber {
logger: Logger
queue: Queue
options: GrabOptions
grabber: EPGGrabber | EPGGrabberMock
constructor({ logger, queue, options }: GrabberProps) {
this.logger = logger
@ -23,6 +25,7 @@ export class Grabber {
}
async grab(): Promise<{ channels: Collection; programs: Collection }> {
const proxyParser = new ProxyParser()
const taskQueue = new TaskQueue(Promise as PromisyClass, this.options.maxConnections)
const total = this.queue.size()
@ -49,6 +52,24 @@ export class Grabber {
config.delay = delay
}
if (this.options.proxy !== undefined) {
const proxy = proxyParser.parse(this.options.proxy)
if (
proxy.protocol &&
['socks', 'socks5', 'socks5h', 'socks4', 'socks4a'].includes(String(proxy.protocol))
) {
const socksProxyAgent = new SocksProxyAgent(this.options.proxy)
config.request = {
...config.request,
...{ httpAgent: socksProxyAgent, httpsAgent: socksProxyAgent }
}
} else {
config.request = { ...config.request, ...{ proxy } }
}
}
const _programs = await this.grabber.grab(
channel,
date,

View file

@ -1,6 +1,7 @@
import { Collection, Logger, DateTime, Storage, Zip } from '@freearhey/core'
import { Channel } from 'epg-grabber'
import { XMLTV } from '../core'
import path from 'path'
type GuideProps = {
channels: Collection
@ -22,7 +23,7 @@ export class Guide {
this.channels = channels
this.programs = programs
this.logger = logger
this.storage = new Storage()
this.storage = new Storage(path.dirname(filepath))
this.filepath = filepath
this.gzip = gzip || false
}
@ -43,15 +44,17 @@ export class Guide {
})
const xmlFilepath = this.filepath
const xmlFilename = path.basename(xmlFilepath)
this.logger.info(` saving to "${xmlFilepath}"...`)
await this.storage.save(xmlFilepath, xmltv.toString())
await this.storage.save(xmlFilename, xmltv.toString())
if (this.gzip) {
const zip = new Zip()
const compressed = await zip.compress(xmltv.toString())
const gzFilepath = `${this.filepath}.gz`
const gzFilename = path.basename(gzFilepath)
this.logger.info(` saving to "${gzFilepath}"...`)
await this.storage.save(gzFilepath, compressed)
await this.storage.save(gzFilename, compressed)
}
}
}

55
scripts/core/htmlTable.ts Normal file
View file

@ -0,0 +1,55 @@
type Column = {
name: string
nowrap?: boolean
align?: string
colspan?: number
}
type DataItem = {
value: string
nowrap?: boolean
align?: string
colspan?: number
}[]
export class HTMLTable {
data: DataItem[]
columns: Column[]
constructor(data: DataItem[], columns: Column[]) {
this.data = data
this.columns = columns
}
toString() {
let output = '<table>\r\n'
output += ' <thead>\r\n <tr>'
for (const column of this.columns) {
const nowrap = column.nowrap ? ' nowrap' : ''
const align = column.align ? ` align="${column.align}"` : ''
const colspan = column.colspan ? ` colspan="${column.colspan}"` : ''
output += `<th${align}${nowrap}${colspan}>${column.name}</th>`
}
output += '</tr>\r\n </thead>\r\n'
output += ' <tbody>\r\n'
for (const row of this.data) {
output += ' <tr>'
for (const item of row) {
const nowrap = item.nowrap ? ' nowrap' : ''
const align = item.align ? ` align="${item.align}"` : ''
const colspan = item.colspan ? ` colspan="${item.colspan}"` : ''
output += `<td${align}${nowrap}${colspan}>${item.value}</td>`
}
output += '</tr>\r\n'
}
output += ' </tbody>\r\n'
output += '</table>'
return output
}
}

View file

@ -1,12 +1,17 @@
export * from './xml'
export * from './channelsParser'
export * from './xmltv'
export * from './configLoader'
export * from './grabber'
export * from './job'
export * from './queue'
export * from './guideManager'
export * from './guide'
export * from './apiChannel'
export * from './apiClient'
export * from './channelsParser'
export * from './configLoader'
export * from './dataLoader'
export * from './dataProcessor'
export * from './grabber'
export * from './guide'
export * from './guideManager'
export * from './htmlTable'
export * from './issueLoader'
export * from './issueParser'
export * from './job'
export * from './proxyParser'
export * from './queue'
export * from './queueCreator'
export * from './xml'
export * from './xmltv'

View file

@ -0,0 +1,36 @@
import { restEndpointMethods } from '@octokit/plugin-rest-endpoint-methods'
import { paginateRest } from '@octokit/plugin-paginate-rest'
import { TESTING, OWNER, REPO } from '../constants'
import { Collection } from '@freearhey/core'
import { Octokit } from '@octokit/core'
import { IssueParser } from './'
const CustomOctokit = Octokit.plugin(paginateRest, restEndpointMethods)
const octokit = new CustomOctokit()
export class IssueLoader {
async load(props?: { labels: string[] | string }) {
let labels = ''
if (props && props.labels) {
labels = Array.isArray(props.labels) ? props.labels.join(',') : props.labels
}
let issues: object[] = []
if (TESTING) {
issues = (await import('../../tests/__data__/input/sites_update/issues.mjs')).default
} else {
issues = await octokit.paginate(octokit.rest.issues.listForRepo, {
owner: OWNER,
repo: REPO,
per_page: 100,
labels,
headers: {
'X-GitHub-Api-Version': '2022-11-28'
}
})
}
const parser = new IssueParser()
return new Collection(issues).map(parser.parse)
}
}

View file

@ -0,0 +1,34 @@
import { Dictionary } from '@freearhey/core'
import { Issue } from '../models'
const FIELDS = new Dictionary({
Site: 'site'
})
export class IssueParser {
parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue {
const fields = issue.body.split('###')
const data = new Dictionary()
fields.forEach((field: string) => {
const parsed = field.split(/\r?\n/).filter(Boolean)
let _label = parsed.shift()
_label = _label ? _label.trim() : ''
let _value = parsed.join('\r\n')
_value = _value ? _value.trim() : ''
if (!_label || !_value) return data
const id: string = FIELDS.get(_label)
const value: string = _value === '_No response_' || _value === 'None' ? '' : _value
if (!id) return
data.set(id, value)
})
const labels = issue.labels.map(label => label.name)
return new Issue({ number: issue.number, labels, data })
}
}

View file

@ -0,0 +1,27 @@
import { URL } from 'node:url'
type ProxyParserResult = {
protocol: string | null
auth: {
username: string | null
password: string | null
}
host: string
port: number | null
}
export class ProxyParser {
parse(_url: string): ProxyParserResult {
const parsed = new URL(_url)
return {
protocol: parsed.protocol.replace(':', '') || null,
auth: {
username: parsed.username || null,
password: parsed.password || null
},
host: parsed.hostname,
port: parsed.port ? parseInt(parsed.port) : null
}
}
}

View file

@ -1,9 +1,10 @@
import { Storage, Collection, DateTime, Logger } from '@freearhey/core'
import { ChannelsParser, ConfigLoader, ApiChannel, Queue } from './'
import { ChannelsParser, ConfigLoader, Queue } from './'
import { SITES_DIR, DATA_DIR } from '../constants'
import { Channel, SiteConfig } from 'epg-grabber'
import { SiteConfig } from 'epg-grabber'
import path from 'path'
import { GrabOptions } from '../commands/epg/grab'
import { Channel } from '../models'
type QueueCreatorProps = {
logger: Logger
@ -32,23 +33,24 @@ export class QueueCreator {
async create(): Promise<Queue> {
const channelsContent = await this.dataStorage.json('channels.json')
const channels = new Collection(channelsContent).map(data => new ApiChannel(data))
const channels = new Collection(channelsContent).map(data => new Channel(data))
const queue = new Queue()
for (const channel of this.parsedChannels.all()) {
if (!channel.site || !channel.site_id || !channel.name) continue
if (this.options.lang && channel.lang !== this.options.lang) continue
const configPath = path.resolve(SITES_DIR, `${channel.site}/${channel.site}.config.js`)
const config: SiteConfig = await this.configLoader.load(configPath)
if (channel.xmltv_id) {
const found: ApiChannel = channels.first(
(_channel: ApiChannel) => _channel.id === channel.xmltv_id
)
if (found) {
channel.logo = found.logo
channel.name = found.name
if (!channel.icon) {
const found: Channel = channels.first(
(_channel: Channel) => _channel.id === channel.xmltv_id
)
if (found) {
channel.icon = found.logo
}
}
} else {
channel.xmltv_id = channel.site_id

113
scripts/models/channel.ts Normal file
View file

@ -0,0 +1,113 @@
import { ChannelData, ChannelSearchableData } from '../types/channel'
import { Collection, Dictionary } from '@freearhey/core'
import { Stream, Guide, Feed } from './'
export class Channel {
id: string
name: string
altNames?: Collection
network?: string
owners?: Collection
countryCode: string
subdivisionCode?: string
cityName?: string
categoryIds?: Collection
isNSFW: boolean
launched?: string
closed?: string
replacedBy?: string
website?: string
logo?: string
feeds?: Collection
constructor(data: ChannelData) {
this.id = data.id
this.name = data.name
this.altNames = new Collection(data.alt_names)
this.network = data.network || undefined
this.owners = new Collection(data.owners)
this.countryCode = data.country
this.subdivisionCode = data.subdivision || undefined
this.cityName = data.city || undefined
this.categoryIds = new Collection(data.categories)
this.isNSFW = data.is_nsfw
this.launched = data.launched || undefined
this.closed = data.closed || undefined
this.replacedBy = data.replaced_by || undefined
this.website = data.website || undefined
this.logo = data.logo
}
withFeeds(feedsGroupedByChannelId: Dictionary): this {
this.feeds = new Collection(feedsGroupedByChannelId.get(this.id))
return this
}
getFeeds(): Collection {
if (!this.feeds) return new Collection()
return this.feeds
}
getGuides(): Collection {
let guides = new Collection()
this.getFeeds().forEach((feed: Feed) => {
guides = guides.concat(feed.getGuides())
})
return guides
}
getGuideNames(): Collection {
return this.getGuides()
.map((guide: Guide) => guide.siteName)
.uniq()
}
getStreams(): Collection {
let streams = new Collection()
this.getFeeds().forEach((feed: Feed) => {
streams = streams.concat(feed.getStreams())
})
return streams
}
getStreamNames(): Collection {
return this.getStreams()
.map((stream: Stream) => stream.getName())
.uniq()
}
getFeedFullNames(): Collection {
return this.getFeeds()
.map((feed: Feed) => feed.getFullName())
.uniq()
}
getName(): string {
return this.name || ''
}
getId(): string {
return this.id || ''
}
getAltNames(): Collection {
return this.altNames || new Collection()
}
getSearchable(): ChannelSearchableData {
return {
id: this.getId(),
name: this.getName(),
altNames: this.getAltNames().all(),
guideNames: this.getGuideNames().all(),
streamNames: this.getStreamNames().all(),
feedFullNames: this.getFeedFullNames().all()
}
}
}

72
scripts/models/feed.ts Normal file
View file

@ -0,0 +1,72 @@
import { Collection, Dictionary } from '@freearhey/core'
import { FeedData } from '../types/feed'
import { Channel } from './channel'
export class Feed {
channelId: string
channel?: Channel
id: string
name: string
isMain: boolean
broadcastAreaCodes: Collection
languageCodes: Collection
timezoneIds: Collection
videoFormat: string
guides?: Collection
streams?: Collection
constructor(data: FeedData) {
this.channelId = data.channel
this.id = data.id
this.name = data.name
this.isMain = data.is_main
this.broadcastAreaCodes = new Collection(data.broadcast_area)
this.languageCodes = new Collection(data.languages)
this.timezoneIds = new Collection(data.timezones)
this.videoFormat = data.video_format
}
withChannel(channelsKeyById: Dictionary): this {
this.channel = channelsKeyById.get(this.channelId)
return this
}
withStreams(streamsGroupedById: Dictionary): this {
this.streams = new Collection(streamsGroupedById.get(`${this.channelId}@${this.id}`))
if (this.isMain) {
this.streams = this.streams.concat(new Collection(streamsGroupedById.get(this.channelId)))
}
return this
}
withGuides(guidesGroupedByStreamId: Dictionary): this {
this.guides = new Collection(guidesGroupedByStreamId.get(`${this.channelId}@${this.id}`))
if (this.isMain) {
this.guides = this.guides.concat(new Collection(guidesGroupedByStreamId.get(this.channelId)))
}
return this
}
getGuides(): Collection {
if (!this.guides) return new Collection()
return this.guides
}
getStreams(): Collection {
if (!this.streams) return new Collection()
return this.streams
}
getFullName(): string {
if (!this.channel) return ''
return `${this.channel.name} ${this.name}`
}
}

35
scripts/models/guide.ts Normal file
View file

@ -0,0 +1,35 @@
import type { GuideData } from '../types/guide'
import { uniqueId } from 'lodash'
export class Guide {
channelId?: string
feedId?: string
siteDomain?: string
siteId?: string
siteName?: string
languageCode?: string
constructor(data?: GuideData) {
if (!data) return
this.channelId = data.channel
this.feedId = data.feed
this.siteDomain = data.site
this.siteId = data.site_id
this.siteName = data.site_name
this.languageCode = data.lang
}
getUUID(): string {
if (!this.getStreamId() || !this.siteId) return uniqueId()
return this.getStreamId() + this.siteId
}
getStreamId(): string | undefined {
if (!this.channelId) return undefined
if (!this.feedId) return this.channelId
return `${this.channelId}@${this.feedId}`
}
}

6
scripts/models/index.ts Normal file
View file

@ -0,0 +1,6 @@
export * from './issue'
export * from './site'
export * from './channel'
export * from './feed'
export * from './stream'
export * from './guide'

24
scripts/models/issue.ts Normal file
View file

@ -0,0 +1,24 @@
import { Dictionary } from '@freearhey/core'
import { OWNER, REPO } from '../constants'
type IssueProps = {
number: number
labels: string[]
data: Dictionary
}
export class Issue {
number: number
labels: string[]
data: Dictionary
constructor({ number, labels, data }: IssueProps) {
this.number = number
this.labels = labels
this.data = data
}
getURL() {
return `https://github.com/${OWNER}/${REPO}/issues/${this.number}`
}
}

63
scripts/models/site.ts Normal file
View file

@ -0,0 +1,63 @@
import { Collection } from '@freearhey/core'
import { Issue } from './'
enum StatusCode {
DOWN = 'down',
WARNING = 'warning',
OK = 'ok'
}
type Status = {
code: StatusCode
emoji: string
}
type SiteProps = {
domain: string
totalChannels?: number
markedChannels?: number
issues: Collection
}
export class Site {
domain: string
totalChannels: number
markedChannels: number
issues: Collection
constructor({ domain, totalChannels = 0, markedChannels = 0, issues }: SiteProps) {
this.domain = domain
this.totalChannels = totalChannels
this.markedChannels = markedChannels
this.issues = issues
}
getStatus(): Status {
const issuesWithStatusDown = this.issues.filter((issue: Issue) =>
issue.labels.find(label => label === 'status:down')
)
if (issuesWithStatusDown.notEmpty())
return {
code: StatusCode.DOWN,
emoji: '🔴'
}
const issuesWithStatusWarning = this.issues.filter((issue: Issue) =>
issue.labels.find(label => label === 'status:warning')
)
if (issuesWithStatusWarning.notEmpty())
return {
code: StatusCode.WARNING,
emoji: '🟡'
}
return {
code: StatusCode.OK,
emoji: '🟢'
}
}
getIssues(): Collection {
return this.issues.map((issue: Issue) => issue.getURL())
}
}

58
scripts/models/stream.ts Normal file
View file

@ -0,0 +1,58 @@
import type { StreamData } from '../types/stream'
import { Feed, Channel } from './index'
export class Stream {
name?: string
url: string
id?: string
channelId?: string
channel?: Channel
feedId?: string
feed?: Feed
filepath?: string
line?: number
label?: string
verticalResolution?: number
isInterlaced?: boolean
referrer?: string
userAgent?: string
groupTitle: string = 'Undefined'
removed: boolean = false
constructor(data: StreamData) {
const id = data.channel && data.feed ? [data.channel, data.feed].join('@') : data.channel
const { verticalResolution, isInterlaced } = parseQuality(data.quality)
this.id = id || undefined
this.channelId = data.channel || undefined
this.feedId = data.feed || undefined
this.name = data.name || undefined
this.url = data.url
this.referrer = data.referrer || undefined
this.userAgent = data.user_agent || undefined
this.verticalResolution = verticalResolution || undefined
this.isInterlaced = isInterlaced || undefined
this.label = data.label || undefined
}
getId(): string {
return this.id || ''
}
getName(): string {
return this.name || ''
}
}
function parseQuality(quality: string | null): {
verticalResolution: number | null
isInterlaced: boolean | null
} {
if (!quality) return { verticalResolution: null, isInterlaced: null }
const [, verticalResolutionString] = quality.match(/^(\d+)/) || [null, undefined]
const isInterlaced = /i$/i.test(quality)
let verticalResolution = 0
if (verticalResolutionString) verticalResolution = parseInt(verticalResolutionString)
return { verticalResolution, isInterlaced }
}

View file

@ -0,0 +1,16 @@
module.exports = {
site: '<DOMAIN>',
url({ channel, date }) {
return `https://example.com/api/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
parser({ content }) {
try {
return JSON.parse(content)
} catch {
return []
}
},
channels() {
return []
}
}

View file

@ -0,0 +1,21 @@
# <DOMAIN>
https://<DOMAIN>
### Download the guide
```sh
npm run grab --- --site=<DOMAIN>
```
### Update channel list
```sh
npm run channels:parse --- --config=./sites/<DOMAIN>/<DOMAIN>.config.js --output=./sites/<DOMAIN>/<DOMAIN>.channels.xml
```
### Test
```sh
npm test --- <DOMAIN>
```

View file

@ -0,0 +1,3 @@
# Sites
_TABLE_

View file

@ -0,0 +1,38 @@
const { parser, url } = require('./<DOMAIN>.config.js')
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('2025-01-12', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: 'bbc1' }
it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12')
})
it('can parse response', () => {
const content =
'[{"title":"Program 1","start":"2025-01-12T00:00:00.000Z","stop":"2025-01-12T00:30:00.000Z"},{"title":"Program 2","start":"2025-01-12T00:30:00.000Z","stop":"2025-01-12T01:00:00.000Z"}]'
const results = parser({ content })
expect(results.length).toBe(2)
expect(results[0]).toMatchObject({
title: 'Program 1',
start: '2025-01-12T00:00:00.000Z',
stop: '2025-01-12T00:30:00.000Z'
})
expect(results[1]).toMatchObject({
title: 'Program 2',
start: '2025-01-12T00:30:00.000Z',
stop: '2025-01-12T01:00:00.000Z'
})
})
it('can handle empty guide', () => {
const results = parser({ content: '' })
expect(results).toMatchObject([])
})

28
scripts/types/channel.d.ts vendored Normal file
View file

@ -0,0 +1,28 @@
import { Collection } from '@freearhey/core'
export type ChannelData = {
id: string
name: string
alt_names: string[]
network: string
owners: Collection
country: string
subdivision: string
city: string
categories: Collection
is_nsfw: boolean
launched: string
closed: string
replaced_by: string
website: string
logo: string
}
export type ChannelSearchableData = {
id: string
name: string
altNames: string[]
guideNames: string[]
streamNames: string[]
feedFullNames: string[]
}

19
scripts/types/dataLoader.d.ts vendored Normal file
View file

@ -0,0 +1,19 @@
import { Storage } from '@freearhey/core'
export type DataLoaderProps = {
storage: Storage
}
export type DataLoaderData = {
countries: object | object[]
regions: object | object[]
subdivisions: object | object[]
languages: object | object[]
categories: object | object[]
blocklist: object | object[]
channels: object | object[]
feeds: object | object[]
timezones: object | object[]
guides: object | object[]
streams: object | object[]
}

12
scripts/types/dataProcessor.d.ts vendored Normal file
View file

@ -0,0 +1,12 @@
import { Collection, Dictionary } from '@freearhey/core'
export type DataProcessorData = {
feedsGroupedByChannelId: Dictionary
guidesGroupedByStreamId: Dictionary
streamsGroupedById: Dictionary
channelsKeyById: Dictionary
channels: Collection
streams: Collection
guides: Collection
feeds: Collection
}

12
scripts/types/feed.d.ts vendored Normal file
View file

@ -0,0 +1,12 @@
import { Collection } from '@freearhey/core'
export type FeedData = {
channel: string
id: string
name: string
is_main: boolean
broadcast_area: Collection
languages: Collection
timezones: Collection
video_format: string
}

8
scripts/types/guide.d.ts vendored Normal file
View file

@ -0,0 +1,8 @@
export type GuideData = {
channel: string
feed: string
site: string
site_id: string
site_name: string
lang: string
}

10
scripts/types/stream.d.ts vendored Normal file
View file

@ -0,0 +1,10 @@
export type StreamData = {
channel: string | null
feed: string | null
name?: string
url: string
referrer: string | null
user_agent: string | null
quality: string | null
label: string | null
}

View file

@ -27,7 +27,7 @@ module.exports = {
const stop = start.add(1, 'h')
programs.push({
title: parseTitle($item),
icon: parseIcon($item),
image: parseImage($item),
description: parseDescription($item),
start,
stop
@ -44,7 +44,7 @@ function parseStart($item, date) {
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Jerusalem')
}
function parseIcon($item) {
function parseImage($item) {
const backgroundImage = $item('a > div.guide_info_group > div.guide_info_pict').css(
'background-image'
)

View file

@ -31,14 +31,14 @@ it('can parse response', () => {
start: '2022-03-06T04:30:00.000Z',
stop: '2022-03-06T07:10:00.000Z',
title: 'Слепая',
icon: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg',
image: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg',
description:
'Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы.'
},
{
start: '2022-03-06T07:10:00.000Z',
stop: '2022-03-06T08:10:00.000Z',
icon: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg',
image: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg',
title: 'Орел и решка. Морской сезон',
description: 'Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.'
}

View file

@ -5,11 +5,11 @@ https://www.9tv.co.il/BroadcastSchedule
### Download the guide
```sh
npm run grab -- --site=9tv.co.il
npm run grab --- --site=9tv.co.il
```
### Test
```sh
npm test -- 9tv.co.il
npm test --- 9tv.co.il
```

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<Error
><code>NoSuchKey</code><Message>The specified key does not exist.</Message
><Key>processed/Sydney_2026-02-04.json</Key><RequestId>A8BGG30W2N9P97Z1</RequestId
><HostId
>4NlYzMSR9t2HPBctGhbCKPEBuFdVxtbuyLIOA7uTL28R6/ooqneS1TTwVa7PkTt7gr9yyopqCKk=</HostId
></Error
>

View file

@ -1,543 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#PrimS">PrimS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#DDT">DDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SC">SC</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#10Nth">10Nth</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#NBN">NBN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#Prime">Prime</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SC">SC</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SHD7">SHD7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#TDHD">TDHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#TDT">TDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7GTS">7GTS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#10Nth">10Nth</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#NBN">NBN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#PrimN">PrimN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#PrimS">PrimS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#7C">7C</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7C">7C</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7QLD">7QLD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7TWOQ">7TWOQ</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7C">7C</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7GTS">7GTS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SC9">SC9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WIN9">WIN9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WIN10">WIN10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SC">SC</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SHD7">SHD7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#TDHD">TDHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#TDT">TDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#Prime">Prime</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#WinSA">WinSA</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#GWN">GWN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#WDT">WDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7bravoAdelaide.au" site_id="Adelaide#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7bravoSydney.au" site_id="Sydney#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7flixAdelaide.au" site_id="Adelaide#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7flixSydney.au" site_id="Sydney#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7HDAdelaide.au" site_id="Adelaide#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7mateAdelaide.au" site_id="Adelaide#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7mateSydney.au" site_id="Sydney#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7twoAdelaide.au" site_id="Adelaide#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="7twoSydney.au" site_id="Sydney#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9GemSydney.au" site_id="Sydney#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9GoSydney.au" site_id="Sydney#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9HDAdelaide.au" site_id="Adelaide#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9LifeAdelaide.au" site_id="Adelaide#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9LifeSydney.au" site_id="Sydney#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9RushAdelaide.au" site_id="Adelaide#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="9RushSydney.au" site_id="Sydney#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="10BoldSydney.au" site_id="Sydney#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="10PeachSydney.au" site_id="Sydney#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="10ShakeSydney.au" site_id="Sydney#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCAustralia.au" site_id="Sydney#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCKidsSydney.au" site_id="Sydney#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCMESydney.au" site_id="Sydney#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVNSW.au" site_id="New South Wales#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVNT.au" site_id="Northern Territory#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVPlusSydney.au" site_id="Sydney#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVQLD.au" site_id="Queensland#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVSA.au" site_id="South Australia#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVSydney.au" site_id="Sydney#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVSydney.au" site_id="Sydney#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVTAS.au" site_id="Tasmania#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVVIC.au" site_id="Victoria#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="ABCTVWA.au" site_id="Western Australia#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="C31Melbourne.au" site_id="Melbourne#31">31</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel7Adelaide.au" site_id="Adelaide#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel7Sydney.au" site_id="Sydney#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel7Sydney.au" site_id="Sydney#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel9Adelaide.au" site_id="Adelaide#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel9Sydney.au" site_id="Sydney#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel9Sydney.au" site_id="Sydney#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="10Adelaide.au" site_id="Adelaide#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="10Sydney.au" site_id="Sydney#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="10Sydney.au" site_id="Sydney#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Channel44.au" site_id="Adelaide#44">44</channel>
<channel site="abc.net.au" lang="en" xmltv_id="NITVAdelaide.au" site_id="Adelaide#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="NITVSydney.au" site_id="Sydney#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="Racingcom.au" site_id="Sydney#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSAdelaide.au" site_id="Adelaide#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSFoodSydney.au" site_id="Sydney#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSSydney.au" site_id="Sydney#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSSydney.au" site_id="Sydney#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSVicelandSydney.au" site_id="Sydney#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSWorldMoviesSydney.au" site_id="Sydney#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SBSWorldWatchSydney.au" site_id="Sydney#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="SpreeTV.au" site_id="Sydney#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="TVSN.au" site_id="Sydney#TVSN">TVSN</channel>
</channels>

View file

@ -19,7 +19,7 @@ module.exports = {
url({ date, channel }) {
const [region] = channel.site_id.split('#')
return `https://epg.abctv.net.au/processed/${region}_${date.format('YYYY-MM-DD')}.json`
return `https://cdn.iview.abc.net.au/epg/processed/${region}_${date.format('YYYY-MM-DD')}.json`
},
parser({ content, channel }) {
let programs = []
@ -33,7 +33,7 @@ module.exports = {
season: parseSeason(item),
episode: parseEpisode(item),
rating: parseRating(item),
icon: parseIcon(item),
image: parseImage(item),
start: parseTime(item.start_time),
stop: parseTime(item.end_time)
})
@ -41,42 +41,43 @@ module.exports = {
return programs
},
async channels() {
async channels({ region = 'syd' }) {
const now = dayjs()
const regions = [
'Sydney',
'Melbourne',
'Brisbane',
'GoldCoast',
'Perth',
'Adelaide',
'Hobart',
'Darwin',
'Canberra',
'New South Wales',
'Victoria',
'Townsville',
'Queensland',
'Western Australia',
'South Australia',
'Tasmania',
'Northern Territory'
]
const regions = {
syd: 'Sydney',
mel: 'Melbourne',
bri: 'Brisbane',
gc: 'GoldCoast',
per: 'Perth',
adl: 'Adelaide',
hbr: 'Hobart',
drw: 'Darwin',
cbr: 'Canberra',
nsw: 'New South Wales',
vic: 'Victoria',
tsv: 'Townsville',
qld: 'Queensland',
wa: 'Western Australia',
sa: 'South Australia',
tas: 'Tasmania',
nt: 'Northern Territory'
}
let channels = []
for (let region of regions) {
const data = await axios
.get(`https://epg.abctv.net.au/processed/${region}_${now.format('YYYY-MM-DD')}.json`)
.then(r => r.data)
.catch(console.log)
const regionName = regions[region]
const data = await axios
.get(
`https://cdn.iview.abc.net.au/epg/processed/${regionName}_${now.format('YYYY-MM-DD')}.json`
)
.then(r => r.data)
.catch(console.log)
for (let item of data.schedule) {
channels.push({
lang: 'en',
site_id: `${region}#${item.channel}`,
name: item.channel
})
}
for (let item of data.schedule) {
channels.push({
lang: 'en',
site_id: `${regionName}#${item.channel}`,
name: item.channel
})
}
return channels
@ -92,7 +93,7 @@ function parseItems(content, channel) {
const [, channelId] = channel.site_id.split('#')
const channelData = data.schedule.find(i => i.channel == channelId)
return channelData.listing && Array.isArray(channelData.listing) ? channelData.listing : []
} catch (err) {
} catch {
return []
}
}
@ -106,7 +107,7 @@ function parseEpisode(item) {
function parseTime(time) {
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'Australia/Sydney')
}
function parseIcon(item) {
function parseImage(item) {
return item.image_file
? `https://www.abc.net.au/tv/common/images/publicity/${item.image_file}`
: null

View file

@ -1,54 +1,51 @@
const { parser, url } = require('./abc.net.au.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const date = dayjs.utc('2022-12-22', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'Sydney#ABC1',
xmltv_id: 'ABCTV.au'
}
const date = dayjs.utc('2025-02-04', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: 'Sydney#ABC1' }
it('can generate valid url', () => {
expect(url({ date, channel })).toBe('https://epg.abctv.net.au/processed/Sydney_2022-12-22.json')
expect(url({ date, channel })).toBe(
'https://cdn.iview.abc.net.au/epg/processed/Sydney_2025-02-04.json'
)
})
it('can parse response', () => {
const content =
'{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}'
const result = parser({ content, channel }).map(p => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
const results = parser({ content, channel }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
title: 'Silent Witness',
sub_title: 'Lift Up Your Hearts (part Two)',
description:
'When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?',
category: ['Entertainment'],
rating: {
system: 'ACB',
value: 'M'
},
season: 22,
episode: 4,
icon: 'https://www.abc.net.au/tv/common/images/publicity/ZW2178A004S00_460.jpg',
start: '2022-12-21T13:46:00.000Z',
stop: '2022-12-21T14:44:00.000Z'
}
])
expect(results.length).toBe(30)
expect(results[0]).toMatchObject({
title: "Julia Zemiro's Home Delivery",
sub_title: 'Maggie Beer',
description:
"The kitchen Maggie Beer made famous in The Cook and the Chef may be in the heart of the Barossa Valley, but our most beloved foodie meets up with Julia where she grew up in Sydney's Lakemba.",
category: ['Entertainment', 'Factual'],
rating: {
system: 'ACB',
value: 'G'
},
season: null,
episode: null,
image: 'https://www.abc.net.au/tv/common/images/publicity/LE1761H002S00_460.jpg',
start: '2025-02-03T12:40:00.000Z',
stop: '2025-02-03T13:09:00.000Z'
})
})
it('can handle empty guide', () => {
const result = parser(
{
content:
'<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>processed/Sydney_2023-01-17.json</Key><RequestId>6MRHX5TJ12X39B3Y</RequestId><HostId>59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=</HostId></Error>'
},
const results = parser({
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html')),
channel
)
expect(result).toMatchObject([])
})
expect(results).toMatchObject([])
})

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#44">44</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Adelaide#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Brisbane#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#PrimS">PrimS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Canberra#WINHD">WINHD</channel>
</channels>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#DDT">DDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#SC">SC</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Darwin#VICHD">VICHD</channel>
</channels>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#10Nth">10Nth</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#NBN">NBN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#Prime">Prime</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="GoldCoast#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SC">SC</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#SHD7">SHD7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#TDHD">TDHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#TDT">TDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Hobart#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#31">31</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Melbourne#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7GTS">7GTS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#10Nth">10Nth</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#NBN">NBN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#PrimN">PrimN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#PrimS">PrimS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="New South Wales#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#7C">7C</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Northern Territory#VICHD">VICHD</channel>
</channels>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Perth#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7C">7C</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7QLD">7QLD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#7TWOQ">7TWOQ</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Queensland#WINHD">WINHD</channel>
</channels>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7C">7C</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7GTS">7GTS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#Imp">Imp</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SC9">SC9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WIN9">WIN9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WIN10">WIN10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="South Australia#WINHD">WINHD</channel>
</channels>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#7HD">7HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#9">9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#9HD">9HD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#9Rush">9Rush</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#SPREE">SPREE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#TENHD">TENHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Sydney#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SC">SC</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#SHD7">SHD7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#TDHD">TDHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#TDT">TDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Tasmania#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7">7</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Townsville#WINHD">WINHD</channel>
</channels>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7bravo">7bravo</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7flix">7flix</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ASPIR">ASPIR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#Prime">Prime</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SCA9">SCA9</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SCHD">SCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SHAKE">SHAKE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#SNR">SNR</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#TVSN">TVSN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#WINHD">WINHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#WinSA">WinSA</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Victoria#YOUTV">YOUTV</channel>
</channels>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#7MATE">7MATE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#7TWO">7TWO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#9Life">9Life</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#10">10</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#11">11</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC1">ABC1</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC2">ABC2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC3">ABC3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABC4KIDS">ABC4KIDS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABCHD">ABCHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ABCN">ABCN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#GEM">GEM</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#GO">GO</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#GWN">GWN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#NITV">NITV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#ONE">ONE</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#RTV">RTV</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBS">SBS</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBS2">SBS2</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBS3">SBS3</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBSHD">SBSHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#SBSWW">SBSWW</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#VICHD">VICHD</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#WDT">WDT</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#WIN">WIN</channel>
<channel site="abc.net.au" lang="en" xmltv_id="" site_id="Western Australia#WINHD">WINHD</channel>
</channels>

View file

@ -2,20 +2,40 @@
https://www.abc.net.au/tv/epg/
| Region | Code |
| ------------------ | ----- |
| Sydney | `syd` |
| Melbourne | `mel` |
| Brisbane | `bri` |
| Gold Coast | `gc` |
| Perth | `per` |
| Adelaide | `adl` |
| Hobart | `hbr` |
| Darwin | `drw` |
| Canberra | `cbr` |
| New South Wales | `nsw` |
| Victoria | `vic` |
| Townsville | `tsv` |
| Queensland | `qld` |
| Western Australia | `wa` |
| South Australia | `sa` |
| Tasmania | `tas` |
| Northern Territory | `nt` |
### Download the guide
```sh
npm run grab -- --site=abc.net.au
npm run grab --- --channels=sites/abc.net.au/abc.net.au_<REGION_CODE>.channels.xml
```
### Update channel list
```sh
npm run channels:parse -- --config=./sites/abc.net.au/abc.net.au.config.js --output=./sites/abc.net.au/abc.net.au.channels.xml
npm run channels:parse --- --config=./sites/abc.net.au/abc.net.au.config.js --output=./sites/abc.net.au/abc.net.au_<REGION_CODE>.channels.xml --set=region:<REGION_CODE>
```
### Test
```sh
npm test -- abc.net.au
npm test --- abc.net.au
```

View file

@ -30,23 +30,23 @@
<channel site="allente.dk" lang="da" xmltv_id="" site_id="1033">France 24 (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="" site_id="1074">Discovery Channel HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="" site_id="1075">Eurosport 1 HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="6eren.dk" site_id="568">6&apos;eren HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="AlJazeeraEnglish.qa" site_id="0344">Al Jazeera English -OTT</channel>
<channel site="allente.dk" lang="da" xmltv_id="BBCNewsEurope.uk" site_id="0016">BBC News (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="6eren.dk" site_id="568">6'eren HD (D) (T)</channel>
<channel site="allente.dk" lang="en" xmltv_id="AlJazeera.qa@English" site_id="0344">Al Jazeera English -OTT</channel>
<channel site="allente.dk" lang="en" xmltv_id="BBCNews.uk@Europe" site_id="0016">BBC News (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="BoomerangNordic.uk" site_id="0017">Cartoonito (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="Canal9.dk" site_id="0368">CANAL9 HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="CartoonNetworkScandinavia.uk" site_id="0028">Cartoon Network (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="CNBCEurope.uk" site_id="0032">CNBC (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="CNNInternationalEurope.us" site_id="0033">CNN (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="" site_id="0028">Cartoon Network (T)</channel>
<channel site="allente.dk" lang="en" xmltv_id="CNBCEurope.uk" site_id="0032">CNBC (T)</channel>
<channel site="allente.dk" lang="en" xmltv_id="CNNInternational.us@MENA" site_id="0033">CNN (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="dk4.dk" site_id="0376">dk4 (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="DR1.dk" site_id="452">DR1 HD (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="DR2.dk" site_id="0051">DR2 HD (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="DRRamasjang.dk" site_id="0048">DR Ramasjang (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="Eurosport2.dk" site_id="0367">Eurosport 2 HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="Eurosport2.fr@Denmark" site_id="0367">Eurosport 2 HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="Kanal4.dk" site_id="0064">Kanal 4 HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="Kanal5.dk" site_id="0065">Kanal 5 HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="MTV00s.uk" site_id="0246">MTV 00s (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="MTV80s.uk" site_id="604">MTV 80s (T)</channel>
<channel site="allente.dk" lang="en" xmltv_id="MTV00s.uk" site_id="0246">MTV 00s (T)</channel>
<channel site="allente.dk" lang="en" xmltv_id="MTV80s.uk" site_id="604">MTV 80s (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="MTVGlobal.uk" site_id="0076">MTV (Nordic) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="NationalGeographic.dk" site_id="0317">National Geographic HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="NickJrScandinavia.nl" site_id="0088">Nick Jr. (T)</channel>
@ -63,7 +63,7 @@
<channel site="allente.dk" lang="da" xmltv_id="TV3Plus.dk" site_id="0248">TV3+ HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="TV3Puls.dk" site_id="665">TV3 Puls HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="TV3Sport.dk" site_id="0200">TV3 Sport HD (D) (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="TV4.se" site_id="0227">TV4 HD (T)</channel>
<channel site="allente.dk" lang="sv" xmltv_id="TV4.se" site_id="0227">TV4 HD (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="VFilmAction.se" site_id="0299">V film action HD (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="VFilmFamily.se" site_id="0308">V film family (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="VFilmHits.se" site_id="0322">V film hits HD (T)</channel>
@ -74,4 +74,4 @@
<channel site="allente.dk" lang="da" xmltv_id="VSportGolf.se" site_id="0364">V sport golf HD (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="VSportUltraHD.se" site_id="418">V sport ultra HD (T)</channel>
<channel site="allente.dk" lang="da" xmltv_id="Xee.dk" site_id="707">See (D) (T)</channel>
</channels>
</channels>

View file

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.details.categories,
description: item.details.description,
icon: item.details.image,
image: item.details.image,
season: parseSeason(item),
episode: parseEpisode(item),
start,

View file

@ -32,7 +32,8 @@ it('can parse response', () => {
category: ['other'],
description:
'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.',
icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
image:
'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
season: 4,
episode: 1
}

View file

@ -5,17 +5,17 @@ https://www.allente.dk/tv-guide/
### Download the guide
```sh
npm run grab -- --site=allente.dk
npm run grab --- --site=allente.dk
```
### Update channel list
```sh
npm run channels:parse -- --config=./sites/allente.dk/allente.dk.config.js --output=./sites/allente.dk/allente.dk.channels.xml
npm run channels:parse --- --config=./sites/allente.dk/allente.dk.config.js --output=./sites/allente.dk/allente.dk.channels.xml
```
### Test
```sh
npm test -- allente.dk
npm test --- allente.dk
```

View file

@ -46,21 +46,21 @@
<channel site="allente.fi" lang="fi" xmltv_id="" site_id="1086">MTV Urheilu 1 HD (F) (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="" site_id="1087">MTV Urheilu 2 HD (F) (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="" site_id="1088">Eurosport 1 HD (F) (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="BoomerangNordic.uk" site_id="0017">Cartoonito (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="CartoonNetworkScandinavia.uk" site_id="0028">Cartoon Network (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="CNBCEurope.uk" site_id="0032">CNBC (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="CNNInternationalEurope.us" site_id="0033">CNN (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="MTV00s.uk" site_id="0246">MTV 00s (T)</channel>
<channel site="allente.fi" lang="da" xmltv_id="BoomerangNordic.uk" site_id="0017">Cartoonito (T)</channel>
<channel site="allente.fi" lang="en" xmltv_id="" site_id="0028">Cartoon Network (T)</channel>
<channel site="allente.fi" lang="en" xmltv_id="CNBCEurope.uk" site_id="0032">CNBC (T)</channel>
<channel site="allente.fi" lang="en" xmltv_id="CNNInternational.us@MENA" site_id="0033">CNN (T)</channel>
<channel site="allente.fi" lang="en" xmltv_id="MTV00s.uk" site_id="0246">MTV 00s (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="MTVGlobal.uk" site_id="0080">MTV (Nordic) (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="NationalGeographic.fi" site_id="0084">National Geographic HD (S/F) (T)</channel>
<channel site="allente.fi" lang="sv" xmltv_id="NationalGeographic.fi" site_id="0084">National Geographic HD (S/F) (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="NickJrScandinavia.nl" site_id="0088">Nick Jr. (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VFilmAction.se" site_id="0299">V film action HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VFilmFamily.se" site_id="0308">V film family (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VFilmHits.se" site_id="0322">V film hits HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VFilmPremiere.se" site_id="0321">V film premiere HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSport1.fi" site_id="0159">V sport 1 Suomi HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSport1.se@Finland" site_id="0159">V sport 1 Suomi HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSport1.se" site_id="0362">V sport 1 HD (S/F) (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSport2.fi" site_id="488">V sport 2 Suomi HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSport2.se@Finland" site_id="488">V sport 2 Suomi HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSportFootball.se" site_id="0269">V sport football HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSportGolf.se" site_id="0364">V sport golf HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSportLive1.se" site_id="0255">V sport live 1 (T)</channel>
@ -71,4 +71,4 @@
<channel site="allente.fi" lang="fi" xmltv_id="VSportPremium.se" site_id="527">V sport premium HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSportUltraHD.se" site_id="418">V sport ultra HD (T)</channel>
<channel site="allente.fi" lang="fi" xmltv_id="VSportVinter.se" site_id="0363">V sport vinter HD (T)</channel>
</channels>
</channels>

View file

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.details.categories,
description: item.details.description,
icon: item.details.image,
image: item.details.image,
season: parseSeason(item),
episode: parseEpisode(item),
start,

View file

@ -32,7 +32,8 @@ it('can parse response', () => {
category: ['other'],
description:
'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.',
icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
image:
'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
season: 4,
episode: 1
}

Some files were not shown because too many files have changed in this diff Show more