From f23fd33347abd5177d9037e4f5857be0dc79ea00 Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Sun, 15 Mar 2026 12:59:34 +0000
Subject: [PATCH 1/8] read desc
meo.pt:
- organise channels
- add more xmltv_id's
nostv.pt:
- organise channels
- add more xmltv_id's
vodafone.pt:
- organise channels
- add more xmltv_id's
- add parse channel function in vodafone.pt.config.js
rtp.pt:
- add parse channel funcion in rtp.pt.config.js
sporttv.pt:
- add parse channel funcion in rtp.pt.config.js
opto.sic.pt:
- remove one channel that isn't in their guide now
---
sites/meo.pt/meo.pt.channels.xml | 193 ++++++------
sites/nostv.pt/nostv.pt.channels.xml | 322 ++++++++++-----------
sites/opto.sic.pt/opto.sic.pt.channels.xml | 1 -
sites/rtp.pt/rtp.pt.channels.xml | 14 +-
sites/rtp.pt/rtp.pt.config.js | 25 ++
sites/sporttv.pt/sporttv.pt.channels.xml | 4 +-
sites/sporttv.pt/sporttv.pt.config.js | 25 ++
sites/vodafone.pt/vodafone.pt.channels.xml | 258 ++++++++---------
sites/vodafone.pt/vodafone.pt.config.js | 24 ++
9 files changed, 467 insertions(+), 399 deletions(-)
diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml
index 1f6cc070..f6cf9e7c 100644
--- a/sites/meo.pt/meo.pt.channels.xml
+++ b/sites/meo.pt/meo.pt.channels.xml
@@ -1,154 +1,154 @@
-
+
- Channel 1 Russia
- 3SAT
- 1+1 International
- 1+1 United News
18
+ Caça e Pesca
+ Caçavision
+ MEO Destaques
+ Dog TV
+ Duck TV
+ Galeria
+ Home & Garden TV
+ HOTGO
+ New Brasil
+ OneToro TV
+ OPTO
+ Veja
+ 1+1 United News
+ 1+1 International
+ TVE24
24Kitchen
- A Bola TV
+ 3SAT
+ A Bola
Afro Music
Aljazeera
Alma Lusa
AMC Break
AMC Crime
AMC
- ARD
- Arirang
+ Arirang TV
Arte
ARTV
- AXN
- AXN Movies
- AXN White
- Azores TV
+ AXN HD
+ AXN Movies HD
+ AXN White HD
Baby TV
- BFM TV
+ BBC World News
+ BTV
BFM Business
+ BFM TV
Biggs
Bloomberg
BNT 4
- BODY SEX
- BomSom Channel
+ BomSom TV
BVN
11
CANAL 180
- Caça e Pesca
- Caçavision
+ Hollywood
+ Panda
+ Q
+ UM Europa
+ Cartoonito
Cartoon Network
Casa e Cozinha
- CCTV 4
- CGTN Documentary
+ CCTV4
CGTN
+ CGTN Documentary
+ Channel 1 Russia
Cinemundo
- Stingray Classica
- Clubbing TV
CMTV
CNBC
- Cartoonito
CNN
CNN Portugal
- Canção Nova
+ Conectv
Conta Lá
Cubavision
+ ARD
+ Daystar (I)
+ Daystar (E)
DAZN 1
DAZN 2
DAZN 3
DAZN 4
DAZN 5
- DAZN 6
- MEO Destaques
Discovery Channel
Disney Channel
Disney Junior
- Dizi Channel
- Stingray Djazz
- Dog TV
- DORCEL TV
- Duck TV
- DEUTSCHE WELLE
- English Club TV
- Eurosport 1
- Euronews
+ Dorcel TV
+ English Club TV
+ Erox HD
+ Euronews (I)
Euronews (A)
- Euronews (I)
- Eurosport 2
+ Euronews
+ Eurosport 1
+ Eurosport 2
+ Fashion TV
+ Fashion TV 4K
Fight Sports
France 2
- France 3
- France 5
- France 24 (F)
France 24 (I)
+ France 24 (F)
+ France 3
+ France 4
+ France 5
+ France Info
Freedom
- Fashion TV 4K
- Fashion TV
- Fuel TV
- Galeria
+ TV Galícia
Gametoon
- Globo
Globo News
- Home & Garden TV
História
- Canal Hollywood
HOT
HOT Man
HOT Taboo
- i24 News (F)
+ Hustler HD
i24 News (I)
- Stingray iConcerts
- Investigation Discovery
- RAI Italia
- Kanuka TV
+ i24 News (F)
+ Investigation Discovery
+ Kanuca TV
KBS World
KIKA
Kuriakos TV
Kvartal TV International
- Lolly kids
- Stingray Loud
Localvisão TV
- TV Maanaim
- SET MAX
+ Lolly Kids
+ M6
MCM Pop
MCM Top
- Mezzo Live
Mezzo
- NBA TV
- NEW Brasil
- News Now
+ Mezzo Live HD
National Geographic
+ National Geographic Wild
+ News Now
NHK World Japan
Nickelodeon
Nick Jr.
- Novo Tempo Portugal
+ NOVO TEMPO
Odisseia
- OneToro TV
- Panda
Panda Kids
- Playboy TV
Penthouse Gold
- PFC
Phoenix CNE
+ Playboy TV HD
Porto Canal
PRO TV Internacional
- Q
RAI 1
RAI 2
RAI 3
+ RAI Itália
RAI News
- Record Europa
- Record News
- Stingray Retro
- RTP 1
- RTP 2
- RTP Noticias
- RTP África
- RTP Açores
- RTP Memória
- RTP Madeira
- Russia Today
- Sporting TV
RAI Scuola
- SET ASIA
+ RAI Storia
+ Record News
+ Record Europa
+ Globo
+ Russia Today
+ RTP1
+ RTP2
+ RTP Açores
+ RTP África
+ RTP Madeira
+ RTP Memória
+ RTP Notícias
SexTreme
+ Sexy Hot
SIC
SIC Caras
SIC K
@@ -157,58 +157,59 @@
SIC Novelas
SIC Radical
Sky News
- BTV
+ SET Asia
+ SET Max
S+
+ Sporting TV HD
Sport TV1
Sport TV2
Sport TV3
Sport TV4
Sport TV5
Sport TV6
- Sport TV 7
- Sport TV+
+ Sport TV7
+ Sport TV +
STAR Channel
Star Cinema
STAR Comedy
STAR Crime
- Star Family
STAR Life
STAR Movies
- RAI Storia
+ Stingray Classica
+ Stingray Djazz
+ Stingray iConcerts
+ Stingray Loud
+ Stingray Retro
SyFy
Tagesschau24
TCV Internacional
- Telesur
+ Telesur HD
+ Dizi Channel
TLC
TPA Notícias
Trace Urban
Travelxp HD
- Travelxp 4K HDR
TRT World
TV5 Monde
Televisão África
+ Canção Nova
TVCine Action
TVCine Edition
TVCine Emotion
- TVCine TOP
- TVE 24H
+ TVCine Top
TVEi
- TV Galicia
TVI
TVI Reality
- TV Verdade
- UM Europa
+ TV Maanaim
Unifé TV
Venus
- VIVID RED
+ Azores TV
VIXEN
V+ TVI
- MEO VideoClube
- National Geographic Wild
- W-Sport
+ W Sport
X Sport
ZDF
ZDFNEO
- ZEE CINEMA
- ZEE TV
+ Zee Cinema
+ Zee TV
\ No newline at end of file
diff --git a/sites/nostv.pt/nostv.pt.channels.xml b/sites/nostv.pt/nostv.pt.channels.xml
index 0eb5ba71..51083818 100644
--- a/sites/nostv.pt/nostv.pt.channels.xml
+++ b/sites/nostv.pt/nostv.pt.channels.xml
@@ -1,170 +1,164 @@
-
+
- Canal Hollywood HD
- Canal História
- Discovery Channel
- TLC
- 1+1
- Euronews
- CNN
- RTP África
- BVN
- Record News
- TeleSUR
- MCM Top
- M6
- Sky News
- RTL
- ARTE
- Stingray iConcerts HD
- Bloomberg
- NHK World TV
- FTV HD
- TVEi
- ARTV
- Mezzo
- FTV
- CNBC
- TV5 Monde
- TV Galicia
- Rai Italia
- Zee TV
- Canal 180
- Food Network HD
- Trace Urban HD
- Travel Channel HD
- Fuel TV HD
- TVCine EDITION HD
- AXN White HD
- RTP Memória
- National Geographic WILD HD
- Nickelodeon
- Travel Channel
- RTP Açores
- RTP Madeira
- Al Jazeera
- France 24 (I)
- Globo News
- PFC
- STAR Comedy
- DW
- RTR Planeta
- Phoenix CNE
- Phoenix Infonews
- Cubavisión Internacional
- TVR Internacional
- BNT World
- Eurosport 2
- Caça e Pesca
- France 24 (F)
- National Geographic HD
- SPORT TV1 HD
- TPA Notícias
- RTP 1 HD
- TVCine TOP HD
- Canção Nova
- MAX
- SET Asia
- Eurosport 1 HD
- AXN HD
- Russia Today
- MyZen TV
- TVE 24h
- STAR Channel
- STAR Life
- Biggs
- SPORT TV5 HD
- SPORT TV2 HD
- SPORT TV3 HD
- AXN Movies HD
- Super RTL
- Syfy HD
- E! Entertainment HD
- TVCine EMOTION HD
- TVCine ACTION HD
- Localvisão TV HD
- KBS World HD
- Canal Q
- Fight Network HD
- TCV Internacional
- STAR Movies
- 24Kitchen HD
- STAR Crime
- BTV1 HD
- SPORT TV4 HD
- Cartoon Network HD
- Afro Music Channel
- CGTN
- CCTV 4
- STV Notícias
- Record TV HD
- Sporting TV HD
- Motorvision HD
- Mezzo Live HD
- MCM Pop
- DOGTV
- MTV Portugal HD
- Canal NOS HD
- AMC Crime
- AMC HD
- SPORT TV+ HD
- SIC HD
- SIC Notícias HD
- SIC Mulher HD
- SIC Caras HD
- SIC Radical HD
- Porto Canal HD
- CMTV HD
- Kuriakos TV
- ODISSEIA HD
- Nick Jr.
- Globo HD
- Baby TV
- Sport TV NBA
- AMC Break HD
- S+ HD
- ELEVEN SPORTS 3
- ELEVEN SPORTS 4
- ELEVEN SPORTS 5
- ELEVEN SPORTS 6
- ELEVEN SPORTS 1
- ELEVEN SPORTS 2
- ID Investigation Discovery
- ZAP Viva HD
- DW (Alemão)
- Trace Toca
- Canal História HD
- AMC Crime HD
- NOS Studios HD
- SIC K HD
- RTP 2 HD
- TVI HD
- RTP Noticias HD
- CNN Portugal HD
- Discovery HD
- Eurosport 2 HD
- Canal 11 HD
- TVI Reality HD
- Casa e Cozinha HD
- V+TVI HD
- Canal Galeria
- Canal Panda HD
- Disney Channel HD
- Panda KIDS
- Sport TV 6 HD
- Disney Junior HD
- Nautical Channel
Horse TV
- ELEVEN EXTRA 1
- ELEVEN EXTRA 2
- ELEVEN EXTRA 3
- ELEVEN EXTRA 4
- Unifé TV
+ BNT World
+ Caça e Pesca
+ Canal NOS HD
+ Canal Galeria
+ Canal Convidado
OneToro TV
New Brasil
- W-Sport
- Dizi
- Now
- Sport TV 7 HD
+ HGTV
+ 1+1
+ TVE 24h
+ 24Kitchen HD
+ A Bola TV
+ Afro Music Channel
+ Al Jazeera
+ AMC Break HD
+ AMC Crime HD
+ AMC HD
+ ARTE
+ ARTV
+ AXN HD
+ AXN Movies HD
+ AXN White HD
+ Baby TV
+ BTV1 HD
+ Biggs
+ Bloomberg
+ BVN
+ Canal 11 HD
+ Canal 180
+ Canal Hollywood HD
+ TDM
+ Canal Panda HD
+ Canal Q
+ Cartoonito
+ Cartoon Network HD
+ Casa e Cozinha HD
+ CCTV 4
+ CGTN
+ CMTV HD
+ CNBC
+ CNN
+ CNN Portugal HD
Conta Lá
+ Cubavisión Internacional
+ Daystar
+ Daystar Español
+ DAZN 1
+ DAZN 2
+ DAZN 3
+ DAZN 4
+ DAZN 5
+ Discovery HD
+ Disney Channel HD
+ Disney Junior HD
+ DOGTV
+ DW
+ E! Entertainment HD
+ Euronews
+ Eurosport 1 HD
+ Eurosport 2 HD
+ FTV HD
+ Fight Network HD
+ Food Network HD
+ France 24 (I)
+ France 24 (F)
+ Fuel TV HD
+ TV Galicia
+ Globo HD
+ Globo News
+ Canal História HD
+ ID Investigation Discovery
+ KBS World HD
+ Kuriakos TV
+ Localvisão TV HD
+ M6
+ MCM Pop
+ MCM Top
+ Mezzo
+ Mezzo Live HD
+ Motorvision HD
+ MTV Portugal HD
+ MyZen TV
+ National Geographic HD
+ National Geographic WILD HD
+ Nautical Channel
+ NewsNOW
+ NHK World TV
+ Nickelodeon
+ Nick Jr.
+ NOS Studios HD
+ ODISSEIA HD
+ Panda KIDS
+ Porto Canal HD
+ Rai Italia
+ Record News
+ Record
+ Russia Today
+ RTL
+ Super RTL
+ RTP 1 HD
+ RTP 2 HD
+ RTP Açores
+ RTP África
+ RTP Madeira
+ RTP Memória
+ RTP Notícias HD
+ RTR Planeta
+ SIC HD
+ SIC Caras HD
+ SIC K HD
+ SIC Mulher HD
+ SIC Notícias HD
+ SIC Novelas
+ SIC Radical HD
+ Sky News
+ SET Asia
+ MAX
+ S+ HD
+ Sporting TV HD
+ SPORT TV1 HD
+ SPORT TV2 HD
+ SPORT TV3 HD
+ SPORT TV4 HD
+ SPORT TV5 HD
+ Sport TV 6 HD
+ Sport TV 7 HD
+ SPORT TV+ HD
+ Star Channel HD
+ Star Comedy HD
+ Star Crime HD
+ Star Life HD
+ Star Movies HD
+ Stingray iConcerts HD
+ STV Notícias
+ Syfy HD
+ TCV Internacional
+ TeleSUR
+ Dizi
+ TLC
+ TPA Notícias
+ Trace Brasil
+ Trace Toca
+ Trace Urban HD
+ Travel Channel HD
+ TV5 Monde
+ Canção Nova
+ TVCine ACTION HD
+ TVCine EDITION HD
+ TVCine EMOTION HD
+ TVCine TOP HD
+ TVEi
+ TVI HD
+ TVI Reality HD
+ TVR Internacional
+ TV Zimbo
+ Unifé TV
+ Azores TV
+ V+TVI
+ W-Sport
+ ZAP Viva HD
\ No newline at end of file
diff --git a/sites/opto.sic.pt/opto.sic.pt.channels.xml b/sites/opto.sic.pt/opto.sic.pt.channels.xml
index 7eafe900..411d2bb4 100644
--- a/sites/opto.sic.pt/opto.sic.pt.channels.xml
+++ b/sites/opto.sic.pt/opto.sic.pt.channels.xml
@@ -2,6 +2,5 @@
SIC
SIC Alta Definição
- SIC Notícias
SIC Replay
diff --git a/sites/rtp.pt/rtp.pt.channels.xml b/sites/rtp.pt/rtp.pt.channels.xml
index ecfb8657..89672209 100644
--- a/sites/rtp.pt/rtp.pt.channels.xml
+++ b/sites/rtp.pt/rtp.pt.channels.xml
@@ -1,13 +1,13 @@
RTP1
- RTP Açores
- RTP Madeira
- RTP Internacional
- RTP África
- RTP Noticias
RTP2
- RTP Memória
- RTP Internacional Ásia
+ RTP Açores
+ RTP África
RTP Internacional América
+ RTP Internacional Ásia
+ RTP Internacional
+ RTP Madeira
+ RTP Memória
+ RTP Noticias
diff --git a/sites/rtp.pt/rtp.pt.config.js b/sites/rtp.pt/rtp.pt.config.js
index 99f23390..595ba419 100644
--- a/sites/rtp.pt/rtp.pt.config.js
+++ b/sites/rtp.pt/rtp.pt.config.js
@@ -2,6 +2,9 @@ const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
+const fs = require('fs')
+const path = require('path')
+const { EPGGrabber } = require('epg-grabber')
dayjs.extend(utc)
dayjs.extend(timezone)
@@ -15,7 +18,29 @@ const tz = {
module.exports = {
site: 'rtp.pt',
+ channels: async () => {
+ const channelsPath = path.resolve(__dirname, 'rtp.pt.channels.xml')
+
+ if (!fs.existsSync(channelsPath)) {
+ console.warn(`Channels file not found: ${channelsPath}. Returning empty list.`)
+ return []
+ }
+
+ const xml = fs.readFileSync(channelsPath, 'utf8')
+ const parsed = EPGGrabber.parseChannelsXML(xml)
+
+ return parsed.map(channel => ({
+ xmltv_id: channel.xmltv_id,
+ name: channel.name,
+ site_id: channel.site_id,
+ lang: channel.lang,
+ logo: channel.logo,
+ url: channel.url,
+ lcn: channel.lcn
+ }))
+ },
days: 2,
+
url({ channel, date }) {
let [region, channelCode] = channel.site_id.split('#')
return `https://www.rtp.pt/EPG/json/rtp-channels-page/list-grid/tv/${channelCode}/${date.format(
diff --git a/sites/sporttv.pt/sporttv.pt.channels.xml b/sites/sporttv.pt/sporttv.pt.channels.xml
index 7fffa2eb..b1bf7786 100644
--- a/sites/sporttv.pt/sporttv.pt.channels.xml
+++ b/sites/sporttv.pt/sporttv.pt.channels.xml
@@ -1,12 +1,12 @@
+ NBA TV
Sport TV 1
Sport TV 2
Sport TV 3
Sport TV 4
Sport TV 5
- Sport TV+
- NBA TV
Sport TV 6
Sport TV 7
+ Sport TV+
diff --git a/sites/sporttv.pt/sporttv.pt.config.js b/sites/sporttv.pt/sporttv.pt.config.js
index 201b98ed..4d182b90 100644
--- a/sites/sporttv.pt/sporttv.pt.config.js
+++ b/sites/sporttv.pt/sporttv.pt.config.js
@@ -1,9 +1,34 @@
const dayjs = require('dayjs')
const cheerio = require('cheerio')
+const fs = require('fs')
+const path = require('path')
+const { EPGGrabber } = require('epg-grabber')
module.exports = {
site: 'sporttv.pt',
+ channels: async () => {
+ const channelsPath = path.resolve(__dirname, 'sporttv.pt.channels.xml')
+
+ if (!fs.existsSync(channelsPath)) {
+ console.warn(`Channels file not found: ${channelsPath}. Returning empty list.`)
+ return []
+ }
+
+ const xml = fs.readFileSync(channelsPath, 'utf8')
+ const parsed = EPGGrabber.parseChannelsXML(xml)
+
+ return parsed.map(channel => ({
+ xmltv_id: channel.xmltv_id,
+ name: channel.name,
+ site_id: channel.site_id,
+ lang: channel.lang,
+ logo: channel.logo,
+ url: channel.url,
+ lcn: channel.lcn
+ }))
+ },
days: 2,
+
url: 'https://www.sporttv.pt/guia',
parser({ content, date, channel }) {
let programs = []
diff --git a/sites/vodafone.pt/vodafone.pt.channels.xml b/sites/vodafone.pt/vodafone.pt.channels.xml
index 092a70ba..98ea1794 100644
--- a/sites/vodafone.pt/vodafone.pt.channels.xml
+++ b/sites/vodafone.pt/vodafone.pt.channels.xml
@@ -1,149 +1,149 @@
- SIC
- TVI
- Eurosport 1
- STAR Movies
- SportTV1
- SportTV2
- SportTV3
- SportTV4
- SportTV5
- Fuel TV
- AXN Movies
- SyFy
- Fashion
- My Zen TV
- Canção Nova
- Galicia
- AXN
- STAR Channel
- STAR Life
- FightBox
- Trace Toca
- RTP Memória
- RTP África
- ARTV
- National Geographic
- TV5Monde
- CMusicTV
- BBC World News
- Euronews PT
- TVE
+ BenficaTV Multicam 1
+ BenficaTV Multicam 2
+ BenficaTV Multicam 3
+ BenficaTV Multicam 4
+ HGTV
24h
- CNBC
- TPA
- Pro TV International
- Bloomberg
- Mezzo
- Luxe.tv
- Nautical Channel
- Phoenix
- Porto Canal
- France 24 English
- France 24 Français
- Rai 1
- Rai News
- MCM Top
- DW
- AlJazeera
- Cubavisión
- Record News
- Canal 180
- RTP2
- AXN White
- E!
- Localvisão TV
24Kitchen
- Nat Geo Wild
- STAR Crime
- SkyNews
- BTV
- Record Europa
- M6
- RTL
- Super RTL
- Vox
- TCV News
- NHK World
- STAR Comedy
- KBS World
- Canal Q
- Fight Network
- Discovery Channel
- SIC Radical
- Fast & Fun Box
- MTV
- Kuriakos TV
- SportTV+
- Mezzo Live
- InSight TV
- DocuBox
- SIC Noticias
- SIC Mulher
- SIC Caras
- SIC K
- Travel Channel
- Food Network
- AMC
- Euronews
- Sporting TV
- Disney Channel
- Trace Urban
- Odisseia
+ A Bola TV
+ Afro Music
+ AlJazeera
AMC Break
+ AMC Crime
+ AMC
Arirang
- Globo
+ ARTV
+ AXN
+ AXN Movies
+ AXN White
+ BabyTV
+ BBC World News
+ BTV
+ Biggs
+ Bloomberg
+ Canal 11
+ Canal 180
Canal Hollywood
+ Canal Panda
+ Canal Q
+ CARTOONITO
+ Cartoon Network
+ Casa e Cozinha
CineMundo
- RTP1
CMTV
- Eurochannel PT
+ CNBC
+ CNN
+ CNN Portugal
+ Conta Lá
+ Cubavisión
DAZN 1
DAZN 2
DAZN 3
DAZN 4
DAZN 5
DAZN 6
- SportTV NBA
- Eurosport 2
- A Bola TV
- Canal 11
- Freedom
- CNN Portugal
- GameToon
- RTP Açores
- Casa e Cozinha
- Canal Panda
- RTP Noticias
- Panda Kids
- SportTV6
+ Discovery Channel
+ Disney Channel
Disney Jr.
- CARTOONITO
- Cartoon Network
+ DocuBox
+ DW
+ E!
+ Eurochannel PT
+ Euronews
+ Euronews PT
+ Eurosport 1
+ Eurosport 2
+ Fashion
+ Fast & Fun Box
+ FightBox
+ Fight Network
+ Food Network
+ France 24 English
+ France 24 Français
+ Freedom
+ Fuel TV
+ Galicia
+ GameToon
GINX ESports TV
- uniFÉ
- CNN
- TLC
- V+ TVI
- RTP Madeira
- AMC Crime
- Dizi
- BenficaTV Multicam 1
- BenficaTV Multicam 2
- BenficaTV Multicam 3
- BenficaTV Multicam 4
- Afro Music
- Biggs
- Nickelodeon
- MCM Pop
- News Now
- SIC Novelas
- SportTV7
- HGTV
- Investigation Discovery
- BabyTV
História
+ InSight TV
+ Investigation Discovery
+ KBS World
+ Kuriakos TV
+ Localvisão TV
+ Luxe.tv
+ M6
+ MCM Pop
+ MCM Top
+ Mezzo
+ Mezzo Live
+ MTV
+ My Zen TV
+ National Geographic
+ Nat Geo Wild
+ Nautical Channel
+ SportTV NBA
+ News Now
+ NHK World
+ Nickelodeon
+ Odisseia
+ Panda Kids
+ Phoenix
+ Porto Canal
+ Pro TV International
+ Rai 1
+ Rai News
+ Record News
+ Record Europa
+ Globo
+ RTL
+ Super RTL
+ RTP1
+ RTP2
+ RTP Açores
+ RTP África
+ RTP Madeira
+ RTP Memória
+ RTP Noticias
+ SIC
+ SIC Caras
+ SIC K
+ SIC Mulher
+ SIC Noticias
+ SIC Novelas
+ SIC Radical
+ SkyNews
+ Sporting TV
+ SportTV1
+ SportTV2
+ SportTV3
+ SportTV4
+ SportTV5
+ SportTV6
+ SportTV7
+ SportTV+
+ STAR Channel
+ STAR Comedy
+ STAR Crime
+ STAR Life
+ STAR Movies
+ CMusicTV
+ SyFy
+ TCV News
+ Dizi
+ TLC
+ TPA
+ Trace Toca
+ Trace Urban
+ Travel Channel
+ TV5Monde
+ Canção Nova
+ TVE
+ TVI
+ uniFÉ
+ Vox
+ V+ TVI
W-Sport
- Conta Lá
diff --git a/sites/vodafone.pt/vodafone.pt.config.js b/sites/vodafone.pt/vodafone.pt.config.js
index e4071e7e..73a5cf38 100644
--- a/sites/vodafone.pt/vodafone.pt.config.js
+++ b/sites/vodafone.pt/vodafone.pt.config.js
@@ -1,5 +1,8 @@
const { DateTime } = require('luxon')
const axios = require('axios')
+const fs = require('fs')
+const path = require('path')
+const { EPGGrabber } = require('epg-grabber')
const API_ENDPOINT = 'https://cdn.pt.vtv.vodafone.com/epg'
@@ -13,6 +16,27 @@ const headers = {
module.exports = {
site: 'vodafone.pt',
+ channels: async () => {
+ const channelsPath = path.resolve(__dirname, 'vodafone.pt.channels.xml')
+
+ if (!fs.existsSync(channelsPath)) {
+ console.warn(`Channels file not found: ${channelsPath}. Returning empty list.`)
+ return []
+ }
+
+ const xml = fs.readFileSync(channelsPath, 'utf8')
+ const parsed = EPGGrabber.parseChannelsXML(xml)
+
+ return parsed.map(channel => ({
+ xmltv_id: channel.xmltv_id,
+ name: channel.name,
+ site_id: channel.site_id,
+ lang: channel.lang,
+ logo: channel.logo,
+ url: channel.url,
+ lcn: channel.lcn
+ }))
+ },
days: 2,
request: {
headers
From 72269b8c848361f29262306038b52cb155289c35 Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Sun, 15 Mar 2026 13:08:18 +0000
Subject: [PATCH 2/8] fix errors
---
sites/meo.pt/meo.pt.channels.xml | 2 +-
sites/nostv.pt/nostv.pt.channels.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml
index f6cf9e7c..b7758fe7 100644
--- a/sites/meo.pt/meo.pt.channels.xml
+++ b/sites/meo.pt/meo.pt.channels.xml
@@ -1,4 +1,4 @@
-
+
18
Caça e Pesca
diff --git a/sites/nostv.pt/nostv.pt.channels.xml b/sites/nostv.pt/nostv.pt.channels.xml
index 51083818..fdeaee73 100644
--- a/sites/nostv.pt/nostv.pt.channels.xml
+++ b/sites/nostv.pt/nostv.pt.channels.xml
@@ -1,4 +1,4 @@
-
+
Horse TV
BNT World
From 4b02dbd73141fcefd326afed7e602aa5b0d7b96b Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Sun, 15 Mar 2026 17:02:44 +0000
Subject: [PATCH 3/8] fix meo's image url
---
sites/meo.pt/meo.pt.config.js | 2 +-
sites/meo.pt/meo.pt.test.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js
index 82d5f1cf..2568b0b9 100644
--- a/sites/meo.pt/meo.pt.config.js
+++ b/sites/meo.pt/meo.pt.config.js
@@ -47,7 +47,7 @@ module.exports = {
// Construct image URL using the same logic as before if possible
if (item.Title && channel.site_id) {
const encodedTitle = encodeURIComponent(item.Title)
- const image = `https://proxycache.online.meo.pt/eemstb/ImageHandler.ashx?evTitle=${encodedTitle}&chCallLetter=${channel.site_id}&profile=16_9&width=600`
+ const image = `https://cdn-er-images.online.meo.pt/eemstb/ImageHandler.ashx?chCallLetter=${channel.site_id}&progTitle=${encodedTitle}&profile=16_9&profileFallback=false&noFallback=true&appSource=PC_CHROME_PWA&width=600&csf`
prog.icon = { src: image }
prog.image = image
}
diff --git a/sites/meo.pt/meo.pt.test.js b/sites/meo.pt/meo.pt.test.js
index 26b5ce0f..57b36c59 100644
--- a/sites/meo.pt/meo.pt.test.js
+++ b/sites/meo.pt/meo.pt.test.js
@@ -52,7 +52,7 @@ it('can parse response', async () => {
title: 'Barman - Ep. 4',
description: "'Barman' é uma série de comédia dramática sobre um jovem comediante que começa a trabalhar como Barman porque precisa de arranjar dinheiro depressa, pelo caminho é obrigado a lidar com a vida noturna e conciliar duas realidades diferentes.",
icon: {
- src: 'https://proxycache.online.meo.pt/eemstb/ImageHandler.ashx?evTitle=Barman%20-%20Ep.%204&chCallLetter=RTPM&profile=16_9&width=600'
+ src: 'https://cdn-er-images.online.meo.pt/eemstb/ImageHandler.ashx?chCallLetter=RTPM&progTitle=Barman%20-%20Ep.%204&profile=16_9&profileFallback=false&noFallback=true&appSource=PC_CHROME_PWA&width=1920&csf'
}
})
})
From 35d47aef32b59d711ef8bc425695b9aa8a328cd6 Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Wed, 18 Mar 2026 15:38:29 +0000
Subject: [PATCH 4/8] Fix image width
---
sites/meo.pt/meo.pt.config.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js
index 2568b0b9..3695b22a 100644
--- a/sites/meo.pt/meo.pt.config.js
+++ b/sites/meo.pt/meo.pt.config.js
@@ -47,7 +47,7 @@ module.exports = {
// Construct image URL using the same logic as before if possible
if (item.Title && channel.site_id) {
const encodedTitle = encodeURIComponent(item.Title)
- const image = `https://cdn-er-images.online.meo.pt/eemstb/ImageHandler.ashx?chCallLetter=${channel.site_id}&progTitle=${encodedTitle}&profile=16_9&profileFallback=false&noFallback=true&appSource=PC_CHROME_PWA&width=600&csf`
+ const image = `https://cdn-er-images.online.meo.pt/eemstb/ImageHandler.ashx?chCallLetter=${channel.site_id}&progTitle=${encodedTitle}&profile=16_9&profileFallback=false&noFallback=true&appSource=PC_CHROME_PWA&width=1920&csf`
prog.icon = { src: image }
prog.image = image
}
From f5136cce4fd2f3f35aee7873adf688312fa37bcf Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Wed, 18 Mar 2026 15:45:20 +0000
Subject: [PATCH 5/8] Fix names and feeds
---
sites/meo.pt/meo.pt.channels.xml | 2 +-
sites/nostv.pt/nostv.pt.channels.xml | 4 ++--
sites/vodafone.pt/vodafone.pt.channels.xml | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml
index b7758fe7..4ef7f464 100644
--- a/sites/meo.pt/meo.pt.channels.xml
+++ b/sites/meo.pt/meo.pt.channels.xml
@@ -87,7 +87,7 @@
France 2
France 24 (I)
France 24 (F)
- France 3
+ France 3
France 4
France 5
France Info
diff --git a/sites/nostv.pt/nostv.pt.channels.xml b/sites/nostv.pt/nostv.pt.channels.xml
index fdeaee73..e6393521 100644
--- a/sites/nostv.pt/nostv.pt.channels.xml
+++ b/sites/nostv.pt/nostv.pt.channels.xml
@@ -66,7 +66,7 @@
Food Network HD
France 24 (I)
France 24 (F)
- Fuel TV HD
+ Fuel TV HD
TV Galicia
Globo HD
Globo News
@@ -107,7 +107,7 @@
RTP Madeira
RTP Memória
RTP Notícias HD
- RTR Planeta
+ RTR Planeta
SIC HD
SIC Caras HD
SIC K HD
diff --git a/sites/vodafone.pt/vodafone.pt.channels.xml b/sites/vodafone.pt/vodafone.pt.channels.xml
index 98ea1794..23c31cc1 100644
--- a/sites/vodafone.pt/vodafone.pt.channels.xml
+++ b/sites/vodafone.pt/vodafone.pt.channels.xml
@@ -63,7 +63,7 @@
France 24 English
France 24 Français
Freedom
- Fuel TV
+ Fuel TV
Galicia
GameToon
GINX ESports TV
From 23d44dcb145df74202d4e16d6a9fd049e47a2ac4 Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Sun, 22 Mar 2026 10:43:32 +0000
Subject: [PATCH 6/8] fix error in adding the epg-grabber module
---
sites/rtp.pt/rtp.pt.config.js | 13 +++++++++++--
sites/sporttv.pt/sporttv.pt.config.js | 13 +++++++++++--
sites/vodafone.pt/vodafone.pt.config.js | 13 +++++++++++--
3 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/sites/rtp.pt/rtp.pt.config.js b/sites/rtp.pt/rtp.pt.config.js
index 595ba419..17001b00 100644
--- a/sites/rtp.pt/rtp.pt.config.js
+++ b/sites/rtp.pt/rtp.pt.config.js
@@ -4,7 +4,15 @@ const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const fs = require('fs')
const path = require('path')
-const { EPGGrabber } = require('epg-grabber')
+
+let EPGGrabber
+
+async function getEPGGrabber() {
+ if (!EPGGrabber) {
+ EPGGrabber = (await import('epg-grabber')).EPGGrabber
+ }
+ return EPGGrabber
+}
dayjs.extend(utc)
dayjs.extend(timezone)
@@ -26,8 +34,9 @@ module.exports = {
return []
}
+ const grabber = await getEPGGrabber()
const xml = fs.readFileSync(channelsPath, 'utf8')
- const parsed = EPGGrabber.parseChannelsXML(xml)
+ const parsed = grabber.parseChannelsXML(xml)
return parsed.map(channel => ({
xmltv_id: channel.xmltv_id,
diff --git a/sites/sporttv.pt/sporttv.pt.config.js b/sites/sporttv.pt/sporttv.pt.config.js
index 4d182b90..7e1d7480 100644
--- a/sites/sporttv.pt/sporttv.pt.config.js
+++ b/sites/sporttv.pt/sporttv.pt.config.js
@@ -2,7 +2,15 @@ const dayjs = require('dayjs')
const cheerio = require('cheerio')
const fs = require('fs')
const path = require('path')
-const { EPGGrabber } = require('epg-grabber')
+
+let EPGGrabber
+
+async function getEPGGrabber() {
+ if (!EPGGrabber) {
+ EPGGrabber = (await import('epg-grabber')).EPGGrabber
+ }
+ return EPGGrabber
+}
module.exports = {
site: 'sporttv.pt',
@@ -15,7 +23,8 @@ module.exports = {
}
const xml = fs.readFileSync(channelsPath, 'utf8')
- const parsed = EPGGrabber.parseChannelsXML(xml)
+ const grabber = await getEPGGrabber()
+ const parsed = grabber.parseChannelsXML(xml)
return parsed.map(channel => ({
xmltv_id: channel.xmltv_id,
diff --git a/sites/vodafone.pt/vodafone.pt.config.js b/sites/vodafone.pt/vodafone.pt.config.js
index 73a5cf38..ab1ea3ca 100644
--- a/sites/vodafone.pt/vodafone.pt.config.js
+++ b/sites/vodafone.pt/vodafone.pt.config.js
@@ -2,7 +2,15 @@ const { DateTime } = require('luxon')
const axios = require('axios')
const fs = require('fs')
const path = require('path')
-const { EPGGrabber } = require('epg-grabber')
+
+let EPGGrabber
+
+async function getEPGGrabber() {
+ if (!EPGGrabber) {
+ EPGGrabber = (await import('epg-grabber')).EPGGrabber
+ }
+ return EPGGrabber
+}
const API_ENDPOINT = 'https://cdn.pt.vtv.vodafone.com/epg'
@@ -25,7 +33,8 @@ module.exports = {
}
const xml = fs.readFileSync(channelsPath, 'utf8')
- const parsed = EPGGrabber.parseChannelsXML(xml)
+ const grabber = await getEPGGrabber()
+ const parsed = grabber.parseChannelsXML(xml)
return parsed.map(channel => ({
xmltv_id: channel.xmltv_id,
From 1cf608ae4b590641b75c3b987f3cded59602a7df Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Sun, 22 Mar 2026 10:45:49 +0000
Subject: [PATCH 7/8] fix feeds
---
sites/nostv.pt/nostv.pt.channels.xml | 2 +-
sites/vodafone.pt/vodafone.pt.channels.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sites/nostv.pt/nostv.pt.channels.xml b/sites/nostv.pt/nostv.pt.channels.xml
index e6393521..db2eb729 100644
--- a/sites/nostv.pt/nostv.pt.channels.xml
+++ b/sites/nostv.pt/nostv.pt.channels.xml
@@ -66,7 +66,7 @@
Food Network HD
France 24 (I)
France 24 (F)
- Fuel TV HD
+ Fuel TV HD
TV Galicia
Globo HD
Globo News
diff --git a/sites/vodafone.pt/vodafone.pt.channels.xml b/sites/vodafone.pt/vodafone.pt.channels.xml
index 23c31cc1..8054f91e 100644
--- a/sites/vodafone.pt/vodafone.pt.channels.xml
+++ b/sites/vodafone.pt/vodafone.pt.channels.xml
@@ -63,7 +63,7 @@
France 24 English
France 24 Français
Freedom
- Fuel TV
+ Fuel TV
Galicia
GameToon
GINX ESports TV
From c3295250357b9664419d3fe3d59425375f20e6ee Mon Sep 17 00:00:00 2001
From: thomraider12 <168651587+thomraider12@users.noreply.github.com>
Date: Sun, 22 Mar 2026 14:02:43 +0000
Subject: [PATCH 8/8] Fixes
---
sites/rtp.pt/rtp.pt.config.js | 33 -------------------------
sites/sporttv.pt/sporttv.pt.config.js | 33 -------------------------
sites/vodafone.pt/vodafone.pt.config.js | 33 -------------------------
3 files changed, 99 deletions(-)
diff --git a/sites/rtp.pt/rtp.pt.config.js b/sites/rtp.pt/rtp.pt.config.js
index 17001b00..44584544 100644
--- a/sites/rtp.pt/rtp.pt.config.js
+++ b/sites/rtp.pt/rtp.pt.config.js
@@ -2,17 +2,6 @@ const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
-const fs = require('fs')
-const path = require('path')
-
-let EPGGrabber
-
-async function getEPGGrabber() {
- if (!EPGGrabber) {
- EPGGrabber = (await import('epg-grabber')).EPGGrabber
- }
- return EPGGrabber
-}
dayjs.extend(utc)
dayjs.extend(timezone)
@@ -26,28 +15,6 @@ const tz = {
module.exports = {
site: 'rtp.pt',
- channels: async () => {
- const channelsPath = path.resolve(__dirname, 'rtp.pt.channels.xml')
-
- if (!fs.existsSync(channelsPath)) {
- console.warn(`Channels file not found: ${channelsPath}. Returning empty list.`)
- return []
- }
-
- const grabber = await getEPGGrabber()
- const xml = fs.readFileSync(channelsPath, 'utf8')
- const parsed = grabber.parseChannelsXML(xml)
-
- return parsed.map(channel => ({
- xmltv_id: channel.xmltv_id,
- name: channel.name,
- site_id: channel.site_id,
- lang: channel.lang,
- logo: channel.logo,
- url: channel.url,
- lcn: channel.lcn
- }))
- },
days: 2,
url({ channel, date }) {
diff --git a/sites/sporttv.pt/sporttv.pt.config.js b/sites/sporttv.pt/sporttv.pt.config.js
index 7e1d7480..267ba025 100644
--- a/sites/sporttv.pt/sporttv.pt.config.js
+++ b/sites/sporttv.pt/sporttv.pt.config.js
@@ -1,41 +1,8 @@
const dayjs = require('dayjs')
const cheerio = require('cheerio')
-const fs = require('fs')
-const path = require('path')
-
-let EPGGrabber
-
-async function getEPGGrabber() {
- if (!EPGGrabber) {
- EPGGrabber = (await import('epg-grabber')).EPGGrabber
- }
- return EPGGrabber
-}
module.exports = {
site: 'sporttv.pt',
- channels: async () => {
- const channelsPath = path.resolve(__dirname, 'sporttv.pt.channels.xml')
-
- if (!fs.existsSync(channelsPath)) {
- console.warn(`Channels file not found: ${channelsPath}. Returning empty list.`)
- return []
- }
-
- const xml = fs.readFileSync(channelsPath, 'utf8')
- const grabber = await getEPGGrabber()
- const parsed = grabber.parseChannelsXML(xml)
-
- return parsed.map(channel => ({
- xmltv_id: channel.xmltv_id,
- name: channel.name,
- site_id: channel.site_id,
- lang: channel.lang,
- logo: channel.logo,
- url: channel.url,
- lcn: channel.lcn
- }))
- },
days: 2,
url: 'https://www.sporttv.pt/guia',
diff --git a/sites/vodafone.pt/vodafone.pt.config.js b/sites/vodafone.pt/vodafone.pt.config.js
index ab1ea3ca..e4071e7e 100644
--- a/sites/vodafone.pt/vodafone.pt.config.js
+++ b/sites/vodafone.pt/vodafone.pt.config.js
@@ -1,16 +1,5 @@
const { DateTime } = require('luxon')
const axios = require('axios')
-const fs = require('fs')
-const path = require('path')
-
-let EPGGrabber
-
-async function getEPGGrabber() {
- if (!EPGGrabber) {
- EPGGrabber = (await import('epg-grabber')).EPGGrabber
- }
- return EPGGrabber
-}
const API_ENDPOINT = 'https://cdn.pt.vtv.vodafone.com/epg'
@@ -24,28 +13,6 @@ const headers = {
module.exports = {
site: 'vodafone.pt',
- channels: async () => {
- const channelsPath = path.resolve(__dirname, 'vodafone.pt.channels.xml')
-
- if (!fs.existsSync(channelsPath)) {
- console.warn(`Channels file not found: ${channelsPath}. Returning empty list.`)
- return []
- }
-
- const xml = fs.readFileSync(channelsPath, 'utf8')
- const grabber = await getEPGGrabber()
- const parsed = grabber.parseChannelsXML(xml)
-
- return parsed.map(channel => ({
- xmltv_id: channel.xmltv_id,
- name: channel.name,
- site_id: channel.site_id,
- lang: channel.lang,
- logo: channel.logo,
- url: channel.url,
- lcn: channel.lcn
- }))
- },
days: 2,
request: {
headers