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