diff --git a/SITES.md b/SITES.md
index c2da69e5..00a82749 100644
--- a/SITES.md
+++ b/SITES.md
@@ -16,7 +16,7 @@
| antennasatellite.gr | 1 | 1 | 🟢 | |
| arianatelevision.com | 1 | 1 | 🟢 | |
| arirang.com | 3 | 3 | 🟢 | |
- | artonline.tv | 5 | 5 | 🟢 | https://github.com/iptv-org/epg/issues/2954 |
+ | artonline.tv | 5 | 5 | 🟢 | |
| awilime.com | 110 | 0 | 🟢 | |
| bein.com | 134 | 134 | 🟢 | |
| beinsports.com | 130 | 81 | 🟢 | |
@@ -42,6 +42,7 @@
| directv.com.ar | 371 | 0 | 🔴 | https://github.com/iptv-org/epg/issues/2339 |
| directv.com.uy | 374 | 59 | 🟢 | |
| dishtv.in | 434 | 326 | 🟢 | |
+ | distro.tv | 315 | 123 | 🟢 | |
| dna.fi | 123 | 0 | 🟢 | |
| dsmart.com.tr | 100 | 76 | 🟢 | |
| dstv.com | 2979 | 80 | 🟢 | |
@@ -91,7 +92,7 @@
| mediaklikk.hu | 8 | 8 | 🟢 | |
| mediasetinfinity.mediaset.it | 13 | 13 | 🟢 | |
| melita.com | 127 | 110 | 🟢 | |
- | meo.pt | 211 | 185 | 🟢 | |
+ | meo.pt | 211 | 185 | 🟢 | https://github.com/iptv-org/epg/issues/3022 |
| meuguia.tv | 102 | 96 | 🟢 | |
| mewatch.sg | 25 | 24 | 🟢 | |
| mi.tv | 2084 | 614 | 🟢 | |
@@ -230,6 +231,7 @@
| wavve.com | 77 | 76 | 🟢 | |
| web.magentatv.de | 348 | 226 | 🟢 | https://github.com/iptv-org/epg/issues/2966 |
| webtv.delta.nl | 247 | 204 | 🟢 | |
+ | webtv.sk | 186 | 0 | 🟢 | |
| winplay.co | 2 | 2 | 🟢 | https://github.com/iptv-org/epg/issues/3003 |
| worldfishingnetwork.com | 1 | 1 | 🟢 | |
| www3.nhk.or.jp | 1 | 1 | 🟢 | |
diff --git a/sites/distro.tv/__data__/content.json b/sites/distro.tv/__data__/content.json
new file mode 100644
index 00000000..0f7fcb06
--- /dev/null
+++ b/sites/distro.tv/__data__/content.json
@@ -0,0 +1,734 @@
+{
+ "version": "1.0",
+ "env": {
+ "st": "2026-02-10 10:24:59"
+ },
+ "epg": {
+ "45143": {
+ "title": "Euronews",
+ "description": "Europe’s leading international news channel. Its mission is to empower people to form their own opinion. Euronews is impartial with a diversity of viewpoints.",
+ "slots": [
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 10:17:05",
+ "end": "2026-02-10 10:30:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 10:30:00",
+ "end": "2026-02-10 10:46:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 10:46:00",
+ "end": "2026-02-10 11:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 11:00:00",
+ "end": "2026-02-10 11:30:05"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 11:30:05",
+ "end": "2026-02-10 12:15:30"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 12:15:30",
+ "end": "2026-02-10 13:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 13:00:00",
+ "end": "2026-02-10 13:30:05"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 13:30:05",
+ "end": "2026-02-10 14:15:30"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 14:15:30",
+ "end": "2026-02-10 14:45:55"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 14:45:55",
+ "end": "2026-02-10 15:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 15:00:00",
+ "end": "2026-02-10 15:18:40"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 15:18:40",
+ "end": "2026-02-10 15:30:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 15:30:00",
+ "end": "2026-02-10 16:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 16:00:00",
+ "end": "2026-02-10 16:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 16:30:05",
+ "end": "2026-02-10 17:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 17:15:30",
+ "end": "2026-02-10 18:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 18:00:00",
+ "end": "2026-02-10 18:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 18:30:05",
+ "end": "2026-02-10 19:14:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 19:14:30",
+ "end": "2026-02-10 19:30:55"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 19:30:55",
+ "end": "2026-02-10 19:45:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 19:45:00",
+ "end": "2026-02-10 20:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 20:15:30",
+ "end": "2026-02-10 21:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 21:00:00",
+ "end": "2026-02-10 21:31:15"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 21:31:15",
+ "end": "2026-02-10 22:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 22:00:00",
+ "end": "2026-02-10 22:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 22:30:05",
+ "end": "2026-02-10 23:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-10 23:15:30",
+ "end": "2026-02-11 00:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 00:00:00",
+ "end": "2026-02-11 00:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 00:30:05",
+ "end": "2026-02-11 01:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 01:15:30",
+ "end": "2026-02-11 02:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 02:00:00",
+ "end": "2026-02-11 02:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 02:30:05",
+ "end": "2026-02-11 03:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 03:15:30",
+ "end": "2026-02-11 04:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 04:00:00",
+ "end": "2026-02-11 04:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 04:30:05",
+ "end": "2026-02-11 05:00:00"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 05:00:00",
+ "end": "2026-02-11 05:30:05"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 05:30:05",
+ "end": "2026-02-11 06:15:30"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 06:15:30",
+ "end": "2026-02-11 07:00:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 07:00:00",
+ "end": "2026-02-11 07:30:00"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 07:30:00",
+ "end": "2026-02-11 08:00:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 08:00:00",
+ "end": "2026-02-11 08:30:00"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 08:30:00",
+ "end": "2026-02-11 09:00:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 09:00:00",
+ "end": "2026-02-11 09:30:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 09:30:00",
+ "end": "2026-02-11 10:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 10:00:00",
+ "end": "2026-02-11 10:31:15"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 10:31:15",
+ "end": "2026-02-11 11:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 11:00:00",
+ "end": "2026-02-11 11:30:05"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 11:30:05",
+ "end": "2026-02-11 11:46:30"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 11:46:30",
+ "end": "2026-02-11 12:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 12:00:00",
+ "end": "2026-02-11 12:30:05"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 12:30:05",
+ "end": "2026-02-11 13:15:30"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 13:15:30",
+ "end": "2026-02-11 14:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 14:00:00",
+ "end": "2026-02-11 14:31:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 14:31:00",
+ "end": "2026-02-11 15:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 15:00:00",
+ "end": "2026-02-11 15:30:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 15:30:00",
+ "end": "2026-02-11 16:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 16:00:00",
+ "end": "2026-02-11 16:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 16:30:05",
+ "end": "2026-02-11 17:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 17:15:30",
+ "end": "2026-02-11 17:48:25"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 17:48:25",
+ "end": "2026-02-11 18:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 18:00:00",
+ "end": "2026-02-11 18:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 18:30:05",
+ "end": "2026-02-11 19:14:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 19:14:30",
+ "end": "2026-02-11 19:30:51"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 19:30:51",
+ "end": "2026-02-11 20:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 20:00:00",
+ "end": "2026-02-11 20:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 20:30:05",
+ "end": "2026-02-11 21:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 21:15:30",
+ "end": "2026-02-11 22:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 22:00:00",
+ "end": "2026-02-11 22:29:55"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 22:29:55",
+ "end": "2026-02-11 23:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 23:00:00",
+ "end": "2026-02-11 23:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 23:30:05",
+ "end": "2026-02-11 23:46:15"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-11 23:46:15",
+ "end": "2026-02-12 00:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 00:00:00",
+ "end": "2026-02-12 00:31:30"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 00:31:30",
+ "end": "2026-02-12 01:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 01:00:00",
+ "end": "2026-02-12 01:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 01:30:05",
+ "end": "2026-02-12 02:14:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 02:14:30",
+ "end": "2026-02-12 03:00:00"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 03:00:00",
+ "end": "2026-02-12 03:30:05"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 03:30:05",
+ "end": "2026-02-12 04:15:30"
+ },
+ {
+ "title": "The European debrief",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 04:15:30",
+ "end": "2026-02-12 05:00:00"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 05:00:00",
+ "end": "2026-02-12 05:30:05"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 05:30:05",
+ "end": "2026-02-12 06:15:30"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 06:15:30",
+ "end": "2026-02-12 07:00:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 07:00:00",
+ "end": "2026-02-12 07:30:00"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 07:30:00",
+ "end": "2026-02-12 08:00:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 08:00:00",
+ "end": "2026-02-12 08:30:00"
+ },
+ {
+ "title": "Wake up Europe",
+ "description": "Live headlines,breaking news, analysis and interviews from Europe's News Centre.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 08:30:00",
+ "end": "2026-02-12 09:00:00"
+ },
+ {
+ "title": "News",
+ "description": "The leading news stories of the moment.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 09:00:00",
+ "end": "2026-02-12 09:30:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 09:30:00",
+ "end": "2026-02-12 10:00:00"
+ },
+ {
+ "title": "Euronews Now",
+ "description": "Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.",
+ "rating": null,
+ "img_thumbh": null,
+ "start": "2026-02-12 10:00:00",
+ "end": "2026-02-12 10:30:00"
+ }
+ ]
+}
+ }
+}
\ No newline at end of file
diff --git a/sites/distro.tv/distro.tv.channels.xml b/sites/distro.tv/distro.tv.channels.xml
new file mode 100644
index 00000000..821f1309
--- /dev/null
+++ b/sites/distro.tv/distro.tv.channels.xml
@@ -0,0 +1,211 @@
+
+
+ Horizon Sports
+ The Boat Show
+ Outside
+ Lone Star
+ Hard Knocks
+ Right Now Tv
+ OAN Plus
+ AWE Plus
+ Schwab Network
+ CJC Television Network
+ World Poker Tour
+ Humor Mill
+ SKWAD
+ Cooking Panda
+ SportsGrid
+ Revry
+ Revry Her
+ Euronews
+ Euronews Español
+ Zoomer TV
+ MotorRacing
+ BarkTV
+ Times Now Navbharat
+ Powersports World
+ Garv Punjab Gurbani
+ Swar Shree
+ True History
+ ACL Cornhole TV
+ Hare Krsna
+ TV Punjab
+ Kaloopy
+ ABP News
+ ABP Asmita
+ ABP Majha
+ ABP Ananda
+ ABP Ganga
+ ABP Sanjha
+ Bless TV
+ Afriwood Blockbuster
+ Cinema Hausa
+ True African
+ NatureStream.tv
+ Africanews
+ Pitaara TV
+ FUEL TV
+ Gusto TV
+ 4K TRAVEL TV
+ ENCORE+
+ KOZOOM TV
+ Balle Balle
+ TRACE Latina
+ TRACE Urban
+ IndieBox
+ TRACE Brazuca
+ Bleav Football
+ DeFiance Media
+ Sports Connect
+ CraftsyTV
+ 9XM
+ 9X Jalwa
+ BritAsiaTV
+ News9Live
+ TV9 Bangla
+ TV9 Bharatvarsh
+ TV9 Gujarati
+ TV9 Kannada
+ TV9 Marathi
+ TV9 Telugu
+ FloRacing 24/7
+ crema.tv
+ Negocios TV
+ FEVA TV
+ FEVA MUSIC
+ Lakshya TV
+ Kartavya TV
+ Kalyan TV
+ Al Arabiya
+ PNC Drama
+ Rotana Aflam+
+ M+
+ Mediacorp Entertainment – English
+ Mediacorp Entertainment – Tamil
+ Shemaroo Bollywood
+ Shemaroo Filmigaane
+ Bollywood Masala
+ YRF Music
+ Saga Music
+ Toon Goggles en Español
+ DroneTV
+ PLL Network
+ TRACE UK
+ TidPix-Authentically African
+ Green Chillies TV- Zindagi ka Tadka!
+ Cowboy Channel
+ News Nation
+ Watch Wellness
+ Watch Wellness Telugu
+ Ghost Dimension
+ Tabbar Hits
+ Comercio TV
+ Cartoon Classics
+ Comedy Classics
+ SportsTVPlus
+ Old West TV
+ 4ACETV
+ 4ACETV CLASSIC HITS
+ The Holiday TV Channel
+ Haryana Beat
+ Nakshatra Digital Tv
+ Sudarshan News
+ Sundrani Tv
+ Colorized.TV
+ MomCave
+ HIP HOP TV
+ Fitness Rewind by Collage Video
+ AMusic Channel
+ Skull Bound TV
+ Viajar TV
+ Box Cinema
+ Box Gamers
+ HITS MEXICANOS
+ Rockola Television
+ Nigbati TV
+ Urban Action Channel
+ a-z Best Classic TV
+ a-z Classic Flix
+ a-z Western Grit
+ OurVinyl
+ Sports First TV
+ ACI On The Go
+ NOMADslow tv
+ Cigar TV
+ Aaj Ki Khabar
+ Atmadarshan Tv
+ Namma Bangalore
+ Tara Tv
+ The Unmute
+ Bhakthi Siri
+ Wild TV
+ Vande Bharat News
+ KTV Bangla
+ Ann Channel
+ Indian News
+ Mahua Play
+ Mahua Khabar
+ The Reuters 60
+ In Touch+
+ Anand Tv
+ Bharat 24
+ Mahaa Max
+ Mahaa News
+ Munsif Tv
+ News India 24X7
+ News Marathi 24X7
+ Rongeen Tv
+ Rozana Spokesman
+ Prameya News7
+ Amplified Voices TV
+ UnchainedTV
+ POWERtube TV
+ Mi Raza Canal
+ Mi Raza Canal Plus
+ Mi Miedo Canal
+ India Daily 24x7
+ Elevation Church Network
+ News Tamil 24x7
+ News Malayalam 24x7
+ World Punjabi Tv
+ Top News Marathi
+ Pratham Khabar 24x7
+ Novo Comedy
+ Crime & Evidence
+ Cinema Yoruba
+ Kolkata Tv
+ P18 News
+ Big Tv
+ ABN Andhra Jyothy
+ Outdoor Channel
+ WFN: World Fishing Network
+ Sana Tv
+ Janataa TV Kannada
+ DA News Plus
+ Sandesh News
+ Gujarat First
+ 35MM
+ Sakshi Tv
+ Unleashed by DOGTV
+ Prime Asia Tv
+ Daystar TV
+ Daystar Español
+ Bowling TV
+ CTVN AKD Plus
+ CN News
+ RVTV
+ Wine, Watches & Whiskey
+ ONTV4U
+ Amar Ujala
+ DJ Central TV
+ GTC Punjabi
+ Punjabi Shorts
+ Rock Solid Wrestling TV
+ CarbonTV
+ CG Central
+ spot on news
+ Golf Network
+ Foosball TV
+ Bharat Express
+ Argus News
+
\ No newline at end of file
diff --git a/sites/distro.tv/distro.tv.config.js b/sites/distro.tv/distro.tv.config.js
new file mode 100644
index 00000000..0d84df6f
--- /dev/null
+++ b/sites/distro.tv/distro.tv.config.js
@@ -0,0 +1,81 @@
+const axios = require('axios')
+const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+const customParseFormat = require('dayjs/plugin/customParseFormat')
+
+const HEADERS = {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0',
+ 'Referer': 'https://distro.tv/',
+ 'Origin': 'https://distro.tv'
+}
+
+dayjs.extend(utc)
+dayjs.extend(customParseFormat)
+
+module.exports = {
+ site: 'distro.tv',
+ days: 3,
+ request: {
+ headers: HEADERS,
+ timeout: 60000
+ },
+ url({ channel, date }) {
+ const diff = date.diff(dayjs.utc().startOf('d'), 'd')
+ let range
+
+ if (diff <= 0) {
+ range = 'now,24h'
+ } else {
+ const start = diff * 24
+ const end = (diff + 1) * 24
+ range = `${start}h,${end}h`
+ }
+
+ return `https://tv.jsrdn.com/epg/query.php?range=${range}&id=${channel.site_id},`
+ },
+ parser({ content, channel }) {
+ if (!content || !channel) return []
+ let programs = []
+ try {
+ const data = JSON.parse(content)
+ if (!data.epg || !data.epg[channel.site_id] || !Array.isArray(data.epg[channel.site_id].slots)) {
+ return []
+ }
+ programs = data.epg[channel.site_id].slots.map(program => ({
+ title: program.title,
+ description: program.description || null,
+ icon: program.img_thumbh || null,
+ start: dayjs.utc(program.start, 'YYYY-MM-DD HH:mm:ss'),
+ stop: dayjs.utc(program.end, 'YYYY-MM-DD HH:mm:ss')
+ }))
+ } catch {
+ return []
+ }
+
+ return programs.filter(p => p.title && p.start.isValid() && p.stop.isValid())
+ },
+ async channels() {
+ const { data } = await axios.get('https://tv.jsrdn.com/tv_v5/getfeed.php?type=live', {
+ headers: HEADERS
+ })
+
+ const channels = []
+ if (data && data.shows) {
+ Object.values(data.shows).forEach(show => {
+ const episode = show.seasons?.[0]?.episodes?.[0]
+ if (episode && episode.id) {
+ channels.push({
+ lang: 'en',
+ // lang: show.language || 'en',
+ site_id: episode.id.toString(),
+ name: show.title,
+ // logo: show.img_logo,
+ // url: episode.content?.url || null
+ })
+ }
+ })
+ }
+
+ return channels
+ }
+}
\ No newline at end of file
diff --git a/sites/distro.tv/distro.tv.test.js b/sites/distro.tv/distro.tv.test.js
new file mode 100644
index 00000000..45148b71
--- /dev/null
+++ b/sites/distro.tv/distro.tv.test.js
@@ -0,0 +1,70 @@
+const fs = require('fs')
+const path = require('path')
+const { parser, url, channels } = require('./distro.tv.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 axios = require('axios')
+jest.mock('axios')
+
+const date = dayjs.utc().add(1, 'd').startOf('d')
+const channel = {
+ site_id: '45143'
+}
+
+it('can generate valid url', () => {
+ expect(url({ channel, date })).toBe(
+ 'https://tv.jsrdn.com/epg/query.php?range=24h,48h&id=45143,'
+ )
+})
+
+it('can parse response', () => {
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
+ const results = parser({ content, channel })
+
+ expect(results[0]).toMatchObject({
+ title: 'News',
+ description: 'The leading news stories of the moment.',
+ start: dayjs.utc('2026-02-10 10:17:05'),
+ stop: dayjs.utc('2026-02-10 10:30:00')
+ })
+ expect(results[1]).toMatchObject({
+ title: 'Euronews Now',
+ description: 'Breaking News. In depth analysis on the biggest stories making headlines in Europe and across the world.',
+ start: dayjs.utc('2026-02-10 10:30:00'),
+ stop: dayjs.utc('2026-02-10 10:46:00')
+ })
+})
+
+it('can handle empty guide', () => {
+ const results = parser({
+ content: '{"epg":{"45143":{"title":"Euronews","slots":[]}}}',
+ channel
+ })
+ expect(results).toMatchObject([])
+})
+
+it('can fetch channels', async () => {
+ axios.get.mockResolvedValue({
+ data: {
+ shows: {
+ 414: {
+ title: 'Titanic TV',
+ language: 'en',
+ img_logo: 'logo.png',
+ seasons: [{ episodes: [{ id: 10953 }] }]
+ }
+ }
+ }
+ })
+
+ const result = await channels()
+ expect(result[0]).toMatchObject({
+ lang: 'en',
+ site_id: '10953',
+ name: 'Titanic TV'
+ })
+})
\ No newline at end of file
diff --git a/sites/distro.tv/distro.tv_us.channels.xml b/sites/distro.tv/distro.tv_us.channels.xml
new file mode 100644
index 00000000..d51b6c15
--- /dev/null
+++ b/sites/distro.tv/distro.tv_us.channels.xml
@@ -0,0 +1,110 @@
+
+
+ FTF Sports
+ Dove
+ The First
+ Newsmax TV
+ Qello Concerts
+ Stingray Karaoke
+ Stingray Naturescape
+ Stingray Classica
+ Stingray DJAZZ
+ Stingray Hit List
+ Stingray Hot Country
+ Stingray Rock Alternative
+ Stingray Pop Adult
+ Stingray Classic Rock
+ Stingray Éxitos del Momento
+ Stingray Greatest Hits
+ Stingray HipHop and RnB
+ Stingray Flashback 70s
+ Stingray Remember the 80s
+ Law & Crime
+ 24 Hour Free Movies
+ Channel Fight
+ Business Rockstars
+ Cinepride
+ Dungeon TV
+ Frightflix
+ Galxy TV
+ Screendreams by Invincible
+ Slopes TV
+ Watchit Scream!
+ Bloomberg Television
+ CineLife
+ Bloomberg Originals
+ Wired2fish TV
+ XFC TV
+ NOST - The Nostalgia Network
+ ShopLC
+ Horror Machine
+ Journy
+ WION World is One News
+ Billiard TV
+ Mirror Now
+ ACE TV
+ Real America's Voice
+ SI TV
+ AfroLandTV
+ Swerve Combat
+ FITE 24/7
+ TNA Wrestling Channel
+ Fight Network
+ AXS TV Now
+ beIN SPORTS Xtra
+ beIN SPORTS Xtra en Español
+ Watchit Kid!
+ FUEL TV
+ Nolly Africa HD
+ EstrellaTV
+ Estrella News
+ Estrella Games
+ Bollywood Classic
+ Bollywood HD
+ Motorvision TV
+ Motorvision TV Español
+ Western Bound
+ CCTV-4
+ CGTN
+ CGTN Documentary
+ CGTN Español
+ MTRSPT1
+ Jewish Life Television JLTV
+ Scream TV
+ TV9 Telugu USA
+ Court Sports Network
+ Romance Channel
+ NTD News
+ Mediacorp Entertainment – Chinese
+ Pitufo TV
+ Zee BollyWorld
+ Fork & Flight
+ Investigation
+ Global Punjab TV
+ PLL Network
+ Willow Sports
+ CNA Originals
+ CinePast
+ Cowboy Classics
+ Hollywood Classic Movies
+ Kung Fu Movies
+ The Family TV Channel
+ The Spanish Family Channel
+ ToonOvation
+ Digo TV
+ History Film Channel
+ hi Drama!
+ hi Life!
+ hi Vida!
+ My Money
+ Cirque du Soleil
+ Wild Nature
+ Chicas Guapas TV
+ Screams TV by Trinian
+ Gritos TV by Trinian
+ CGTN Global Biz
+ China Travel
+ Discovering China
+ Pickleball Now
+ PTC Punjabi Canada
+
\ No newline at end of file
diff --git a/sites/distro.tv/readme.md b/sites/distro.tv/readme.md
new file mode 100644
index 00000000..abca8329
--- /dev/null
+++ b/sites/distro.tv/readme.md
@@ -0,0 +1,21 @@
+# distro.tv
+
+https://distro.tv
+
+### Download the guide
+
+```sh
+npm run grab --- --site=distro.tv
+```
+
+### Update channel list (varies based on region/IP)
+
+```sh
+npm run channels:parse --- --config=./sites/distro.tv/distro.tv.config.js --output=./sites/distro.tv/distro.tv.channels.xml
+```
+
+### Test
+
+```sh
+npm test --- distro.tv
+```
\ No newline at end of file