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] 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' + } }) })