diff --git a/SITES.md b/SITES.md index 2958e4a2..bacb1e84 100644 --- a/SITES.md +++ b/SITES.md @@ -92,7 +92,7 @@ | [mytvsuper.com](sites/mytvsuper.com) | 🟢 | | | [nhk.or.jp](sites/nhk.or.jp) | 🟢 | | | [nhkworldpremium.com](sites/nhkworldpremium.com) | 🟢 | | -| [nos.pt](sites/nos.pt) | 🔴 | https://github.com/iptv-org/epg/issues/2183 | +| [nostv.pt](sites/nostv.pt) | 🟢 | | | [novacyprus.com](sites/novacyprus.com) | 🟢 | | | [novasports.gr](sites/novasports.gr) | 🟢 | | | [nowplayer.now.com](sites/nowplayer.now.com) | 🔴 | https://github.com/iptv-org/epg/issues/2247 | diff --git a/sites/nos.pt/__data__/content.html b/sites/nos.pt/__data__/content.html deleted file mode 100644 index d24bcf41..00000000 --- a/sites/nos.pt/__data__/content.html +++ /dev/null @@ -1,4224 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pesquisa por canal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - -
- - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - diff --git a/sites/nos.pt/__data__/no_content.html b/sites/nos.pt/__data__/no_content.html deleted file mode 100644 index 63607bce..00000000 --- a/sites/nos.pt/__data__/no_content.html +++ /dev/null @@ -1,2988 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pesquisa por canal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - diff --git a/sites/nos.pt/__data__/program_0.json b/sites/nos.pt/__data__/program_0.json deleted file mode 100644 index 089070ee..00000000 --- a/sites/nos.pt/__data__/program_0.json +++ /dev/null @@ -1 +0,0 @@ -{"d":"Anatomia de Grey T.17 Ep.3_#|$_Os médicos do Grey Sloan continuam a enfrentar a nova realidade do COVID-19 e lidam com um paciente conhecido e teimoso. Koracick fica encarregue dos internos e Link opera um terapeuta sexual._#|$_b6fd27f4bd0b404abd4c3fc4faa79024_resized_352x198.jpg_#|$_undefined_#|$_undefined_#|$_RTP 1_#|$_2023-01-27T23:50:00+00:00_#|$_2023-01-28T00:36:00+00:00_#|$_false"} \ No newline at end of file diff --git a/sites/nos.pt/__data__/program_21.json b/sites/nos.pt/__data__/program_21.json deleted file mode 100644 index 06584a0e..00000000 --- a/sites/nos.pt/__data__/program_21.json +++ /dev/null @@ -1 +0,0 @@ -{"d":"MasterChef Portugal T.1 Ep.10_#|$_A maior competição de cozinha do mundo arranca ao comando de três dos mais conceituados chefs portugueses: Pedro Pena Bastos, Noélia Jerónimo e Ricardo Costa, que nos vão transmitir os seus conhecimentos e a sua paixão pela cozinha._#|$_8aa511d697f0401a88a0cb1ec2718cc3_resized_352x198.jpg_#|$_undefined_#|$_undefined_#|$_RTP 1_#|$_2023-01-28T21:38:00+00:00_#|$_2023-01-29T00:05:00+00:00_#|$_false"} \ No newline at end of file diff --git a/sites/nos.pt/nos.pt.channels.xml b/sites/nos.pt/nos.pt.channels.xml deleted file mode 100644 index 6a63fd55..00000000 --- a/sites/nos.pt/nos.pt.channels.xml +++ /dev/null @@ -1,207 +0,0 @@ - - - Eurosport 1 - Record TV - RTP Açores - Al Jazeera - PFC - BNT World - Eurosport 2 - Caça e Pesca - E! Entertainment - RTP 1 HD - Canção Nova - MAX - SET Asia - Eurosport 1 HD - AXN HD - AXN White - TVE 24h - FOX HD - FOX Life HD - Toros TV HD - ACOLH - Syfy HD - E! Entertainment HD - HOT HD - TLC - BTV1 HD - BTV1 - CNN - RTP África - TeleSUR - STV Notícias - Canal de Teste - Record TV HD - Penthouse HD1 - Sky News - Ativação NOS - RTL - ARTE - AMC HD - SPORT TV+ HD - SIC HD - SIC Notícias HD - CMTV HD - Globo HD - Sport TV NBA - FTV HD - ARD - VIVA Germany - DSF - AMC Break HD - FTV - Rai Italia - SIC K HD - RTP 2 HD - TVI HD - RTP 3 HD - Eurosport 2 HD - Canal 11 HD - Zee TV - AzoresTV by VITEC – TESTE - Canal 180 - Canal Galeria - RTP Açores HD - Canal Galeria - RTP Memória - Em Destaque - Unifé TV - Playboy HD - Travel Channel HD - AXN White HD - AMC Break - 1+1 - 24Kitchen HD - 3SAT - Afro Music Channel - AMC Crime - AMC - ARTV - AXN Movies - AXN - Baby TV - Biggs - Bloomberg - BVN - Canal 11 HD - Canal Hollywood - Canal NOS HD - Canal Panda - Canal Q - Cartoon Network HD - Casa e Cozinha HD - CCTV 4 - CGTN - CMTV - CNBC - CNN Portugal - Cubavisión Internacional - Discovery Channel - Disney Channel HD - Disney Junior - DOGTV - DW (Alemão) - DW - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - Euronews - Fight Network HD - Food Network HD - FOX Comedy - FOX Crime - FOX Life - FOX Movies - FOX - France 24 (I) - France 24 (F) - Fuel TV - TV Galicia - Globo Now HD - Globo - Canal História - Horse TV - HOT Man - HOT Taboo - HOT - ID Investigation Discovery - KBS World HD - KiKa - Kuriakos TV - Localvisão TV HD - M6 - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - Motorvision HD - MTV 00s - MTV Live - MTV Portugal - MyZen TV - National Geographic - National Geographic WILD - Nautical Channel - NHK World TV - Nickelodeon - Nickelodeon Ukraine Pluto TV - Nick Jr. - NOS Studios - Odisseia - Panda KIDS - Phoenix CNE - Phoenix Infonews - Porto Canal - ProSieben - Record News - Russia Today - RTP 1 - RTP 2 - RTP 3 - RTP Madeira - RTP Memória - RTR Planeta - SAT 1 - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - S+ HD - Sporting TV - SPORT TV1 - SPORT TV2 - SPORT TV3 - SPORT TV4 - SPORT TV5 - Sport TV 6 HD - SPORT TV+ - Stingray iConcerts HD - Super RTL - SYFY - TCV Internacional - TPA Internacional - Trace Toca - Trace Urban HD - Travel Channel - TV5 Monde - TVCine ACTION - TVCine EDITION - TVCine EMOTION - TVCine TOP - TVEi - TVI - TVI Ficção HD - TVI Reality - TVR Internacional - Venus - ZAP Viva HD - ZDF - ZDF Neo - diff --git a/sites/nos.pt/nos.pt.config.js b/sites/nos.pt/nos.pt.config.js deleted file mode 100644 index 14a5a902..00000000 --- a/sites/nos.pt/nos.pt.config.js +++ /dev/null @@ -1,114 +0,0 @@ -const axios = require('axios') -const cheerio = require('cheerio') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'nos.pt', - days: 2, - url({ channel }) { - return `https://www.nos.pt/particulares/televisao/guia-tv/Pages/channel.aspx?channel=${channel.site_id}` - }, - async parser({ content, date }) { - const programs = [] - const items = parseItems(content, date) - date = date.subtract(1, 'd') - for (let item of items) { - const $item = cheerio.load(item) - - const channelAcronym = parseChannelAcronym(content) - const programId = parseProgramId($item) - const details = await loadProgramDetails(channelAcronym, programId) - - programs.push({ - title: details.title, - description: details.description, - icon: parseIcon(details), - start: dayjs(details.start), - stop: dayjs(details.stop) - }) - } - - return programs - }, - async channels() { - const html = await axios - .get('https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx') - .then(r => r.data) - .catch(console.log) - - const $ = cheerio.load(html) - const items = $('#guide-filters > dl.dropdown-ord > dd > ul > li').toArray() - - return items.map(item => { - const $item = cheerio.load(item) - - return { - lang: 'pt', - site_id: $item('.value').text().trim(), - name: $item('a').clone().children().remove().end().text().trim() - } - }) - } -} - -async function loadProgramDetails(channelAcronym, programId) { - if (!channelAcronym || !programId) return {} - const data = await axios - .post( - 'https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails', - { - programId, - channelAcronym, - hour: 'undefined', - startHour: 'undefined', - endHour: 'undefined' - }, - { - headers: { - 'content-type': 'application/json; charset=UTF-8' - } - } - ) - .then(r => r.data) - .catch(console.log) - - if (!data) return {} - - const [title, description, image, , , , start, stop] = data.d.split('_#|$_') - - return { - title, - description, - image, - start, - stop - } -} - -function parseIcon(details) { - return details.image ? `https://images.nos.pt/${details.image}` : null -} - -function parseProgramId($item) { - return $item('a').attr('id') -} - -function parseChannelAcronym(content) { - const $ = cheerio.load(content) - - return $('#channel-logo > img').attr('alt') -} - -function parseItems(content, date) { - const day = date.date() - const $ = cheerio.load(content) - - return $(`#day${day} > ul > li`).toArray() -} diff --git a/sites/nos.pt/nos.pt.test.js b/sites/nos.pt/nos.pt.test.js deleted file mode 100644 index c5f7d7c4..00000000 --- a/sites/nos.pt/nos.pt.test.js +++ /dev/null @@ -1,97 +0,0 @@ -const { parser, url } = require('./nos.pt.config.js') -const fs = require('fs') -const path = require('path') -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -jest.mock('axios') - -const date = dayjs.utc('2023-01-28', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '5', - xmltv_id: 'RTP1.pt' -} - -it('can generate valid url', () => { - expect(url({ channel })).toBe( - 'https://www.nos.pt/particulares/televisao/guia-tv/Pages/channel.aspx?channel=5' - ) -}) - -it('can parse response', async () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8') - - axios.post.mockImplementation((url, data) => { - if ( - url === - 'https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails' && - JSON.stringify(data) === - JSON.stringify({ - programId: '81361', - channelAcronym: 'RTP1', - hour: 'undefined', - startHour: 'undefined', - endHour: 'undefined' - }) - ) { - return Promise.resolve({ - data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program_0.json'))) - }) - } else if ( - url === - 'https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails' && - JSON.stringify(data) === - JSON.stringify({ - programId: '81382', - channelAcronym: 'RTP1', - hour: 'undefined', - startHour: 'undefined', - endHour: 'undefined' - }) - ) { - return Promise.resolve({ - data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program_21.json'))) - }) - } else { - return Promise.resolve({ data: '' }) - } - }) - - let results = await parser({ content, date }) - results = results.map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results[0]).toMatchObject({ - start: '2023-01-27T23:50:00.000Z', - stop: '2023-01-28T00:36:00.000Z', - title: 'Anatomia de Grey T.17 Ep.3', - description: - 'Os médicos do Grey Sloan continuam a enfrentar a nova realidade do COVID-19 e lidam com um paciente conhecido e teimoso. Koracick fica encarregue dos internos e Link opera um terapeuta sexual.', - icon: 'https://images.nos.pt/b6fd27f4bd0b404abd4c3fc4faa79024_resized_352x198.jpg' - }) - - expect(results[21]).toMatchObject({ - start: '2023-01-28T21:38:00.000Z', - stop: '2023-01-29T00:05:00.000Z', - title: 'MasterChef Portugal T.1 Ep.10', - description: - 'A maior competição de cozinha do mundo arranca ao comando de três dos mais conceituados chefs portugueses: Pedro Pena Bastos, Noélia Jerónimo e Ricardo Costa, que nos vão transmitir os seus conhecimentos e a sua paixão pela cozinha.', - icon: 'https://images.nos.pt/8aa511d697f0401a88a0cb1ec2718cc3_resized_352x198.jpg' - }) -}) - -it('can handle empty guide', async () => { - const results = await parser({ - date, - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'), 'utf8') - }) - - expect(results).toMatchObject([]) -}) diff --git a/sites/nos.pt/readme.md b/sites/nos.pt/readme.md deleted file mode 100644 index 81f3490a..00000000 --- a/sites/nos.pt/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# nos.pt - -https://nostv.pt/guia/ - -### Download the guide - -```sh -npm run grab -- --site=nos.pt -``` - -### Update channel list - -```sh -npm run channels:parse -- --config=./sites/nos.pt/nos.pt.config.js --output=./sites/nos.pt/nos.pt.channels.xml -``` - -### Test - -```sh -npm test -- nos.pt -``` diff --git a/sites/nostv.pt/__data__/data.json b/sites/nostv.pt/__data__/data.json new file mode 100644 index 00000000..205e5797 --- /dev/null +++ b/sites/nostv.pt/__data__/data.json @@ -0,0 +1 @@ +[{"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 diff --git a/sites/nostv.pt/nostv.pt.channels.xml b/sites/nostv.pt/nostv.pt.channels.xml new file mode 100644 index 00000000..3ecd3fd0 --- /dev/null +++ b/sites/nostv.pt/nostv.pt.channels.xml @@ -0,0 +1,171 @@ + + + Rai Italia + Canal 180 + BNT World + Caça e Pesca + TPA Notícias + TVE 24h + BTV1 HD + STV Notícias + Sport TV NBA + Canal Galeria + ELEVEN EXTRA 1 + ELEVEN EXTRA 2 + ELEVEN EXTRA 3 + ELEVEN EXTRA 4 + Unifé TV + OneToro TV + New Brasil + Dizi + 1+1 + 24Kitchen HD + Afro Music Channel + Al Jazeera + AMC HD + AMC Break HD + AMC Crime + AMC Crime HD + ARTE + ARTV + AXN HD + AXN Movies HD + AXN White HD + Baby TV + Biggs + Bloomberg + BVN + Canal 11 HD + Canal Hollywood HD + Canal NOS HD + Canal Panda HD + Canal Q + Cartoon Network HD + Casa e Cozinha HD + CCTV 4 + CGTN + CMTV HD + CNBC + CNN + CNN Portugal HD + Cubavisión Internacional + Discovery Channel + Discovery HD + Disney Channel HD + Disney Junior HD + DOGTV + DW (Alemão) + DW + E! Entertainment HD + ELEVEN SPORTS 1 + ELEVEN SPORTS 2 + ELEVEN SPORTS 3 + ELEVEN SPORTS 4 + ELEVEN SPORTS 5 + ELEVEN SPORTS 6 + Euronews + Eurosport 1 HD + Eurosport 2 + Eurosport 2 HD + FTV + FTV HD + Fight Network HD + Food Network HD + FOX HD + FOX Comedy HD + FOX Crime + FOX Crime HD + FOX Life HD + FOX Movies + FOX Movies HD + France 24 (I) + France 24 (F) + Fuel TV HD + TV Galicia + Globo News + Globo HD + Canal História + Canal História HD + Horse TV + ID Investigation Discovery + KBS World HD + Kuriakos TV + Localvisão TV HD + M6 + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + Motorvision HD + MTV 00s + MTV Portugal HD + MTV Live + MyZen TV + National Geographic HD + National Geographic WILD HD + Nautical Channel + NHK World TV + Nickelodeon + Nick Jr. + NOS Studios HD + ODISSEIA HD + Panda KIDS + PFC + Phoenix CNE + Phoenix Infonews + Porto Canal HD + Record News + Record TV HD + Russia Today + RTL + Super RTL + RTP 1 HD + RTP 2 HD + RTP 3 HD + RTP Açores + RTP África + RTP Madeira + RTP Memória + RTR Planeta + SIC HD + SIC Caras HD + SIC K HD + SIC Mulher HD + SIC Notícias HD + SIC Radical HD + Sky News + SET Asia + MAX + S+ HD + Sporting TV HD + SPORT TV1 HD + SPORT TV2 HD + SPORT TV3 HD + SPORT TV4 HD + SPORT TV5 HD + Sport TV 6 HD + SPORT TV+ HD + Stingray iConcerts HD + Syfy HD + TCV Internacional + TeleSUR + TLC + Trace Toca + Trace Urban HD + Travel Channel + Travel Channel HD + TV5 Monde + Canção Nova + TVCine ACTION HD + TVCine EDITION HD + TVCine EMOTION HD + TVCine TOP HD + TVEi + TVI HD + TVI Ficção HD + TVI Reality HD + TVR Internacional + W-Sport + ZAP Viva HD + Zee TV + diff --git a/sites/nostv.pt/nostv.pt.config.js b/sites/nostv.pt/nostv.pt.config.js new file mode 100644 index 00000000..0f829594 --- /dev/null +++ b/sites/nostv.pt/nostv.pt.config.js @@ -0,0 +1,60 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const headers = { + 'X-Apikey': 'xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI', + 'X-Core-Appversion': '2.14.0.1', + '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' +} + +module.exports = { + site: 'nostv.pt', + days: 2, + url({ channel, date }) { + return `https://tyr-prod.apigee.net/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 }) { + const programs = [] + if (content) { + const items = Array.isArray(content) ? content : JSON.parse(content) + items.forEach(item => { + programs.push({ + title: item.Metadata?.Title, + sub_title: item.Metadata?.SubTitle ? item.Metadata?.SubTitle : null, + description: item.Metadata?.Description, + season: item.Metadata?.Season, + episode: item.Metadata?.Episode, + icon: item.Images ? + `https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['X-Apikey']}` : + null, + start: dayjs.utc(item.UtcDateTimeStart), + stop: dayjs.utc(item.UtcDateTimeEnd) + }) + }) + } + + return programs + }, + async channels() { + const result = await axios + .get(`https://tyr-prod.apigee.net/nostv/ott/channels/guest?client_id=${headers['X-Apikey']}`, { headers }) + .then(r => r.data) + .catch(console.error) + + return result.map(item => { + return { + lang: 'pt', + site_id: item.ServiceId, + name: item.Name + } + }) + } +} diff --git a/sites/nostv.pt/nostv.pt.test.js b/sites/nostv.pt/nostv.pt.test.js new file mode 100644 index 00000000..76259a56 --- /dev/null +++ b/sites/nostv.pt/nostv.pt.test.js @@ -0,0 +1,51 @@ +const { parser, url } = require('./nostv.pt.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('2023-12-11').startOf('d') +const channel = { + site_id: '510', + xmltv_id: 'SPlus.pt' +} + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe( + 'https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=510&minDate=2023-12-11T00:00:00Z&maxDate=2023-12-11T23:59:59Z&isDateInclusive=true&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI' + ) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) + const results = parser({ content }) + .map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + 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, + icon: 'https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI' + }) +}) + +it('can handle empty guide', async () => { + const results = await parser({ + date, + content: '[]' + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/nostv.pt/readme.md b/sites/nostv.pt/readme.md new file mode 100644 index 00000000..d3f21b7d --- /dev/null +++ b/sites/nostv.pt/readme.md @@ -0,0 +1,21 @@ +# nostv.pt + +https://nostv.pt/guia/ + +### Download the guide + +```sh +npm run grab -- --site=nostv.pt +``` + +### Update channel list + +```sh +npm run channels:parse -- --config=./sites/nostv.pt/nostv.pt.config.js --output=./sites/nostv.pt/nostv.pt.channels.xml +``` + +### Test + +```sh +npm test -- nostv.pt +```