diff --git a/SITES.md b/SITES.md
index 65b6bec3b..ae1aa5d7e 100644
--- a/SITES.md
+++ b/SITES.md
@@ -22,11 +22,11 @@
| beinsports.com | 130 | 81 | 🟢 | |
| berrymedia.co.kr | 5 | 5 | 🟢 | |
| cableplus.com.uy | 171 | 44 | 🟢 | |
- | canalplus.com | 13118 | 179 | 🟢 | |
+ | canalplus.com | 13118 | 179 | 🟢 | https://github.com/iptv-org/epg/issues/3002 |
| cgates.lt | 47 | 29 | 🟢 | |
| chada.ma | 1 | 1 | 🟢 | |
| chaines-tv.orange.fr | 373 | 328 | 🟢 | |
- | claro.com.br | 273 | 0 | 🟢 | |
+ | claro.com.br | 273 | 0 | 🟢 | https://github.com/iptv-org/epg/issues/2988 |
| clarotvmais.com.br | 158 | 0 | 🟢 | |
| clickthecity.com | 32 | 30 | 🟢 | |
| content.astro.com.my | 149 | 93 | 🟢 | |
@@ -38,7 +38,7 @@
| derana.lk | 1 | 1 | 🟢 | |
| digea.gr | 88 | 0 | 🟢 | |
| digiturk.com.tr | 112 | 91 | 🟢 | |
- | directv.com | 1043 | 640 | 🔴 | https://github.com/iptv-org/epg/issues/2284 |
+ | directv.com | 1043 | 640 | 🔴 | https://github.com/iptv-org/epg/issues/3001, https://github.com/iptv-org/epg/issues/2284 |
| directv.com.ar | 371 | 0 | 🔴 | https://github.com/iptv-org/epg/issues/2339 |
| directv.com.uy | 374 | 59 | 🟢 | |
| dishtv.in | 434 | 326 | 🟢 | |
@@ -59,7 +59,7 @@
| foxsports.com.au | 7 | 7 | 🟢 | |
| foxtel.com.au | 99 | 60 | 🟢 | |
| freetv.tv | 7 | 7 | 🟢 | |
- | freeview.co.uk | 167 | 98 | 🟢 | |
+ | freeview.co.uk | 166 | 104 | 🟢 | |
| frikanalen.no | 1 | 1 | 🟢 | |
| galamtv.kz | 27 | 22 | 🟢 | |
| gatotv.com | 475 | 360 | 🟢 | |
@@ -91,7 +91,7 @@
| mediaklikk.hu | 8 | 8 | 🟢 | |
| mediasetinfinity.mediaset.it | 13 | 13 | 🟢 | |
| melita.com | 127 | 110 | 🟢 | |
- | meo.pt | 217 | 189 | 🟢 | |
+ | meo.pt | 211 | 185 | 🟢 | |
| meuguia.tv | 102 | 96 | 🟢 | |
| mewatch.sg | 25 | 24 | 🟢 | |
| mi.tv | 2084 | 614 | 🟢 | |
@@ -110,7 +110,7 @@
| neo.io | 337 | 230 | 🟢 | |
| nhkworldpremium.com | 2 | 2 | 🟢 | |
| nhl.com | 1 | 1 | 🟢 | |
- | nostv.pt | 169 | 152 | 🟢 | |
+ | nostv.pt | 167 | 151 | 🟢 | |
| novacyprus.com | 29 | 24 | 🟢 | |
| novasports.gr | 16 | 16 | 🟢 | |
| nowplayer.now.com | 288 | 227 | 🟢 | |
@@ -146,7 +146,7 @@
| ruv.is | 2 | 2 | 🟢 | |
| s.mxtv.jp | 2 | 2 | 🟢 | |
| sat.tv | 30308 | 249 | 🟢 | |
- | shahid.mbc.net | 206 | 167 | 🟢 | |
+ | shahid.mbc.net | 207 | 168 | 🟢 | |
| siba.com.co | 98 | 95 | 🟢 | |
| singtel.com | 155 | 113 | 🟢 | |
| sjonvarp.is | 13 | 13 | 🟢 | |
@@ -188,11 +188,11 @@
| tv.movistar.com.pe | 282 | 39 | 🟢 | |
| tv.nu | 199 | 180 | 🟢 | |
| tv.post.lu | 332 | 241 | 🟢 | |
- | tv.sfr.fr | 489 | 438 | 🟢 | |
+ | tv.sfr.fr | 489 | 438 | 🟢 | https://github.com/iptv-org/epg/issues/2998 |
| tv.trueid.net | 246 | 35 | 🟢 | |
| tv.yandex.ru | 97 | 66 | 🔴 | https://github.com/iptv-org/epg/issues/2803 |
| tv24.co.uk | 1072 | 38 | 🟢 | |
- | tv24.se | 326 | 157 | 🟢 | |
+ | tv24.se | 326 | 157 | 🟢 | https://github.com/iptv-org/epg/issues/2993 |
| tv2go.t-2.net | 342 | 232 | 🟢 | |
| tvarenasport.com | 18 | 18 | 🟢 | |
| tvarenasport.hr | 10 | 10 | 🟢 | |
@@ -212,16 +212,17 @@
| tvmusor.hu | 99 | 66 | 🟢 | |
| tvmustra.hu | 189 | 0 | 🟢 | |
| tvpassport.com | 19287 | 2496 | 🟢 | |
- | tvplus.com.tr | 150 | 144 | 🟢 | |
+ | tvplus.com.tr | 150 | 144 | 🟢 | https://github.com/iptv-org/epg/issues/2983 |
| tvprofil.com | 9091 | 408 | 🟢 | |
| tvtv.us | 2299 | 2230 | 🟢 | |
| v3.myafn.dodmedia.osd.mil | 8 | 8 | 🟢 | |
+ | vantagetv.ee | 3 | 1 | 🟢 | |
| vidio.com | 57 | 52 | 🟢 | |
| virginmediatelevision.ie | 5 | 5 | 🟢 | |
| virgintvgo.virginmedia.com | 238 | 181 | 🟢 | |
| visionplus.id | 250 | 224 | 🟢 | |
| vivoplay.com.br | 397 | 0 | 🟢 | |
- | vodafone.pt | 147 | 135 | 🟢 | |
+ | vodafone.pt | 146 | 135 | 🟢 | |
| vtm.be | 7 | 6 | 🟢 | |
| walesi.com.fj | 9 | 8 | 🟢 | |
| watch.sportsnet.ca | 8 | 8 | 🟢 | |
@@ -229,7 +230,7 @@
| wavve.com | 77 | 76 | 🟢 | |
| web.magentatv.de | 348 | 226 | 🟢 | https://github.com/iptv-org/epg/issues/2966 |
| webtv.delta.nl | 247 | 204 | 🟢 | |
- | winplay.co | 2 | 2 | 🟢 | |
+ | winplay.co | 2 | 2 | 🟢 | https://github.com/iptv-org/epg/issues/3003 |
| worldfishingnetwork.com | 1 | 1 | 🟢 | |
| www3.nhk.or.jp | 1 | 1 | 🟢 | |
| xem.kplus.vn | 77 | 0 | 🟢 | |
@@ -237,7 +238,7 @@
| yes.co.il | 174 | 0 | 🟢 | |
| zap.co.ao | 114 | 63 | 🟢 | |
| zap2it.com | 595 | 0 | 🟢 | |
- | ziggogo.tv | 156 | 150 | 🟢 | |
+ | ziggogo.tv | 156 | 150 | 🟢 | https://github.com/iptv-org/epg/issues/2977, https://github.com/iptv-org/epg/issues/2976 |
| znbc.co.zm | 4 | 4 | 🟢 | |
| zuragt.mn | 34 | 27 | 🟢 | |
diff --git a/sites/freeview.co.uk/freeview.co.uk.channels.xml b/sites/freeview.co.uk/freeview.co.uk.channels.xml
index 10e9fec90..eee24034c 100644
--- a/sites/freeview.co.uk/freeview.co.uk.channels.xml
+++ b/sites/freeview.co.uk/freeview.co.uk.channels.xml
@@ -1,14 +1,6 @@
- BBC ONE Lon
- BBC TWO
- BBC THREE
- BBC NEWS
BBC Red Button
- BBC FOUR
- CBBC
- CBeebies
- BBC Parliament
BBC R5L
BBC 5SX
BBC 6 Music
@@ -25,146 +17,153 @@
BBC Radio 2
BBC Radio 3
BBC Radio 4
- BBC RB 1
- ITV1
- ITV3
- ITV2
- ITV4
- ITV Quiz
- ITV1+1
- Channel 4
- Film4
- More 4
- E4
- Channel 4+1
- E4+1
- 4seven
- 5
That's TV 3
- 5STAR
- YAAAS!
- 5USA
- U&DaveJaVu
- 5 +1
- QVC
- MBC
- Blaze
- Blaze+1
- QVC2
- TRUE CRIME
- TRUE CRIME XTRA
- WildEarth
- LEGEND
Sonlife
On Demand 365
Channelbox
- UK RADIO PORTAL
- Great! Action
- Great! Movies
- TJC
That's Oldies
- ITV4+1
- ITV2+1
- ITV3+1
- 5ACTION
CNA Originals
GIGS
EuroNews
Trailblazer
Odyssey TV
- Ketchup TV
- U&Drama
Ketchup Too
ROK
- Revelation TV
- God TV
- Nolly Africa
- Alaraby Network
- POP Max
- Al Jazeera English
- Tiny Pop
- Al Jazeera Arabic
Global Arabic +
- NHK WORLD
- Newsmax
Amazing Facts
New Media TV
- Together TV
- FRANCE 24
Nosey
Shop On TV
Purpose Media
- Talk
- BBC TWO HD
- BBC ONE Lon HD
- ITV1 HD
- Channel 4 HD
- 5 HD
- BBC THREE HD
- BBC FOUR HD
- CBBC HD
- CBeebies HD
- U&Eden
LEGEND XTRA
- TBN UK
- 5SELECT
- Sky News
- Sky Arts
- Sky Mix
- Challenge
- U&Dave
- U&Drama+1
- E4 Extra
- Film4+1
- talkSPORT
RNIB Connect
Heart
Capital
Classic FM
LBC
- Food Network
That's TV 2
SonLife
Must Have Ideas
- Really
- Quest Red
- QUEST+1
- Gems TV
- U&Yesterday
- Ideal World
+ That's 80s
Smooth Radio
- Great! TV
- Jewellery Maker
Hobbycraft TV
- Great! Christmas
- QUEST
- GB News
- Together TV+1
- POP UP
- DMAX
Rewind TV
- POP
Together TV IP
- HobbyMaker
- Great! Mystery
- That's TV (UK)
- PBS America
- HGTV
That's Melody
- U&W
Premier Radio
- TalkingPictures TV
Great! Player
- GREAT! romance mix
- London TV
- 3ABN
+ Great! Romance Mix
India Today
- TRACE UK
- Pop Player
+ MBC Group
wedotv movies
It Is Written TV
OUTflix Proud
High Street TV
+ Cartoon Classics
+ wedotv Movies UK
+ Nolly Africa
+ 4seven
+ 5ACTION
+ 5SELECT
+ 5STAR
+ 5USA
AL ARABIYA
+ Alaraby Network
+ Al Jazeera Arabic
+ Al Jazeera English
ASHARQ NEWS
+ BBC FOUR HD
+ BBC FOUR
+ BBC NEWS
+ BBC ONE Lon
+ BBC ONE Lon HD
+ BBC Parliament
+ BBC RB 1
+ BBC THREE HD
+ BBC THREE
+ BBC TWO
+ BBC TWO HD
+ Blaze+1
+ Blaze
+ CBBC HD
+ CBBC
+ CBeebies HD
+ CBeebies
+ Challenge
+ Channel 4 HD
+ Channel 4+1
+ Channel 4
+ 5 HD
+ 5 +1
+ 5
+ DMAX
+ E4+1
+ E4
+ E4 Extra
+ Film4+1
+ Film4
+ Food Network
+ FRANCE 24
+ GB News
+ Gemporia
+ God TV
+ Great! Action
+ Great! Mystery
+ Great! Movies
+ Great! Romance
+ Great! TV
+ HGTV
+ HobbyMaker
+ Ideal World
+ ITV1 HD
+ ITV1
+ ITV1+1
+ ITV2+1
+ ITV2
+ ITV3+1
+ ITV3
+ ITV4+1
+ ITV4
+ ITV Quiz
+ Jewellery Maker
+ Ketchup TV
+ LEGEND
+ London TV
+ MBC
+ More 4
+ Newsmax
+ NHK WORLD
+ PBS America
+ POP
+ POP UP
+ QUEST+1
+ QUEST
+ Quest Red
+ QVC2
+ QVC
+ Really
+ Revelation TV
+ Sky Arts
+ Sky Mix
+ Sky News
+ TalkingPictures TV
+ talkSPORT
+ Talk
+ TBN UK
+ That's TV (UK)
+ Tiny Pop
+ TJC
+ Together TV+1
+ Together TV
+ TRUE CRIME
+ TRUE CRIME XTRA
+ U&Dave
+ U&DaveJaVu
+ U&Drama+1
+ U&Drama
+ U&Eden
+ U&W
+ U&Yesterday
+ WildEarth
+ YAAAS!
diff --git a/sites/meo.pt/__data__/content.json b/sites/meo.pt/__data__/content.json
index 66e68008a..7dd23d0f6 100644
--- a/sites/meo.pt/__data__/content.json
+++ b/sites/meo.pt/__data__/content.json
@@ -1 +1,26 @@
-{"d":{"__type":"Ptsi.Isites.GridTv.CanaisService.GridTV","ExtensionData":{},"services":[],"channels":[{"__type":"Ptsi.Isites.GridTv.CanaisService.Channels","ExtensionData":{},"id":100,"name":"RTP MEMÓRIA","sigla":"RTPM","friendlyUrlName":"RTP_Memoria","url":"https://meogo.meo.pt/direto?canalUrl=RTP_Memoria","meogo":true,"logo":"https://www.meo.pt/PublishingImages/canais/rtp-memoria.png","isAdult":false,"categories":[{"ExtensionData":{},"id":4,"name":"Entretenimento"}],"types":[{"ExtensionData":{},"id":0,"name":"Gravações Automáticas"},{"ExtensionData":{},"id":1,"name":"Restart TV"}],"programs":[{"ExtensionData":{},"date":"1-12-2022","timeIni":"23:35","timeEnd":"00:17","number":15992358,"uniqueId":"27621378","name":"Walker, O Ranger Do Texas T6 - Ep. 14","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"103787"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"00:17","timeEnd":"01:07","number":17690651,"uniqueId":"27621379","name":"O Barco Do Amor T7 - Ep. 21","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"117870"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"01:07","timeEnd":"01:57","number":17690652,"uniqueId":"27621380","name":"Um Anjo Na Terra T3 - Ep. 22","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"117869"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"01:57","timeEnd":"02:39","number":15992358,"uniqueId":"27621381","name":"Walker, O Ranger Do Texas T6 - Ep. 14","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"103787"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"02:39","timeEnd":"03:42","number":17690659,"uniqueId":"27621382","name":"5 Para A Meia-Noite T7 - Ep. 29","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"118268"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"03:42","timeEnd":"04:33","number":13223378,"uniqueId":"27621383","name":"O Conde D´Abranhos - Ep. 9","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"1367"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"04:33","timeEnd":"05:02","number":17690660,"uniqueId":"27621384","name":"Quebra-Cabeças T4 - Ep. 60","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"91370"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"05:02","timeEnd":"05:19","number":17690661,"uniqueId":"27621385","name":"As Aventuras De Eva - Ep. 9","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"118559"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"05:19","timeEnd":"06:02","number":13338966,"uniqueId":"27621386","name":"Bem-Vindos A Beirais T4 - Ep. 36","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"80897"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"06:02","timeEnd":"06:29","number":12414718,"uniqueId":"27621387","name":"Horizontes Da Memória T6 - Ep. 19","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"74413"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"06:29","timeEnd":"06:56","number":13492284,"uniqueId":"27621388","name":"SMS - Ser Mais Sabedor T1 - Ep. 49","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"81681"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"06:56","timeEnd":"07:00","number":17733452,"uniqueId":"27621389","name":"A Música Portuguesa A Gostar Dela Própria T1 - Ep. 103","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"87775"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"07:00","timeEnd":"07:45","number":13290499,"uniqueId":"27564192","name":"Vila Faia - Ep. 47","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"47671"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"07:45","timeEnd":"08:15","number":17690662,"uniqueId":"27564176","name":"Palavras Cruzadas - Ep. 16","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"71429"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"08:15","timeEnd":"09:00","number":12441944,"uniqueId":"27564188","name":"Portugueses Pelo Mundo T5 - Ep. 24","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"72818"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"09:00","timeEnd":"09:50","number":12663593,"uniqueId":"27564181","name":"Gente Fina É Outra Coisa - Ep. 9","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"76694"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"09:50","timeEnd":"10:35","number":17690663,"uniqueId":"27636531","name":"Só Visto! T1 - Ep. 24","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"116128"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"10:35","timeEnd":"11:00","number":17690670,"uniqueId":"27636532","name":"A Essência","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"961481536"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"11:00","timeEnd":"11:43","number":17690671,"uniqueId":"27636533","name":"Patrulha Da Noite T2 - Ep. 9","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"118560"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"11:43","timeEnd":"12:35","number":17690664,"uniqueId":"27636534","name":"Terra Mãe - Ep. 93","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"71427"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"12:35","timeEnd":"13:00","number":17647748,"uniqueId":"27564194","name":"As Aventuras De Eva - Ep. 5","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"118559"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"13:00","timeEnd":"14:00","number":17690665,"uniqueId":"27564168","name":"Em Mouriscas Acontece","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":""},{"ExtensionData":{},"date":"2-12-2022","timeIni":"14:00","timeEnd":"14:51","number":13732638,"uniqueId":"27564162","name":"Donos Disto Tudo T2 - Ep. 15","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"85899"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"14:51","timeEnd":"15:00","number":17621219,"uniqueId":"27636535","name":"Fragmentos - Ep. 43","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"116736"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"15:00","timeEnd":"15:45","number":12723927,"uniqueId":"27564197","name":"Bem-Vindos A Beirais T3 - Ep. 124","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"71872"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"15:45","timeEnd":"16:00","number":17690673,"uniqueId":"27564159","name":"A Cidade Na Ponta Dos Dedos T2 - Ep. 43","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"116737"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"16:00","timeEnd":"17:00","number":12852209,"uniqueId":"27564209","name":"As Grandes Batalhas De Portugal - Ep. 1","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"74660"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"17:00","timeEnd":"17:33","number":12939074,"uniqueId":"27573164","name":"Na Paz Dos Anjos - Ep. 137","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"72967"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"17:33","timeEnd":"18:18","number":17690666,"uniqueId":"27636536","name":"Filhos Do Vento - Ep. 138","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"47657"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"18:18","timeEnd":"18:43","number":10334871,"uniqueId":"27636537","name":"Telerural T3 - Ep. 6","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"51886"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"18:43","timeEnd":"19:40","number":8319968,"uniqueId":"27636538","name":"Herman Enciclopédia T2 - Ep. 5","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"39546"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"19:40","timeEnd":"20:09","number":17690667,"uniqueId":"27636539","name":"Sim, Chef! T2 - Ep. 1","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"119065"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"20:09","timeEnd":"21:00","number":12414714,"uniqueId":"27636540","name":"Mulheres De Abril - Ep. 5","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"74937"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"21:00","timeEnd":"21:45","number":12723927,"uniqueId":"27573170","name":"Bem-Vindos A Beirais T3 - Ep. 124","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"71872"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"21:45","timeEnd":"22:36","number":17690668,"uniqueId":"27636541","name":"O Barco Do Amor T7 - Ep. 22","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"117870"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"22:36","timeEnd":"23:25","number":17690669,"uniqueId":"27636542","name":"Um Anjo Na Terra T3 - Ep. 23","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"117869"},{"ExtensionData":{},"date":"2-12-2022","timeIni":"23:25","timeEnd":"00:08","number":16036114,"uniqueId":"27573173","name":"Walker, O Ranger Do Texas T6 - Ep. 15","synopse":null,"imageM":null,"imageL":null,"imageXL":null,"recordType":0,"recordingDefinitionID":"00000000-0000-0000-0000-000000000000","recordingProgramID":"00000000-0000-0000-0000-000000000000","seriesID":"103787"}],"moreInfo":{"ExtensionData":{},"Label":"","Link":""},"programacaoCanal":{"ExtensionData":{},"Label":"Programação","Link":"canal=RTPM"}}],"filters":{"ExtensionData":{},"types":[{"ExtensionData":{},"id":0,"name":"Gravações Automáticas"},{"ExtensionData":{},"id":1,"name":"Restart TV"}],"categories":[{"ExtensionData":{},"id":4,"name":"Entretenimento"}]}}}
\ No newline at end of file
+{
+ "Status": "OK",
+ "StatusCode": 200,
+ "Result": [
+ {
+ "CallLetter": "RTP1",
+ "EndDate": "2026-01-23T00:04:00",
+ "Id": 42314383,
+ "IsAdultContent": false,
+ "ProgramId": 22604754,
+ "StartDate": "2026-01-22T23:40:00",
+ "Synopsis": "'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.",
+ "Title": "Barman - Ep. 4"
+ },
+ {
+ "CallLetter": "RTP1",
+ "EndDate": "2026-01-23T00:30:00",
+ "Id": 42314384,
+ "IsAdultContent": false,
+ "ProgramId": 22604763,
+ "StartDate": "2026-01-23T00:04:00",
+ "Synopsis": "'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.",
+ "Title": "Barman - Ep. 5"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml
index 58d7164e8..1f6cc070b 100644
--- a/sites/meo.pt/meo.pt.channels.xml
+++ b/sites/meo.pt/meo.pt.channels.xml
@@ -48,7 +48,7 @@
CNN
CNN Portugal
Canção Nova
- Conta Lá
+ Conta Lá
Cubavision
DAZN 1
DAZN 2
@@ -66,7 +66,6 @@
DORCEL TV
Duck TV
DEUTSCHE WELLE
- E! Entertainment
English Club TV
Eurosport 1
Euronews
@@ -112,9 +111,6 @@
MCM Top
Mezzo Live
Mezzo
- MTV 00s
- MTV Live
- MTV Portugal
NBA TV
NEW Brasil
News Now
@@ -185,8 +181,6 @@
Telesur
TLC
TPA Notícias
- Trace Brasil
- Trace Toca
Trace Urban
Travelxp HD
Travelxp 4K HDR
@@ -217,4 +211,4 @@
ZDFNEO
ZEE CINEMA
ZEE TV
-
+
\ No newline at end of file
diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js
index e5c9f2b0f..82d5f1cf9 100644
--- a/sites/meo.pt/meo.pt.config.js
+++ b/sites/meo.pt/meo.pt.config.js
@@ -3,65 +3,55 @@ const { DateTime } = require('luxon')
module.exports = {
site: 'meo.pt',
days: 2,
- url: 'https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels',
+ url: function ({ channel, date }) {
+ return `https://meogouser.apps.meo.pt/Services/GridTv/GridTv.svc/GetLiveChannelProgramsByDate?callLetter=${channel.site_id}&date=${date.format('YYYY-MM-DD')}&userAgent=IPTV_OFR_GTV`
+ },
request: {
- method: 'POST',
+ method: 'GET',
headers: {
- Origin: 'https://www.meo.pt',
- 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; en-US Trident/4.0)'
- },
- data: function ({ channel, date }) {
- return {
- service: 'channelsguide',
- channels: [channel.site_id],
- dateStart: date.format('YYYY-MM-DDT00:00:00-00:00'),
- dateEnd: date.add(1, 'd').format('YYYY-MM-DDT00:00:00-00:00'),
- accountID: ''
- }
+ 'accept': '*/*',
+ 'accept-language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,pt;q=0.6,cs;q=0.5',
+ 'cache-control': 'no-cache',
+ 'origin': 'https://www.meo.pt',
+ 'pragma': 'no-cache',
+ 'priority': 'u=1, i',
+ 'referer': 'https://www.meo.pt/',
+ 'sec-ch-ua': '"Not(A:Brand";v="8", "Chromium";v="144", "Google Chrome";v="144"',
+ 'sec-ch-ua-mobile': '?1',
+ 'sec-ch-ua-platform': '"Android"',
+ 'sec-fetch-dest': 'empty',
+ 'sec-fetch-mode': 'cors',
+ 'sec-fetch-site': 'same-site',
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36'
}
},
- async parser({ content }) {
- const axios = require('axios')
+ async parser({ content, channel }) {
let programs = []
const items = parseItems(content)
if (!items.length) return programs
- // simple per-run in-memory cache
- const detailsCache = new Map()
-
for (const item of items) {
- const start = parseStart(item)
- let stop = parseStop(item)
- if (stop < start) {
- stop = stop.plus({ days: 1 })
- }
-
- let description = ''
- let image = ''
-
- const programID = item.uniqueId || null
- if (programID) {
- let details = detailsCache.get(programID)
- if (!details) {
- details = await fetchProgramDetails(programID, axios).catch(() => null)
- if (details) detailsCache.set(programID, details)
- }
- if (details) {
- description = details.description || description
- image = details.image || image
- }
- }
+ const start = DateTime.fromISO(item.StartDate, { zone: 'Europe/Lisbon' }).toUTC()
+ const stop = DateTime.fromISO(item.EndDate, { zone: 'Europe/Lisbon' }).toUTC()
const prog = {
- title: item.name || 'Sem título',
+ title: item.Title || 'Sem título',
start,
stop
}
- if (description) prog.description = description
- if (image) {
+
+ if (item.Synopsis) {
+ prog.description = item.Synopsis
+ }
+
+ // 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`
prog.icon = { src: image }
prog.image = image
}
+
programs.push(prog)
}
@@ -70,84 +60,45 @@ module.exports = {
async channels() {
const axios = require('axios')
const data = await axios
- .post('https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getGridAnon', null, {
+ .get('https://meogouser.apps.meo.pt/Services/GridTv/GridTv.svc/GetContentsForChannels?userAgent=IPTV_OFR_GTV', {
headers: {
- Origin: 'https://www.meo.pt',
- 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; en-US Trident/4.0)'
+ 'accept': '*/*',
+ 'accept-language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,pt;q=0.6,cs;q=0.5',
+ 'cache-control': 'no-cache',
+ 'origin': 'https://www.meo.pt',
+ 'pragma': 'no-cache',
+ 'priority': 'u=1, i',
+ 'referer': 'https://www.meo.pt/',
+ 'sec-ch-ua': '"Not(A:Brand";v="8", "Chromium";v="144", "Google Chrome";v="144"',
+ 'sec-ch-ua-mobile': '?1',
+ 'sec-ch-ua-platform': '"Android"',
+ 'sec-fetch-dest': 'empty',
+ 'sec-fetch-mode': 'cors',
+ 'sec-fetch-site': 'same-site',
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36'
}
})
.then(r => r.data)
.catch(console.log)
- // channel logo at data.d.channels.logo
-
- return data.d.channels
+ return data.Result
.map(item => {
return {
lang: 'pt',
- site_id: item.sigla,
- name: item.name
+ site_id: item.CallLetter,
+ name: item.Title
}
})
.filter(channel => channel.site_id)
}
}
-function parseStart(item) {
- return DateTime.fromFormat(`${item.date} ${item.timeIni}`, 'd-M-yyyy HH:mm', {
- zone: 'Europe/Lisbon'
- }).toUTC()
-}
-
-function parseStop(item) {
- return DateTime.fromFormat(`${item.date} ${item.timeEnd}`, 'd-M-yyyy HH:mm', {
- zone: 'Europe/Lisbon'
- }).toUTC()
-}
-
function parseItems(content) {
if (!content) return []
- const data = JSON.parse(content)
- const programs = data?.d?.channels?.[0]?.programs
-
- return Array.isArray(programs) ? programs : []
-}
-
-async function fetchProgramDetails(programID, axiosInstance) {
try {
- const response = await axiosInstance.post(
- 'https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramDetails',
- {
- service: 'programdetail',
- programID: String(programID),
- accountID: ''
- },
- {
- headers: {
- Origin: 'https://www.meo.pt',
- 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; en-US Trident/4.0)'
- },
- timeout: 10000
- }
- )
-
- const data = response.data
- // Response structure has program data directly in data.d
- const program = data?.d
- if (!program || typeof program !== 'object') return null
-
- // Build image URL using MEO's image handler
- let image = null
- if (program.progName && program.channelSigla) {
- const encodedTitle = encodeURIComponent(program.progName)
- image = `https://proxycache.online.meo.pt/eemstb/ImageHandler.ashx?evTitle=${encodedTitle}&chCallLetter=${program.channelSigla}&profile=16_9&width=600`
- }
-
- const description = program.description || null
-
- return { description, image }
+ const data = typeof content === 'string' ? JSON.parse(content) : content
+ return Array.isArray(data.Result) ? data.Result : []
} catch {
- // Silent fail returning null so parser continues
- return null
+ return []
}
}
diff --git a/sites/meo.pt/meo.pt.test.js b/sites/meo.pt/meo.pt.test.js
index d86e9d2d9..26b5ce0f5 100644
--- a/sites/meo.pt/meo.pt.test.js
+++ b/sites/meo.pt/meo.pt.test.js
@@ -18,37 +18,28 @@ const channel = {
}
it('can generate valid url', () => {
- expect(url).toBe(
- 'https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels'
+ expect(url({ channel, date })).toBe(
+ 'https://meogouser.apps.meo.pt/Services/GridTv/GridTv.svc/GetLiveChannelProgramsByDate?callLetter=RTPM&date=2022-12-02&userAgent=IPTV_OFR_GTV'
)
})
it('can generate valid request method', () => {
- expect(request.method).toBe('POST')
+ expect(request.method).toBe('GET')
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject({
- Origin: 'https://www.meo.pt'
- })
-})
-
-it('can generate valid request method', () => {
- expect(request.data({ channel, date })).toMatchObject({
- service: 'channelsguide',
- channels: ['RTPM'],
- dateStart: '2022-12-02T00:00:00-00:00',
- dateEnd: '2022-12-03T00:00:00-00:00',
- accountID: ''
+ 'origin': 'https://www.meo.pt',
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36'
})
})
it('can parse response', async () => {
- const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf-8')
- axios.post.mockResolvedValue({ data: {} })
+ axios.get.mockResolvedValue({ data: {} })
- let results = await parser({ content })
+ let results = await parser({ content, channel })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
@@ -56,9 +47,13 @@ it('can parse response', async () => {
})
expect(results[0]).toMatchObject({
- start: '2022-12-01T23:35:00.000Z',
- stop: '2022-12-02T00:17:00.000Z',
- title: 'Walker, O Ranger Do Texas T6 - Ep. 14'
+ start: '2026-01-22T23:40:00.000Z',
+ stop: '2026-01-23T00:04:00.000Z',
+ 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'
+ }
})
})
diff --git a/sites/movistarplus.es/movistarplus.es.config.js b/sites/movistarplus.es/movistarplus.es.config.js
index c58b51901..00930b959 100644
--- a/sites/movistarplus.es/movistarplus.es.config.js
+++ b/sites/movistarplus.es/movistarplus.es.config.js
@@ -1,6 +1,11 @@
const axios = require('axios')
const cheerio = require('cheerio')
const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+const timezone = require('dayjs/plugin/timezone')
+
+dayjs.extend(utc)
+dayjs.extend(timezone)
module.exports = {
site: 'movistarplus.es',
@@ -8,35 +13,87 @@ module.exports = {
url({ channel, date }) {
return `https://www.movistarplus.es/programacion-tv/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
- async parser({ content }) {
+ request: {
+ headers: {
+ 'User-Agent':
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
+ Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
+ 'Accept-Language': 'es-ES,es;q=0.9,en;q=0.8',
+ Referer: 'https://www.movistarplus.es/programacion-tv'
+ },
+ maxRedirects: 5
+ },
+ async parser({ content, date }) {
let programs = []
- let items = parseItems(content)
- if (!items.length) return programs
-
const $ = cheerio.load(content)
- const programElements = $('div[id^="ele-"]').get()
- for (let i = 0; i < items.length; i++) {
- const el = items[i]
- let description = null
+ const programDivs = $('div[id^="ele-"]').toArray()
- if (programElements[i]) {
- const programDiv = $(programElements[i])
- const programLink = programDiv.find('a').attr('href')
-
- if (programLink) {
- const idMatch = programLink.match(/id=(\d+)/)
- if (idMatch && idMatch[1]) {
- description = await getProgramDescription(programLink).catch(() => null)
+ for (let i = 0; i < programDivs.length; i++) {
+ const el = $(programDivs[i])
+
+ const title = el.find('li.title').text().trim()
+ if (!title) continue
+
+ const timeText = el.find('li.time').text().trim()
+ if (!timeText) continue
+
+ const [hours, minutes] = timeText.split(':').map(h => parseInt(h, 10))
+
+ // Parse time in Spain timezone (Europe/Madrid)
+ let startDate = dayjs.tz(
+ `${date.format('YYYY-MM-DD')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`,
+ 'YYYY-MM-DD HH:mm',
+ 'Europe/Madrid'
+ )
+
+ // If the time is in early morning (before 5 AM), it's the next day
+ if (hours < 5) {
+ startDate = startDate.add(1, 'day')
+ }
+
+ // Calculate end time from next program's start time
+ let endDate
+ if (i < programDivs.length - 1) {
+ const nextEl = $(programDivs[i + 1])
+ const nextTimeText = nextEl.find('li.time').text().trim()
+ if (nextTimeText) {
+ const [nextHours, nextMinutes] = nextTimeText.split(':').map(h => parseInt(h, 10))
+ endDate = dayjs.tz(
+ `${date.format('YYYY-MM-DD')} ${nextHours.toString().padStart(2, '0')}:${nextMinutes.toString().padStart(2, '0')}`,
+ 'YYYY-MM-DD HH:mm',
+ 'Europe/Madrid'
+ )
+
+ // If the next time is in early morning (before 5 AM), it's the next day
+ if (nextHours < 5) {
+ endDate = endDate.add(1, 'day')
+ }
+
+ // If end time is still before or same as start time, add another day
+ if (endDate.isBefore(startDate) || endDate.isSame(startDate)) {
+ endDate = endDate.add(1, 'day')
}
}
}
+ // If no end time, use start of next day
+ if (!endDate) {
+ endDate = startDate.add(1, 'day').startOf('day')
+ }
+
+ const programLink = el.find('a').attr('href')
+ let description = null
+
+ if (programLink) {
+ description = await getProgramDescription(programLink).catch(() => null)
+ }
+
programs.push({
- title: el.item.name,
- description: description,
- start: dayjs(el.item.startDate),
- stop: dayjs(el.item.endDate)
+ title,
+ description,
+ start: startDate,
+ stop: endDate
})
}
@@ -44,7 +101,13 @@ module.exports = {
},
async channels() {
const html = await axios
- .get('https://www.movistarplus.es/programacion-tv')
+ .get('https://www.movistarplus.es/programacion-tv', {
+ headers: {
+ 'User-Agent':
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
+ Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
+ }
+ })
.then(r => r.data)
.catch(console.log)
@@ -65,33 +128,17 @@ module.exports = {
}
}
-function parseItems(content) {
- try {
- const $ = cheerio.load(content)
- let scheme = $('script:contains("@type": "ItemList")').html()
- scheme = JSON.parse(scheme)
- if (!scheme || !Array.isArray(scheme.itemListElement)) return []
-
- return scheme.itemListElement
- } catch {
- return []
- }
-}
-
async function getProgramDescription(programUrl) {
- try {
- const response = await axios.get(programUrl, {
- headers: {
- 'Referer': 'https://www.movistarplus.es/programacion-tv/'
- }
- })
+ const response = await axios.get(programUrl, {
+ headers: {
+ 'User-Agent':
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
+ Referer: 'https://www.movistarplus.es/programacion-tv/'
+ }
+ })
- const $ = cheerio.load(response.data)
- const description = $('.show-content .text p').first().text().trim() || null
+ const $ = cheerio.load(response.data)
+ const description = $('.show-content .text p').first().text().trim() || null
- return description
- } catch (error) {
- console.error(`Error fetching description from ${programUrl}:`, error.message)
- return null
- }
+ return description
}
diff --git a/sites/nostv.pt/__data__/data.json b/sites/nostv.pt/__data__/data.json
index 205e57974..6725777c5 100644
--- a/sites/nostv.pt/__data__/data.json
+++ b/sites/nostv.pt/__data__/data.json
@@ -1 +1,67 @@
-[{"CoreId":"2023121151009543","AssetId":"EPGE2023121151009543","ContentId":"epg@2023121151009543","ProgramId":"3011502","AggregatorId":"2967456","DateFullEventId":"2023121151009543","GridItemsLink":"/v2/browse/epg@2023121151009543/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009543/PlayListTray/items","UtcDateTimeStart":"2023-12-11T16:30:00Z","UtcDateTimeEnd":"2023-12-11T17:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Village Vets","SubTitle":"","RatingDisplay":"NC","GenreDisplay":"Reality TV","SeriesId":"142241","Description":"A história de dois melhores amigos veterinários e o seu extraordinário trabalho na Austrália.","ReleaseYear":"2014","Rating":0,"Season":1,"Episode":12,"Duration":30,"ProgramId":3011502,"AggregatorId":2967456,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"8329ed1aec5d4c0faa2056972256ff9f","Url":"http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f","Type":1}]},{"CoreId":"2023121151009544","AssetId":"EPGE2023121151009544","ContentId":"epg@2023121151009544","ProgramId":"3161537","AggregatorId":"2165665","DateFullEventId":"2023121151009544","GridItemsLink":"/v2/browse/epg@2023121151009544/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009544/PlayListTray/items","UtcDateTimeStart":"2023-12-11T17:00:00Z","UtcDateTimeEnd":"2023-12-11T18:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Histórias Clínicas","SubTitle":"Associações","RatingDisplay":"M12","GenreDisplay":"Saúde","SeriesId":"102905","Description":"Processo de Decisão Clínica.","ReleaseYear":"2018","Rating":80,"Season":7,"Episode":13,"Duration":60,"ProgramId":3161537,"AggregatorId":2165665,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"818dba4817a7464f9e8433620270b01d","Url":"http://vip.pam.local.internal/PAM.Images/Store/818dba4817a7464f9e8433620270b01d","Type":1}]},{"CoreId":"2023121151009545","AssetId":"EPGE2023121151009545","ContentId":"epg@2023121151009545","ProgramId":"3357379","AggregatorId":"2182966","DateFullEventId":"2023121151009545","GridItemsLink":"/v2/browse/epg@2023121151009545/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009545/PlayListTray/items","UtcDateTimeStart":"2023-12-11T18:00:00Z","UtcDateTimeEnd":"2023-12-11T19:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Corpo Clínico","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Saúde","SeriesId":"103390","Description":"Farmacovigilância.","ReleaseYear":"2018","Rating":1,"Season":12,"Episode":5,"Duration":60,"ProgramId":3357379,"AggregatorId":2182966,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"a060ca5930444d3a864ad20615e7df33","Url":"http://vip.pam.local.internal/PAM.Images/Store/a060ca5930444d3a864ad20615e7df33","Type":1}]},{"CoreId":"2023121151009546","AssetId":"EPGE2023121151009546","ContentId":"epg@2023121151009546","ProgramId":"3364579","AggregatorId":"3161534","DateFullEventId":"2023121151009546","GridItemsLink":"/v2/browse/epg@2023121151009546/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009546/PlayListTray/items","UtcDateTimeStart":"2023-12-11T19:00:00Z","UtcDateTimeEnd":"2023-12-11T20:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Caixa de Pandora","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Talk-Show","SeriesId":"152921","Description":"Programa de 45 minutos, em estúdio, que reúne 4 mulheres de diversas idades e backgrounds que conversam todas as semanas sobre temas ligados à saúde e bem-estar, mas também à sexualidade, vida em família, ao trabalho, etc. É uma tertúlia no feminino.","ReleaseYear":"2023","Rating":80,"Season":4,"Episode":13,"Duration":60,"ProgramId":3364579,"AggregatorId":3161534,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"0ba7dccc8d1d459083c90666a2250776","Url":"http://vip.pam.local.internal/PAM.Images/Store/0ba7dccc8d1d459083c90666a2250776","Type":1}]},{"CoreId":"2023121151009547","AssetId":"EPGE2023121151009547","ContentId":"epg@2023121151009547","ProgramId":"3161541","AggregatorId":"2166905","DateFullEventId":"2023121151009547","GridItemsLink":"/v2/browse/epg@2023121151009547/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009547/PlayListTray/items","UtcDateTimeStart":"2023-12-11T20:00:00Z","UtcDateTimeEnd":"2023-12-11T21:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Anatomia De Vénus","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Entrevista","SeriesId":"102934","Description":"Sexualidade e Deficiência.","ReleaseYear":"2018","Rating":80,"Season":7,"Episode":13,"Duration":60,"ProgramId":3161541,"AggregatorId":2166905,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"5a9c92a158084235901d63e0cda418df","Url":"http://vip.pam.local.internal/PAM.Images/Store/5a9c92a158084235901d63e0cda418df","Type":1}]},{"CoreId":"2023121151009548","AssetId":"EPGE2023121151009548","ContentId":"epg@2023121151009548","ProgramId":"3072059","AggregatorId":"3066918","DateFullEventId":"2023121151009548","GridItemsLink":"/v2/browse/epg@2023121151009548/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009548/PlayListTray/items","UtcDateTimeStart":"2023-12-11T21:00:00Z","UtcDateTimeEnd":"2023-12-11T22:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Heart Transplant: A Chance To Live","SubTitle":"","RatingDisplay":"NC","GenreDisplay":"Saúde","SeriesId":"146850","Description":"Acompanhamos a vida de sete doentes criticos à espera para fazerem transplantes de coração.","ReleaseYear":"2018","Rating":0,"Season":1,"Episode":2,"Duration":60,"ProgramId":3072059,"AggregatorId":3066918,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"aba563a9ff3748de8a3551633f3bd1cb","Url":"http://vip.pam.local.internal/PAM.Images/Store/aba563a9ff3748de8a3551633f3bd1cb","Type":1}]},{"CoreId":"2023121151009549","AssetId":"EPGE2023121151009549","ContentId":"epg@2023121151009549","ProgramId":"3361332","AggregatorId":"3103070","DateFullEventId":"2023121151009549","GridItemsLink":"/v2/browse/epg@2023121151009549/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009549/PlayListTray/items","UtcDateTimeStart":"2023-12-11T22:00:00Z","UtcDateTimeEnd":"2023-12-11T22:30:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Entre Turnos","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Saúde","SeriesId":"149976","Description":"Vasco Lança (jogador de basquetebol e estudante de medicina).","ReleaseYear":"2022","Rating":80,"Season":1,"Episode":11,"Duration":30,"ProgramId":3361332,"AggregatorId":3103070,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"2e0fa1bc7d36404ab52dafcf450137d2","Url":"http://vip.pam.local.internal/PAM.Images/Store/2e0fa1bc7d36404ab52dafcf450137d2","Type":1}]},{"CoreId":"2023121151009550","AssetId":"EPGE2023121151009550","ContentId":"epg@2023121151009550","ProgramId":"3367957","AggregatorId":"3333429","DateFullEventId":"2023121151009550","GridItemsLink":"/v2/browse/epg@2023121151009550/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009550/PlayListTray/items","UtcDateTimeStart":"2023-12-11T22:30:00Z","UtcDateTimeEnd":"2023-12-11T23:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Fact Check","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Entretenimento","SeriesId":"164520","Description":"Ouviu dizer que não deve misturar melancia e vinho na mesma refeição? Contaram-lhe que aquecer refeições no micro-ondas provoca cancro? No outro dia, viu nas redes sociais alguém afirmar que só vai ao psiquiatra quem tem doenças graves?","ReleaseYear":"2023","Rating":1,"Season":1,"Episode":11,"Duration":30,"ProgramId":3367957,"AggregatorId":3333429,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"6b08d78551e745899ff8db0fea2b8680","Url":"http://vip.pam.local.internal/PAM.Images/Store/6b08d78551e745899ff8db0fea2b8680","Type":1}]},{"CoreId":"2023121151009551","AssetId":"EPGE2023121151009551","ContentId":"epg@2023121151009551","ProgramId":"3365804","AggregatorId":"2165712","DateFullEventId":"2023121151009551","GridItemsLink":"/v2/browse/epg@2023121151009551/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121151009551/PlayListTray/items","UtcDateTimeStart":"2023-12-11T23:00:00Z","UtcDateTimeEnd":"2023-12-12T00:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Check Up","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Debate","SeriesId":"102906","Description":"Para debater o futuro da saúde em Portugal, todas as semanas abrimos antena a “Check up”. O programa promete reunir os principais protagonistas do setor para discutirem em conjunto os grandes temas que preocupam este universo.","ReleaseYear":"2018","Rating":1,"Season":10,"Episode":14,"Duration":60,"ProgramId":3365804,"AggregatorId":2165712,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"5bf507f275934d369ceb7a790251bd1e","Url":"http://vip.pam.local.internal/PAM.Images/Store/5bf507f275934d369ceb7a790251bd1e","Type":1}]},{"CoreId":"2023121251009807","AssetId":"EPGE2023121251009807","ContentId":"epg@2023121251009807","ProgramId":"3364404","AggregatorId":"2460399","DateFullEventId":"2023121251009807","GridItemsLink":"/v2/browse/epg@2023121251009807/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009807/PlayListTray/items","UtcDateTimeStart":"2023-12-12T00:00:00Z","UtcDateTimeEnd":"2023-12-12T00:30:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Doutor Ajuda","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Saúde","SeriesId":"112361","Description":"O que é a toxina botulínica e suas utilizações.","ReleaseYear":"2023","Rating":1,"Season":3,"Episode":9,"Duration":30,"ProgramId":3364404,"AggregatorId":2460399,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"dfc67678e6de4a2baf23cd16a039684b","Url":"http://vip.pam.local.internal/PAM.Images/Store/dfc67678e6de4a2baf23cd16a039684b","Type":1}]},{"CoreId":"2023121251009808","AssetId":"EPGE2023121251009808","ContentId":"epg@2023121251009808","ProgramId":"2207459","AggregatorId":"2165669","DateFullEventId":"2023121251009808","GridItemsLink":"/v2/browse/epg@2023121251009808/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009808/PlayListTray/items","UtcDateTimeStart":"2023-12-12T00:30:00Z","UtcDateTimeEnd":"2023-12-12T01:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Atendimento Permanente","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Reality TV","SeriesId":"102919","Description":"No Atendimento Permanente desta semana vamos conhecer o dia a dia de um fisiatra.","ReleaseYear":"2018","Rating":1,"Season":1,"Episode":6,"Duration":30,"ProgramId":2207459,"AggregatorId":2165669,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"7973715e80b449afaeea3a23aa830fa0","Url":"http://vip.pam.local.internal/PAM.Images/Store/7973715e80b449afaeea3a23aa830fa0","Type":1}]},{"CoreId":"2023121251009809","AssetId":"EPGE2023121251009809","ContentId":"epg@2023121251009809","ProgramId":"3161541","AggregatorId":"2166905","DateFullEventId":"2023121251009809","GridItemsLink":"/v2/browse/epg@2023121251009809/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009809/PlayListTray/items","UtcDateTimeStart":"2023-12-12T01:00:00Z","UtcDateTimeEnd":"2023-12-12T02:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Anatomia De Vénus","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Entrevista","SeriesId":"102934","Description":"Sexualidade e Deficiência.","ReleaseYear":"2018","Rating":80,"Season":7,"Episode":13,"Duration":60,"ProgramId":3161541,"AggregatorId":2166905,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"5a9c92a158084235901d63e0cda418df","Url":"http://vip.pam.local.internal/PAM.Images/Store/5a9c92a158084235901d63e0cda418df","Type":1}]},{"CoreId":"2023121251009810","AssetId":"EPGE2023121251009810","ContentId":"epg@2023121251009810","ProgramId":"3047405","AggregatorId":"140870","DateFullEventId":"2023121251009810","GridItemsLink":"/v2/browse/epg@2023121251009810/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009810/PlayListTray/items","UtcDateTimeStart":"2023-12-12T02:00:00Z","UtcDateTimeEnd":"2023-12-12T03:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Sete Vidas","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Entrevista","SeriesId":"116562","Description":"Anorexia, perturbação bipolar, depressão, comportamentos aditivos, dor crónica ou comportamento obsessivo-compulsivo são patologias psicológicas que a conhecida psicóloga clínica Joana Amaral Dias vai retratar através de uma conversa com uma figura pública que tenha vivenciado e superado o problema.","ReleaseYear":"2022","Rating":1,"Season":3,"Episode":8,"Duration":60,"ProgramId":3047405,"AggregatorId":140870,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"245f7c92250d443dbfa923d4a7cdda30","Url":"http://vip.pam.local.internal/PAM.Images/Store/245f7c92250d443dbfa923d4a7cdda30","Type":1}]},{"CoreId":"2023121251009811","AssetId":"EPGE2023121251009811","ContentId":"epg@2023121251009811","ProgramId":"2602834","AggregatorId":"2597243","DateFullEventId":"2023121251009811","GridItemsLink":"/v2/browse/epg@2023121251009811/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009811/PlayListTray/items","UtcDateTimeStart":"2023-12-12T03:00:00Z","UtcDateTimeEnd":"2023-12-12T04:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Histórias Clínicas: Dra. Sofia Braga","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Talk-Show","SeriesId":"120596","Description":"Rastreio cancro prostata.","ReleaseYear":"2020","Rating":80,"Season":6,"Episode":5,"Duration":60,"ProgramId":2602834,"AggregatorId":2597243,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"818dba4817a7464f9e8433620270b01d","Url":"http://vip.pam.local.internal/PAM.Images/Store/818dba4817a7464f9e8433620270b01d","Type":1}]},{"CoreId":"2023121251009812","AssetId":"EPGE2023121251009812","ContentId":"epg@2023121251009812","ProgramId":"2554643","AggregatorId":"1059808","DateFullEventId":"2023121251009812","GridItemsLink":"/v2/browse/epg@2023121251009812/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009812/PlayListTray/items","UtcDateTimeStart":"2023-12-12T04:00:00Z","UtcDateTimeEnd":"2023-12-12T05:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Pura Vida","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Entrevista","SeriesId":"102883","Description":"João Paulo Freitas.","ReleaseYear":"2018","Rating":1,"Season":5,"Episode":9,"Duration":60,"ProgramId":2554643,"AggregatorId":1059808,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"c59c07b60101435a846e546633137b54","Url":"http://vip.pam.local.internal/PAM.Images/Store/c59c07b60101435a846e546633137b54","Type":1}]},{"CoreId":"2023121251009813","AssetId":"EPGE2023121251009813","ContentId":"epg@2023121251009813","ProgramId":"2581668","AggregatorId":"2527677","DateFullEventId":"2023121251009813","GridItemsLink":"/v2/browse/epg@2023121251009813/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009813/PlayListTray/items","UtcDateTimeStart":"2023-12-12T05:00:00Z","UtcDateTimeEnd":"2023-12-12T05:30:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Casos Singulares","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Entrevista","SeriesId":"116606","Description":"No mundo foram reconhecidas entre 5 a 8 mil doenças raras que afetam o próprio e quem está ao redor. O peso social do problema, o acesso às terapêuticas quando existem, a forma de lidar com o problema, são aspetos a abordar no programa, que apresenta patologias e histórias de vida diferentes.","ReleaseYear":"2019","Rating":1,"Season":1,"Episode":13,"Duration":30,"ProgramId":2581668,"AggregatorId":2527677,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"42a228cd013742ffa58e302d4706b401","Url":"http://vip.pam.local.internal/PAM.Images/Store/42a228cd013742ffa58e302d4706b401","Type":1}]},{"CoreId":"2023121251009814","AssetId":"EPGE2023121251009814","ContentId":"epg@2023121251009814","ProgramId":"2312607","AggregatorId":"2176405","DateFullEventId":"2023121251009814","GridItemsLink":"/v2/browse/epg@2023121251009814/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009814/PlayListTray/items","UtcDateTimeStart":"2023-12-12T05:30:00Z","UtcDateTimeEnd":"2023-12-12T06:30:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Histórias Clínicas: Dra. Rita Gama","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Talk-Show","SeriesId":"103212","Description":"Prematuridade e doenças pulmonares crónicas obstrutivas.","ReleaseYear":"2018","Rating":80,"Season":2,"Episode":3,"Duration":60,"ProgramId":2312607,"AggregatorId":2176405,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"818dba4817a7464f9e8433620270b01d","Url":"http://vip.pam.local.internal/PAM.Images/Store/818dba4817a7464f9e8433620270b01d","Type":1}]},{"CoreId":"2023121251009815","AssetId":"EPGE2023121251009815","ContentId":"epg@2023121251009815","ProgramId":"2944028","AggregatorId":"2165663","DateFullEventId":"2023121251009815","GridItemsLink":"/v2/browse/epg@2023121251009815/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009815/PlayListTray/items","UtcDateTimeStart":"2023-12-12T06:30:00Z","UtcDateTimeEnd":"2023-12-12T07:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Ajudar Quem Ajuda","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Entrevista","SeriesId":"102898","Description":"Hoje apresentamos a Associação Careca Power.","ReleaseYear":"2018","Rating":1,"Season":7,"Episode":11,"Duration":30,"ProgramId":2944028,"AggregatorId":2165663,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"a655dbeb67b745418e40096827581a69","Url":"http://vip.pam.local.internal/PAM.Images/Store/a655dbeb67b745418e40096827581a69","Type":1}]},{"CoreId":"2023121251009816","AssetId":"EPGE2023121251009816","ContentId":"epg@2023121251009816","ProgramId":"2554639","AggregatorId":"2165680","DateFullEventId":"2023121251009816","GridItemsLink":"/v2/browse/epg@2023121251009816/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009816/PlayListTray/items","UtcDateTimeStart":"2023-12-12T07:00:00Z","UtcDateTimeEnd":"2023-12-12T08:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Tenho um bebé. E agora?","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Magazine","SeriesId":"102886","Description":"Obesidade Infantil - Estratégias de combate em casa e na escola.","ReleaseYear":"2018","Rating":1,"Season":5,"Episode":9,"Duration":60,"ProgramId":2554639,"AggregatorId":2165680,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"293d91056a424619b904d93cd60e8db5","Url":"http://vip.pam.local.internal/PAM.Images/Store/293d91056a424619b904d93cd60e8db5","Type":1}]},{"CoreId":"2023121251009817","AssetId":"EPGE2023121251009817","ContentId":"epg@2023121251009817","ProgramId":"2383511","AggregatorId":"2303539","DateFullEventId":"2023121251009817","GridItemsLink":"/v2/browse/epg@2023121251009817/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009817/PlayListTray/items","UtcDateTimeStart":"2023-12-12T08:00:00Z","UtcDateTimeEnd":"2023-12-12T09:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Histórias Clínicas: Dr. Luis Sousa","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Talk-Show","SeriesId":"106734","Description":"Medicina Dentária em Portugal.","ReleaseYear":"2018","Rating":80,"Season":3,"Episode":1,"Duration":60,"ProgramId":2383511,"AggregatorId":2303539,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"818dba4817a7464f9e8433620270b01d","Url":"http://vip.pam.local.internal/PAM.Images/Store/818dba4817a7464f9e8433620270b01d","Type":1}]},{"CoreId":"2023121251009818","AssetId":"EPGE2023121251009818","ContentId":"epg@2023121251009818","ProgramId":"3364579","AggregatorId":"3161534","DateFullEventId":"2023121251009818","GridItemsLink":"/v2/browse/epg@2023121251009818/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009818/PlayListTray/items","UtcDateTimeStart":"2023-12-12T09:00:00Z","UtcDateTimeEnd":"2023-12-12T10:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Caixa de Pandora","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Talk-Show","SeriesId":"152921","Description":"Programa de 45 minutos, em estúdio, que reúne 4 mulheres de diversas idades e backgrounds que conversam todas as semanas sobre temas ligados à saúde e bem-estar, mas também à sexualidade, vida em família, ao trabalho, etc. É uma tertúlia no feminino.","ReleaseYear":"2023","Rating":80,"Season":4,"Episode":13,"Duration":60,"ProgramId":3364579,"AggregatorId":3161534,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"0ba7dccc8d1d459083c90666a2250776","Url":"http://vip.pam.local.internal/PAM.Images/Store/0ba7dccc8d1d459083c90666a2250776","Type":1}]},{"CoreId":"2023121251009819","AssetId":"EPGE2023121251009819","ContentId":"epg@2023121251009819","ProgramId":"3357379","AggregatorId":"2182966","DateFullEventId":"2023121251009819","GridItemsLink":"/v2/browse/epg@2023121251009819/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009819/PlayListTray/items","UtcDateTimeStart":"2023-12-12T10:00:00Z","UtcDateTimeEnd":"2023-12-12T11:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Corpo Clínico","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Saúde","SeriesId":"103390","Description":"Farmacovigilância.","ReleaseYear":"2018","Rating":1,"Season":12,"Episode":5,"Duration":60,"ProgramId":3357379,"AggregatorId":2182966,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"a060ca5930444d3a864ad20615e7df33","Url":"http://vip.pam.local.internal/PAM.Images/Store/a060ca5930444d3a864ad20615e7df33","Type":1}]},{"CoreId":"2023121251009820","AssetId":"EPGE2023121251009820","ContentId":"epg@2023121251009820","ProgramId":"3365186","AggregatorId":"3120338","DateFullEventId":"2023121251009820","GridItemsLink":"/v2/browse/epg@2023121251009820/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009820/PlayListTray/items","UtcDateTimeStart":"2023-12-12T11:00:00Z","UtcDateTimeEnd":"2023-12-12T12:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Tenho Um Adolescente. E Agora?","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Saúde","SeriesId":"150432","Description":"Como lidar com a rejeição.","ReleaseYear":"2022","Rating":80,"Season":2,"Episode":3,"Duration":60,"ProgramId":3365186,"AggregatorId":3120338,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"d0b53e8f6f644939a11be96ac28aae07","Url":"http://vip.pam.local.internal/PAM.Images/Store/d0b53e8f6f644939a11be96ac28aae07","Type":1}]},{"CoreId":"2023121251009821","AssetId":"EPGE2023121251009821","ContentId":"epg@2023121251009821","ProgramId":"3031742","AggregatorId":"2967454","DateFullEventId":"2023121251009821","GridItemsLink":"/v2/browse/epg@2023121251009821/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009821/PlayListTray/items","UtcDateTimeStart":"2023-12-12T12:00:00Z","UtcDateTimeEnd":"2023-12-12T13:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"One Born Every Minute","SubTitle":"","RatingDisplay":"NC","GenreDisplay":"Saúde","SeriesId":"142171","Description":"Saiba quais os segredos de uma boa relação.","ReleaseYear":"2018","Rating":0,"Season":9,"Episode":5,"Duration":60,"ProgramId":3031742,"AggregatorId":2967454,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"746a4552819c485aba07aed59fcca49d","Url":"http://vip.pam.local.internal/PAM.Images/Store/746a4552819c485aba07aed59fcca49d","Type":1}]},{"CoreId":"2023121251009822","AssetId":"EPGE2023121251009822","ContentId":"epg@2023121251009822","ProgramId":"3361332","AggregatorId":"3103070","DateFullEventId":"2023121251009822","GridItemsLink":"/v2/browse/epg@2023121251009822/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009822/PlayListTray/items","UtcDateTimeStart":"2023-12-12T13:00:00Z","UtcDateTimeEnd":"2023-12-12T13:30:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Entre Turnos","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Saúde","SeriesId":"149976","Description":"Vasco Lança (jogador de basquetebol e estudante de medicina).","ReleaseYear":"2022","Rating":80,"Season":1,"Episode":11,"Duration":30,"ProgramId":3361332,"AggregatorId":3103070,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"2e0fa1bc7d36404ab52dafcf450137d2","Url":"http://vip.pam.local.internal/PAM.Images/Store/2e0fa1bc7d36404ab52dafcf450137d2","Type":1}]},{"CoreId":"2023121251009823","AssetId":"EPGE2023121251009823","ContentId":"epg@2023121251009823","ProgramId":"3367957","AggregatorId":"3333429","DateFullEventId":"2023121251009823","GridItemsLink":"/v2/browse/epg@2023121251009823/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009823/PlayListTray/items","UtcDateTimeStart":"2023-12-12T13:30:00Z","UtcDateTimeEnd":"2023-12-12T14:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Fact Check","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Entretenimento","SeriesId":"164520","Description":"Ouviu dizer que não deve misturar melancia e vinho na mesma refeição? Contaram-lhe que aquecer refeições no micro-ondas provoca cancro? No outro dia, viu nas redes sociais alguém afirmar que só vai ao psiquiatra quem tem doenças graves?","ReleaseYear":"2023","Rating":1,"Season":1,"Episode":11,"Duration":30,"ProgramId":3367957,"AggregatorId":3333429,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"6b08d78551e745899ff8db0fea2b8680","Url":"http://vip.pam.local.internal/PAM.Images/Store/6b08d78551e745899ff8db0fea2b8680","Type":1}]},{"CoreId":"2023121251009824","AssetId":"EPGE2023121251009824","ContentId":"epg@2023121251009824","ProgramId":"3206760","AggregatorId":"3161538","DateFullEventId":"2023121251009824","GridItemsLink":"/v2/browse/epg@2023121251009824/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009824/PlayListTray/items","UtcDateTimeStart":"2023-12-12T14:00:00Z","UtcDateTimeEnd":"2023-12-12T15:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Guia da Vida Saudável","SubTitle":"","RatingDisplay":"M12","GenreDisplay":"Magazine","SeriesId":"152938","Description":"Programa de estúdio de 45 minutos, onde vamos mostrar exemplos e práticas que podem determinar uma vida mais saudável. Queremos condensar toda a informação disponível. O objetivo do programa é “prevenir primeiro, para não ter que remediar depois”.","ReleaseYear":"2023","Rating":80,"Season":1,"Episode":12,"Duration":60,"ProgramId":3206760,"AggregatorId":3161538,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"0082754b26bb4bc4978b9e324cccd8f6","Url":"http://vip.pam.local.internal/PAM.Images/Store/0082754b26bb4bc4978b9e324cccd8f6","Type":1}]},{"CoreId":"2023121251009825","AssetId":"EPGE2023121251009825","ContentId":"epg@2023121251009825","ProgramId":"3365804","AggregatorId":"2165712","DateFullEventId":"2023121251009825","GridItemsLink":"/v2/browse/epg@2023121251009825/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009825/PlayListTray/items","UtcDateTimeStart":"2023-12-12T15:00:00Z","UtcDateTimeEnd":"2023-12-12T16:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Check Up","SubTitle":"","RatingDisplay":"Todos","GenreDisplay":"Debate","SeriesId":"102906","Description":"Para debater o futuro da saúde em Portugal, todas as semanas abrimos antena a “Check up”. O programa promete reunir os principais protagonistas do setor para discutirem em conjunto os grandes temas que preocupam este universo.","ReleaseYear":"2018","Rating":1,"Season":10,"Episode":14,"Duration":60,"ProgramId":3365804,"AggregatorId":2165712,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"5bf507f275934d369ceb7a790251bd1e","Url":"http://vip.pam.local.internal/PAM.Images/Store/5bf507f275934d369ceb7a790251bd1e","Type":1}]},{"CoreId":"2023121251009826","AssetId":"EPGE2023121251009826","ContentId":"epg@2023121251009826","ProgramId":"3161537","AggregatorId":"2165665","DateFullEventId":"2023121251009826","GridItemsLink":"/v2/browse/epg@2023121251009826/grid/items","PlayListTrayItemLink":"/v1/contents/epg@2023121251009826/PlayListTray/items","UtcDateTimeStart":"2023-12-12T16:00:00Z","UtcDateTimeEnd":"2023-12-12T17:00:00Z","Type":4,"IsAdult":false,"AiringChannel":{"IsOnline":true,"IsTimeWarpable":true,"IsRestartable":true,"ServiceId":"510","ChannelId":"510","AssetId":"EPGC510","Name":"S+ HD","RatingDisplay":"M3","DvbLocator":"dvb://36.4C.835","Rating":20,"Position":129,"QualityVersion":2,"Images":[{"ImageId":"SAUDEMAIS.png","Url":"http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/SAUDEMAIS.png","Type":16}]},"Metadata":{"Title":"Histórias Clínicas","SubTitle":"Associações","RatingDisplay":"M12","GenreDisplay":"Saúde","SeriesId":"102905","Description":"Processo de Decisão Clínica.","ReleaseYear":"2018","Rating":80,"Season":7,"Episode":13,"Duration":60,"ProgramId":3161537,"AggregatorId":2165665,"IsNPVR":true,"IsStartOver":true},"Images":[{"ImageId":"818dba4817a7464f9e8433620270b01d","Url":"http://vip.pam.local.internal/PAM.Images/Store/818dba4817a7464f9e8433620270b01d","Type":1}]}]
\ No newline at end of file
+[
+ {
+ "CoreId": "2026012313905035",
+ "AssetId": "EPGE2026012313905035",
+ "ContentId": "epg@2026012313905035",
+ "ProgramId": "3805166",
+ "AggregatorId": "2649043",
+ "DateFullEventId": "2026012313905035",
+ "GridItemsLink": "/v2/browse/epg@2026012313905035/grid/items",
+ "PlayListTrayItemLink": "/v1/contents/epg@2026012313905035/PlayListTray/items",
+ "DetailNodeItemNavLink": "/nodeitems/epg@2026012313905035/detail?context=schedule",
+ "UtcDateTimeStart": "2026-01-23T22:39:00Z",
+ "UtcDateTimeEnd": "2026-01-24T00:23:00Z",
+ "Type": 4,
+ "IsAdult": false,
+ "AiringChannel": {
+ "IsOnline": true,
+ "IsTimeWarpable": true,
+ "IsRestartable": true,
+ "ServiceId": "139",
+ "ChannelId": "5",
+ "AssetId": "EPGC139",
+ "Name": "RTP 1 HD",
+ "RatingDisplay": "M3",
+ "DvbLocator": "dvb://36.4E.1E79",
+ "Rating": 20,
+ "Position": 1,
+ "QualityVersion": 2,
+ "Images": [
+ {
+ "ImageId": "RTPHD.png",
+ "Type": 16,
+ "Url": "http://vip.repositories.local.internal/Repositories.EPG/OttChannelIcons/RTPHD.png"
+ }
+ ]
+ },
+ "Metadata": {
+ "Title": "Em Casa d'Amália",
+ "SubTitle": "",
+ "RatingDisplay": "M6",
+ "GenreDisplay": "Talk-Show",
+ "SeriesId": "124075",
+ "Description": "Que mais poderíamos pedir para o regresso deste programa, do que receber um dos poetas de Amália? Manuel Alegre, autor do icónico \"Trova do Vento que Passa\", estará connosco. A este raro momento, juntam-se também ilustres convidados: Paulo de Carvalho e o seu filho Agir, Rita Guerra e André Amaro...",
+ "ReleaseYear": "2025",
+ "Rating": 60,
+ "Season": 9,
+ "Episode": 15,
+ "Duration": 104,
+ "ProgramId": 3805166,
+ "AggregatorId": 2649043,
+ "IsNPVR": true,
+ "IsStartOver": true
+ },
+ "Images": [
+ {
+ "ImageId": "901d96a8f1534749b076212c296d821e",
+ "Type": 1,
+ "Url": "http://vip.pam.local.internal/PAM.Images/Store/901d96a8f1534749b076212c296d821e"
+ },
+ {
+ "ImageId": "4de2fbd7177c4e7c8cc9faf703b119b5",
+ "Type": 38,
+ "Url": "http://vip.pam.local.internal/PAM.Images/Store/4de2fbd7177c4e7c8cc9faf703b119b5"
+ }
+ ]
+ }
+]
\ 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 378f158c1..0eb5ba713 100644
--- a/sites/nostv.pt/nostv.pt.channels.xml
+++ b/sites/nostv.pt/nostv.pt.channels.xml
@@ -12,7 +12,6 @@
Record News
TeleSUR
MCM Top
- MTV 00s
M6
Sky News
RTL
@@ -142,7 +141,6 @@
TVI HD
RTP Noticias HD
CNN Portugal HD
- MTV Live
Discovery HD
Eurosport 2 HD
Canal 11 HD
@@ -168,5 +166,5 @@
Dizi
Now
Sport TV 7 HD
- Conta Lá
-
+ Conta Lá
+
\ No newline at end of file
diff --git a/sites/nostv.pt/nostv.pt.config.js b/sites/nostv.pt/nostv.pt.config.js
index ffeb7a6eb..88db91de0 100644
--- a/sites/nostv.pt/nostv.pt.config.js
+++ b/sites/nostv.pt/nostv.pt.config.js
@@ -5,24 +5,33 @@ const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const headers = {
- 'X-Apikey': 'xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI',
- 'X-Core-Appversion': '2.20.0.3',
- 'X-Core-Contentratinglimit': '0',
- 'X-Core-Deviceid': '',
- 'X-Core-Devicetype': 'web',
- Origin: 'https://nostv.pt',
- 'User-Agent':
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
+ 'accept': 'application/json, text/plain, */*',
+ 'accept-language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,pt;q=0.6,cs;q=0.5',
+ 'cache-control': 'no-cache',
+ 'origin': 'https://nostv.pt',
+ 'pragma': 'no-cache',
+ 'priority': 'u=1, i',
+ 'referer': 'https://nostv.pt/',
+ 'sec-ch-ua': '"Not(A:Brand";v="8", "Chromium";v="144", "Google Chrome";v="144"',
+ 'sec-ch-ua-mobile': '?1',
+ 'sec-ch-ua-platform': '"Android"',
+ 'sec-fetch-dest': 'empty',
+ 'sec-fetch-mode': 'cors',
+ 'sec-fetch-site': 'cross-site',
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36',
+ 'x-apikey': 'xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI',
+ 'x-core-appversion': '2.20.2.2',
+ 'x-core-contentratinglimit': '0',
+ 'x-core-deviceid': '',
+ 'x-core-devicetype': 'web',
+ 'x-core-timezoneoffset': '3600000'
}
module.exports = {
site: 'nostv.pt',
days: 2,
url({ channel, date }) {
- return `https://api.clg.nos.pt/nostv/ott/schedule/range/contents/guest?channels=${channel.site_id
- }&minDate=${date.format('YYYY-MM-DD')}T00:00:00Z&maxDate=${date.format(
- 'YYYY-MM-DD'
- )}T23:59:59Z&isDateInclusive=true&client_id=${headers['X-Apikey']}`
+ return `https://api.clg.nos.pt/nostv/ott/schedule/range/contents/guest?channels=${channel.site_id}&minDate=${date.format('YYYY-MM-DD')}T00:00:00Z&maxDate=${date.format('YYYY-MM-DD')}T23:59:59Z&isDateInclusive=true&client_id=${headers['x-apikey']}`
},
request: { headers },
parser({ content }) {
@@ -31,7 +40,7 @@ module.exports = {
const items = Array.isArray(content) ? content : JSON.parse(content)
items.forEach(item => {
const image = item.Images
- ? `https://mage.stream.nos.pt/mage/v1/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['X-Apikey']}`
+ ? `https://mage.stream.nos.pt/mage/v1/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['x-apikey']}`
: null
programs.push({
title: item.Metadata?.Title,
@@ -54,7 +63,7 @@ module.exports = {
async channels() {
const result = await axios
.get(
- `https://api.clg.nos.pt/nostv/ott/channels/guest?client_id=${headers['X-Apikey']}`,
+ `https://api.clg.nos.pt/nostv/ott/channels/guest?client_id=${headers['x-apikey']}`,
{ headers }
)
.then(r => r.data)
diff --git a/sites/nostv.pt/nostv.pt.test.js b/sites/nostv.pt/nostv.pt.test.js
index 939b8aadc..e20132c20 100644
--- a/sites/nostv.pt/nostv.pt.test.js
+++ b/sites/nostv.pt/nostv.pt.test.js
@@ -28,20 +28,17 @@ it('can parse response', () => {
return p
})
- const image = 'https://mage.stream.nos.pt/mage/v1/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI'
-
expect(results[0]).toMatchObject({
- start: '2023-12-11T16:30:00.000Z',
- stop: '2023-12-11T17:00:00.000Z',
- title: 'Village Vets',
- description:
- 'A história de dois melhores amigos veterinários e o seu extraordinário trabalho na Austrália.',
- season: 1,
- episode: 12,
+ start: '2026-01-23T22:39:00.000Z',
+ stop: '2026-01-24T00:23:00.000Z',
+ title: 'Em Casa d\'Amália',
+ description: 'Que mais poderíamos pedir para o regresso deste programa, do que receber um dos poetas de Amália? Manuel Alegre, autor do icónico "Trova do Vento que Passa", estará connosco. A este raro momento, juntam-se também ilustres convidados: Paulo de Carvalho e o seu filho Agir, Rita Guerra e André Amaro...',
+ season: 9,
+ episode: 15,
icon: {
- src: image
+ src: 'https://mage.stream.nos.pt/mage/v1/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/901d96a8f1534749b076212c296d821e&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI'
},
- image
+ image: 'https://mage.stream.nos.pt/mage/v1/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/901d96a8f1534749b076212c296d821e&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI'
})
})
diff --git a/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml
index b3d659812..d64bc8252 100644
--- a/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml
+++ b/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml
@@ -35,6 +35,7 @@
ماجد المهندس
قناة مرايا
MBC1
+ MBC1
MBC1
MBC2
MBC3
diff --git a/sites/telenet.tv/telenet.tv.config.js b/sites/telenet.tv/telenet.tv.config.js
index 7f286001a..ac71973a6 100644
--- a/sites/telenet.tv/telenet.tv.config.js
+++ b/sites/telenet.tv/telenet.tv.config.js
@@ -14,7 +14,7 @@ module.exports = {
}
},
url: function ({ date, channel }) {
- return `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date.format('YYYYMMDDHHmmss')}`
+ return `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date.format('YYYYMMDD')}000000`
},
async parser({ content, channel, date }) {
let programs = []
@@ -22,25 +22,19 @@ module.exports = {
if (!items.length) return programs
const promises = [
axios.get(
- `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date
- .add(6, 'h')
- .format('YYYYMMDDHHmmss')}`,
+ `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date.format('YYYYMMDD')}060000`,
{
responseType: 'arraybuffer'
}
),
axios.get(
- `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date
- .add(12, 'h')
- .format('YYYYMMDDHHmmss')}`,
+ `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date.format('YYYYMMDD')}120000`,
{
responseType: 'arraybuffer'
}
),
axios.get(
- `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date
- .add(18, 'h')
- .format('YYYYMMDDHHmmss')}`,
+ `${API_STATIC_ENDPOINT}/${channel.lang}/events/segments/${date.format('YYYYMMDD')}180000`,
{
responseType: 'arraybuffer'
}
@@ -63,6 +57,7 @@ module.exports = {
const detail = await loadProgramDetails(item, channel)
programs.push({
title: item.title,
+ subTitle: detail.episodeName,
icon: parseIcon(item),
description: detail.longDescription,
category: detail.genres,
diff --git a/sites/vantagetv.ee/__data__/content.xml b/sites/vantagetv.ee/__data__/content.xml
new file mode 100644
index 000000000..b819412df
--- /dev/null
+++ b/sites/vantagetv.ee/__data__/content.xml
@@ -0,0 +1,1069 @@
+
+
+
+ Vantage Music
+
+
+ Vantage Dance
+
+
+ Vantage Rock
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ brand:new
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Urbanzone
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Old Skool Hip-Hop Show
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Rockzone
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Clubzone
+
+
+ Partyzone
+
+
+ Chillout Zone
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ The European Top 20
+
+
+ Video Mix
+
+
+ Urbanzone
+
+
+ Old Skool Hip-Hop Show
+
+
+ Rockzone
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ The UK Dance Top 20
+
+
+ Old Skool Hip-Hop Show
+
+
+ Rockzone
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Chillout Zone
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ brand:new
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+ Get ready for your day with Vantage Music
+
+
+ It's The 80's
+ The start of the music video era, with 80's classics not to be forgotten as well as some you probably have forgotten (for good reason!).
+
+
+ The 90's
+ Britpop, Jamming basslines, Catchy pop, forgotten boy bands with a bit of hip hop. It's the 90's baby.
+
+
+ Ultimate 2000's
+ A mix of the hits of 2000's along with some more lesser known artists.
+
+
+ Video Mix
+ Driving basslines, catchy pop, cool boy bands, and top-notch hip hop! You'll find all this and more at WILD 90S. Flashback vibes guaranteed! (Station info)
+
+
+ It's The 80's
+ The start of the music video era, with 80's classics not to be forgotten as well as some you probably have forgotten (for good reason!).
+
+
+ The 90's
+ Britpop, Jamming basslines, Catchy pop, forgotten boy bands with a bit of hip hop. It's the 90's baby.
+
+
+ Ultimate 2000's
+ A mix of the hits of 2000's along with some more lesser known artists.
+
+
+ Urbanzone
+ A playlist of songs to come out from the modern rap scene, along with some upcoming underground rap artists.
+
+
+ Night Videos
+ Whether you can't sleep, doing the night shift, or even if you just want to keep yourself awake, Vantage has non-stop commercial free music all night long.
+
+
+ Breakfast with Vantage Music
+ Get ready for your day with Vantage Music
+
+
+ It's The 80's
+ The start of the music video era, with 80's classics not to be forgotten as well as some you probably have forgotten (for good reason!).
+
+
+ The 90's
+ Britpop, Jamming basslines, Catchy pop, forgotten boy bands with a bit of hip hop. It's the 90's baby.
+
+
+ Ultimate 2000's
+ A mix of the hits of 2000's along with some more lesser known artists.
+
+
+ Video Mix
+ Driving basslines, catchy pop, cool boy bands, and top-notch hip hop! You'll find all this and more at WILD 90S. Flashback vibes guaranteed! (Station info)
+
+
+ It's The 80's
+ The start of the music video era, with 80's classics not to be forgotten as well as some you probably have forgotten (for good reason!).
+
+
+ The 90's
+ Britpop, Jamming basslines, Catchy pop, forgotten boy bands with a bit of hip hop. It's the 90's baby.
+
+
+ Ultimate 2000's
+ A mix of the hits of 2000's along with some more lesser known artists.
+
+
+ Old Skool Hip-Hop Show
+
+
+ Night Videos
+ Whether you can't sleep, doing the night shift, or even if you just want to keep yourself awake, Vantage has non-stop commercial free music all night long.
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Rockzone
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Clubzone
+
+
+ Partyzone
+
+
+ Night Videos
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ The European Top 20
+
+
+ Video Mix
+
+
+ Urbanzone
+
+
+ Old Skool Hip-Hop Show
+
+
+ Rockzone
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Breakfast with Vantage Music
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Video Mix
+
+
+ The UK Dance Top 20
+
+
+ Old Skool Hip-Hop Show
+
+
+ Rockzone
+
+
+ It's The 80's
+
+
+ The 90's
+
+
+ Ultimate 2000's
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Chillout Zone
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Dance
+
+
+ Don't Stop The Dance
+
+
+ The UK Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ The German Official Dance Chart
+
+
+ Don't Stop The Dance
+
+
+ Clubzone Reloaded
+
+
+ Partyzone Reloaded
+
+
+ Dance All Night
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
+ Breakfast with Vantage Rock
+ Get ready for your day with Vantage Rock
+
+
+ Can't Stop The Rock
+ Commercial free rock music, all day long
+
+
+ Rock All Night
+ It might be late, but that's no reason to stop!
+
+
\ No newline at end of file
diff --git a/sites/vantagetv.ee/readme.md b/sites/vantagetv.ee/readme.md
new file mode 100644
index 000000000..b7c4b118a
--- /dev/null
+++ b/sites/vantagetv.ee/readme.md
@@ -0,0 +1,15 @@
+# vantagetv.ee
+
+https://vantagetv.ee/epg.xml
+
+### Download the guide
+
+```sh
+npm run grab --- --site=vantagetv.ee
+```
+
+### Test
+
+```sh
+npm test --- vantagetv.ee
+```
diff --git a/sites/vantagetv.ee/vantagetv.ee.channels.xml b/sites/vantagetv.ee/vantagetv.ee.channels.xml
new file mode 100644
index 000000000..609cc8ca2
--- /dev/null
+++ b/sites/vantagetv.ee/vantagetv.ee.channels.xml
@@ -0,0 +1,6 @@
+
+
+ Vantage Music
+ Vantage Dance
+ Vantage Rock
+
\ No newline at end of file
diff --git a/sites/vantagetv.ee/vantagetv.ee.config.js b/sites/vantagetv.ee/vantagetv.ee.config.js
new file mode 100644
index 000000000..9cd489f43
--- /dev/null
+++ b/sites/vantagetv.ee/vantagetv.ee.config.js
@@ -0,0 +1,27 @@
+const parser = require('epg-parser')
+
+module.exports = {
+ site: 'vantagetv.ee',
+ days: 2,
+ url: 'http://vantagetv.ee/epg.xml',
+ parser: function ({ content, channel, date }) {
+ let programs = []
+ const items = parseItems(content, channel, date)
+ items.forEach(item => {
+ programs.push({
+ title: item.title?.[0]?.value,
+ description: item.desc?.[0]?.value,
+ start: item.start,
+ stop: item.stop
+ })
+ })
+
+ return programs
+ }
+}
+
+function parseItems(content, channel, date) {
+ const { programs } = parser.parse(content)
+
+ return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day'))
+}
diff --git a/sites/vantagetv.ee/vantagetv.ee.test.js b/sites/vantagetv.ee/vantagetv.ee.test.js
new file mode 100644
index 000000000..5db1dd3a9
--- /dev/null
+++ b/sites/vantagetv.ee/vantagetv.ee.test.js
@@ -0,0 +1,41 @@
+const { parser, url } = require('./vantagetv.ee.config.js')
+const fs = require('fs')
+const path = require('path')
+const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+const customParseFormat = require('dayjs/plugin/customParseFormat')
+dayjs.extend(customParseFormat)
+dayjs.extend(utc)
+
+const date = dayjs.utc('2026-02-05', 'YYYY-MM-DD').startOf('d')
+const channel = { site_id: 'vrock' }
+
+it('can generate valid url', () => {
+ expect(url).toBe('http://vantagetv.ee/epg.xml')
+})
+
+it('can parse response', () => {
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml'))
+
+ const results = parser({ content, channel, date })
+
+ expect(results.length).toBe(3)
+ expect(results[0]).toMatchObject({
+ title: 'Breakfast with Vantage Rock',
+ description: 'Get ready for your day with Vantage Rock',
+ start: '2026-02-05T04:00:00.000Z',
+ stop: '2026-02-05T08:00:00.000Z'
+ })
+ expect(results[2]).toMatchObject({
+ title: 'Rock All Night',
+ description: 'It might be late, but that's no reason to stop!',
+ start: '2026-02-05T22:00:00.000Z',
+ stop: '2026-02-06T04:00:00.000Z'
+ })
+})
+
+it('can handle empty guide', () => {
+ const results = parser({ content: '' })
+
+ expect(results).toMatchObject([])
+})
diff --git a/sites/vodafone.pt/vodafone.pt.channels.xml b/sites/vodafone.pt/vodafone.pt.channels.xml
index 7f2c332d8..092a70ba8 100644
--- a/sites/vodafone.pt/vodafone.pt.channels.xml
+++ b/sites/vodafone.pt/vodafone.pt.channels.xml
@@ -33,7 +33,6 @@
24h
CNBC
TPA
- MTV 00s
Pro TV International
Bloomberg
Mezzo
@@ -146,5 +145,5 @@
BabyTV
História
W-Sport
- Conta Lá
+ Conta Lá