From 57a82236f5a3e527a24a0121b9b4dd1b4fe1515d Mon Sep 17 00:00:00 2001 From: CyberPoison <60718477+CyberPoison@users.noreply.github.com> Date: Fri, 23 Jan 2026 18:28:27 +0100 Subject: [PATCH 1/2] Update Init --- sites/meo.pt/__data__/content.json | 27 ++++- sites/meo.pt/meo.pt.config.js | 155 ++++++++++------------------- sites/meo.pt/meo.pt.test.js | 35 +++---- 3 files changed, 94 insertions(+), 123 deletions(-) diff --git a/sites/meo.pt/__data__/content.json b/sites/meo.pt/__data__/content.json index 66e68008..7dd23d0f 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.config.js b/sites/meo.pt/meo.pt.config.js index e5c9f2b0..82d5f1cf 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 d86e9d2d..26b5ce0f 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' + } }) }) From 4434f6f5a370927d913b0ba704b28e8f418acc76 Mon Sep 17 00:00:00 2001 From: CyberPoison <60718477+CyberPoison@users.noreply.github.com> Date: Sat, 24 Jan 2026 03:31:40 +0100 Subject: [PATCH 2/2] Update Init --- sites/nostv.pt/__data__/data.json | 68 ++++++++++++++++++++++++++++++- sites/nostv.pt/nostv.pt.config.js | 37 ++++++++++------- sites/nostv.pt/nostv.pt.test.js | 19 ++++----- 3 files changed, 98 insertions(+), 26 deletions(-) diff --git a/sites/nostv.pt/__data__/data.json b/sites/nostv.pt/__data__/data.json index 205e5797..6725777c 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.config.js b/sites/nostv.pt/nostv.pt.config.js index ffeb7a6e..88db91de 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 939b8aad..e20132c2 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' }) })