diff --git a/sites/zap.co.ao/__data__/content.json b/sites/zap.co.ao/__data__/content.json
new file mode 100644
index 00000000..d672bdc7
--- /dev/null
+++ b/sites/zap.co.ao/__data__/content.json
@@ -0,0 +1 @@
+{"message":"","data":[{"eventId":"227547866","updated":1685255886,"utcBeginDate":1685228400,"utcEndDate":1685232000,"duration":60,"pictureUrl":"/public/img/epg/7d46a5aa093c4cffbbef7bf97b8c537e_resized_352x198.jpg","pictureId":"7d46a5aa093c4cffbbef7bf97b8c537e","episode":null,"season":null,"programDescription":"Um jornal diferente do Telejornal, por conter análise, comentários e coluna com jornalistas experientes sobre factos do dia a dia.","programName":"Jornal da Meia-Noite","date":"20230528","categoryName":"Noticiário","categoryId":"1798","channelName":"","channelId":"2275"},{"eventId":"227548086","updated":1685255887,"utcBeginDate":1685232000,"utcEndDate":1685237400,"duration":90,"pictureUrl":"/public/img/epg/f7fd5c385d854c96a2c5be239643a06b_resized_352x198.jpg","pictureId":"f7fd5c385d854c96a2c5be239643a06b","episode":null,"season":null,"programDescription":"Dirk Pitt é um explorador destemido que embarca na aventura da sua vida ao aceitar entrar numa caça ao tesouro no coração da mais selvagem região de África. Procuram o chamado \"Navio da Morte\", naufragado durante a Guerra Civil Americana e que trazia a bordo uma carga secreta.","programName":"Sahara","date":"20230528","categoryName":"Ação","categoryId":"257","channelName":"","channelId":"2275"},{"eventId":"227548087","updated":1685255887,"utcBeginDate":1685237400,"utcEndDate":1685246400,"duration":150,"pictureUrl":"/public/img/epg/1ce11e63cfb041c785bc7ec612b00566_resized_352x198.jpg","pictureId":"1ce11e63cfb041c785bc7ec612b00566","episode":null,"season":null,"programDescription":"Programa de puro entretenimento ao sábado à tarde em directo. Entrevistas descontraídas com músicos, artistas, VIPS e outras. O objectivo principal é proporcionar diversão com sentido para toda família.","programName":"Finalmente Sábado","date":"20230528","categoryName":"Humor","categoryId":"1551","channelName":"","channelId":"2275"},{"eventId":"227548088","updated":1685255885,"utcBeginDate":1685246400,"utcEndDate":1685248200,"duration":30,"pictureUrl":"/public/img/epg/6203ba1c5d1b4f3083a51ddbd87dc7f5_resized_352x198.jpg","pictureId":"6203ba1c5d1b4f3083a51ddbd87dc7f5","episode":null,"season":null,"programDescription":"Ecrã, é um programa televisivo de entretenimento com uma abordagem cinematográfica, que tem como principal objectivo mostrar aos telespectadores estreias cinematográficas e entrevistas aos protagonistas das produções nacionais e internacionais.","programName":"Ecrã","date":"20230528","categoryName":"Magazine cultural","categoryId":"1559","channelName":"","channelId":"2275"},{"eventId":"227548089","updated":1685255885,"utcBeginDate":1685248200,"utcEndDate":1685250000,"duration":30,"pictureUrl":"/public/img/epg/f4f021237cbb40f3ba22418d2b5c9e6f_resized_352x198.jpg","pictureId":"f4f021237cbb40f3ba22418d2b5c9e6f","episode":null,"season":null,"programDescription":"Este programa visa estimular e incutir ao cidadão a prática dos exercícios físicos. Fique em nossa companhia todas as manhãs ao raiar do sol, e participe da ginástica que dar-lhe-á boa disposição para que o seu dia corra de forma saudável e agradável.","programName":"Ginástica Mais Vida","date":"20230528","categoryName":"Entretenimento","categoryId":"1550","channelName":"","channelId":"2275"},{"eventId":"227548090","updated":1685255886,"utcBeginDate":1685250000,"utcEndDate":1685253600,"duration":60,"pictureUrl":"/public/img/epg/a38af80586af45368a8fc2f244dbe915_resized_352x198.jpg","pictureId":"a38af80586af45368a8fc2f244dbe915","episode":null,"season":null,"programDescription":"Aborda diversos acontecimentos relevantes no mundo.","programName":"Mwangolé Pelo Mundo","date":"20230528","categoryName":"Cultura","categoryId":"1571","channelName":"","channelId":"2275"},{"eventId":"227548091","updated":1685255886,"utcBeginDate":1685253600,"utcEndDate":1685257200,"duration":60,"pictureUrl":"/public/img/epg/6b1c0b982a374cb9b307128e5617efa0_resized_352x198.jpg","pictureId":"6b1c0b982a374cb9b307128e5617efa0","episode":null,"season":null,"programDescription":"Programa sobre música gospel.","programName":"Acreditar 100% Gospel","date":"20230528","categoryName":"Música ","categoryId":"1549","channelName":"","channelId":"2275"},{"eventId":"227548092","updated":1685255887,"utcBeginDate":1685257200,"utcEndDate":1685262600,"duration":90,"pictureUrl":"/public/img/epg/a75bf5767eb549fe86a281c4d7e3acd4_resized_352x198.jpg","pictureId":"a75bf5767eb549fe86a281c4d7e3acd4","episode":null,"season":null,"programDescription":"Programa religioso da igreja Católica emitido aos domingos.","programName":"Missa Dominical","date":"20230528","categoryName":"Religião","categoryId":"1540","channelName":"","channelId":"2275"},{"eventId":"227548093","updated":1685255885,"utcBeginDate":1685262600,"utcEndDate":1685264400,"duration":30,"pictureUrl":"/public/img/epg/f5a14e2135854166a3869db7b466ffac_resized_352x198.jpg","pictureId":"f5a14e2135854166a3869db7b466ffac","episode":null,"season":null,"programDescription":"Tudo que se passa por trás das câmaras.","programName":"Bastidores","date":"20230528","categoryName":"Magazine","categoryId":"1542","channelName":"","channelId":"2275"},{"eventId":"227548094","updated":1685255886,"utcBeginDate":1685264400,"utcEndDate":1685268000,"duration":60,"pictureUrl":"/public/img/epg/416651c976d4493487c2e87c40a8f46a_resized_352x198.jpg","pictureId":"416651c976d4493487c2e87c40a8f46a","episode":null,"season":null,"programDescription":"Programa infantil com muita diversão.","programName":"Carrossel","date":"20230528","categoryName":"Didático","categoryId":"778","channelName":"","channelId":"2275"},{"eventId":"227548095","updated":1685255885,"utcBeginDate":1685268000,"utcEndDate":1685269800,"duration":30,"pictureUrl":"/public/img/epg/f4f021237cbb40f3ba22418d2b5c9e6f_resized_352x198.jpg","pictureId":"f4f021237cbb40f3ba22418d2b5c9e6f","episode":null,"season":null,"programDescription":"Programa quinzenal de trinta minutos sobre o empreendedorismo no meio rural, o papel da iniciativa privada do desenvolvimento comunitário, o agro negócio e as trocas comerciais entre o campo e a promoção da cultura das ricas tradições das comunidades rurais.","programName":"País Rural","date":"20230528","categoryName":"Economia","categoryId":"1793","channelName":"","channelId":"2275"},{"eventId":"227548096","updated":1685255885,"utcBeginDate":1685269800,"utcEndDate":1685271600,"duration":30,"pictureUrl":"/public/img/epg/16c3254a296f41a9b8ad714627d40947_resized_352x198.jpg","pictureId":"16c3254a296f41a9b8ad714627d40947","episode":null,"season":null,"programDescription":"Cada região de Angola possui as suas particularidades próprias inerentes às suas origens e a TPA procura levar ao público as especificidades de cada povo.","programName":"Mwanza","date":"20230528","categoryName":"Magazine de informação","categoryId":"1800","channelName":"","channelId":"2275"},{"eventId":"227548097","updated":1685255886,"utcBeginDate":1685271600,"utcEndDate":1685275200,"duration":60,"pictureUrl":"/public/img/epg/7e9569c5708742b39476f5bffafac33c_resized_352x198.jpg","pictureId":"7e9569c5708742b39476f5bffafac33c","episode":null,"season":null,"programDescription":"A alternativa que o canal público oferece aos seus compatriotas, informando nas mais variadas linguas que contituem o mosaico cultural de Angola.","programName":"Noticiário em Línguas Nacionais","date":"20230528","categoryName":"Noticiário","categoryId":"1798","channelName":"","channelId":"2275"},{"eventId":"227548098","updated":1685255886,"utcBeginDate":1685275200,"utcEndDate":1685278800,"duration":60,"pictureUrl":"/public/img/epg/3679a9917f974886b6a51b59dbbb82be_resized_352x198.jpg","pictureId":"3679a9917f974886b6a51b59dbbb82be","episode":null,"season":null,"programDescription":"Serviços de notícias da cadeia informativa da TPA. Aborda a actualidade nacional e internacional nos domínios político, económico, social, cultural e desportivo.","programName":"Jornal da Tarde","date":"20230528","categoryName":"Noticiário","categoryId":"1798","channelName":"","channelId":"2275"},{"eventId":"227548099","updated":1685255885,"utcBeginDate":1685278800,"utcEndDate":1685280600,"duration":30,"pictureUrl":"/public/img/epg/ff3d10892a3f49cb9e93d221eb45f39c_resized_352x198.jpg","pictureId":"ff3d10892a3f49cb9e93d221eb45f39c","episode":null,"season":null,"programDescription":"Um micro -programa de noticias sobre tecnologias de informação e ciência, num mundo cada vez mais digital. O informativo prevê ,inclusive, o comentário de um especialista na área. A ideia é mostrar em reportagem com a tecnologia é aprimorar para facilitar a vida em sociedade.","programName":"TPA Ciência","date":"20230528","categoryName":"Noticiário","categoryId":"1798","channelName":"","channelId":"2275"},{"eventId":"227548100","updated":1685255885,"utcBeginDate":1685280600,"utcEndDate":1685282400,"duration":30,"pictureUrl":"/public/img/epg/a443b4771c5f4675afa3ae5858727c56_resized_352x198.jpg","pictureId":"a443b4771c5f4675afa3ae5858727c56","episode":null,"season":null,"programDescription":"Pratos confecionados com produtos locais, diretamente na sua mesa.","programName":"Barato e Saudável","date":"20230528","categoryName":"Bem-estar","categoryId":"1575","channelName":"","channelId":"2275"},{"eventId":"227548101","updated":1685255885,"utcBeginDate":1685282400,"utcEndDate":1685284200,"duration":30,"pictureUrl":"/public/img/epg/09d46e52d8f9482491fea710ddc9129d_resized_352x198.jpg","pictureId":"09d46e52d8f9482491fea710ddc9129d","episode":null,"season":null,"programDescription":"Documentário.","programName":"Documentário","date":"20230528","categoryName":"Documentários","categoryId":"1290","channelName":"","channelId":"2275"},{"eventId":"227548102","updated":1685255886,"utcBeginDate":1685284200,"utcEndDate":1685287800,"duration":60,"pictureUrl":"/public/img/epg/a38af80586af45368a8fc2f244dbe915_resized_352x198.jpg","pictureId":"a38af80586af45368a8fc2f244dbe915","episode":null,"season":null,"programDescription":"Magazine cultural mais amplo da televisão angolana. As exposições, os concertos, as tertúlias e os lançamentos de livros têm lugar neste programa. Com duração de 30 minutos, faz um apanhado da agenda cultural de Angola com os principais acontecimentos.","programName":"Arco-Íris","date":"20230528","categoryName":"Magazine cultural","categoryId":"1559","channelName":"","channelId":"2275"},{"eventId":"227548103","updated":1685255885,"utcBeginDate":1685287800,"utcEndDate":1685289600,"duration":30,"pictureUrl":"/public/img/epg/6203ba1c5d1b4f3083a51ddbd87dc7f5_resized_352x198.jpg","pictureId":"6203ba1c5d1b4f3083a51ddbd87dc7f5","episode":null,"season":null,"programDescription":"Ecrã, é um programa televisivo de entretenimento com uma abordagem cinematográfica, que tem como principal objectivo mostrar aos telespectadores estreias cinematográficas e entrevistas aos protagonistas das produções nacionais e internacionais.","programName":"Ecrã","date":"20230528","categoryName":"Magazine cultural","categoryId":"1559","channelName":"","channelId":"2275"},{"eventId":"227548104","updated":1685255886,"utcBeginDate":1685289600,"utcEndDate":1685293200,"duration":60,"pictureUrl":"/public/img/epg/8ac7a42c1e7447dfa122010952b1e64e_resized_352x198.jpg","pictureId":"8ac7a42c1e7447dfa122010952b1e64e","episode":null,"season":null,"programDescription":"É um programa nacional, de 45 m com Analtina. Aborda diversos assuntos.","programName":"45 Minutos Com Analtina Dias","date":"20230528","categoryName":"Talk-Show","categoryId":"1544","channelName":"","channelId":"2275"},{"eventId":"227548105","updated":1685255885,"utcBeginDate":1685293200,"utcEndDate":1685295000,"duration":30,"pictureUrl":"/public/img/epg/f4f021237cbb40f3ba22418d2b5c9e6f_resized_352x198.jpg","pictureId":"f4f021237cbb40f3ba22418d2b5c9e6f","episode":null,"season":null,"programDescription":"Magazine informativo sobre a atualidade do continente africano. O retrato da vida do povo africano em todas as vertentes, seja política, social, económica, cultural e do desporto. Inteire-se sobre os assuntos relacionados com estes povos, as suas tradições os seus hábitos e costumes.","programName":"Jornal África","date":"20230528","categoryName":"Noticiário","categoryId":"1798","channelName":"","channelId":"2275"},{"eventId":"227548106","updated":1685255885,"utcBeginDate":1685295000,"utcEndDate":1685296800,"duration":30,"pictureUrl":"/public/img/epg/6203ba1c5d1b4f3083a51ddbd87dc7f5_resized_352x198.jpg","pictureId":"6203ba1c5d1b4f3083a51ddbd87dc7f5","episode":null,"season":null,"programDescription":"É um programa de entretenimento, que relata todos os acontecimentos de diversão, que ocorrem durante às noites em Angola.","programName":"Nós e a Noite","date":"20230528","categoryName":"Lifestyle","categoryId":"1554","channelName":"","channelId":"2275"},{"eventId":"227548107","updated":1685255885,"utcBeginDate":1685296800,"utcEndDate":1685298600,"duration":30,"pictureUrl":"/public/img/epg/c1d910ef92eb41a9ab9a666a51a69eb1_resized_352x198.jpg","pictureId":"c1d910ef92eb41a9ab9a666a51a69eb1","episode":null,"season":null,"programDescription":"É um conteúdo quinzenal, que vai mostrar tudo sobre as continuidades falantes da língua portuguesa, hábitos, costumes, música, gastronomia, inserção social nos países de migração e entrevista exclusiva, com os Presidentes dos novos membros da CPLP.","programName":"CPLP - Unidos Pela Língua","date":"20230528","categoryName":"Educação","categoryId":"1794","channelName":"","channelId":"2275"},{"eventId":"227548108","updated":1685255885,"utcBeginDate":1685298600,"utcEndDate":1685300400,"duration":30,"pictureUrl":"/public/img/epg/7be5b05d5f4a4c218219e49d9c14a741_resized_352x198.jpg","pictureId":"7be5b05d5f4a4c218219e49d9c14a741","episode":null,"season":null,"programDescription":"Aborda questões relacionadas a pessoas da terceira idade e estrangeiros radicados em angola há mas de 30 anos.","programName":"Geração Gloriosa","date":"20230528","categoryName":"Magazine de informação","categoryId":"1800","channelName":"","channelId":"2275"},{"eventId":"227548109","updated":1685255887,"utcBeginDate":1685300400,"utcEndDate":1685305800,"duration":90,"pictureUrl":"/public/img/epg/a443b4771c5f4675afa3ae5858727c56_resized_352x198.jpg","pictureId":"a443b4771c5f4675afa3ae5858727c56","episode":null,"season":null,"programDescription":"Retrospectiva dos factos mais relevantes que marcam a actualidade nacional e internacional e tem o seu momento mais alto no Jornal De Domingo, onde são abordados os aspectos essenciais desses mesmos factos, eventos e acontecimentos diversos.","programName":"Mais Domingo","date":"20230528","categoryName":"Magazine cultural","categoryId":"1559","channelName":"","channelId":"2275"},{"eventId":"227548110","updated":1685255884,"utcBeginDate":1685305800,"utcEndDate":1685306100,"duration":5,"pictureUrl":"","pictureId":null,"episode":null,"season":null,"programDescription":"Incentivo de carácter educacional para todas as famílias.","programName":"Boa Noite","date":"20230528","categoryName":"Magazine","categoryId":"1542","channelName":"","channelId":"2275"},{"eventId":"227548111","updated":1685255887,"utcBeginDate":1685306100,"utcEndDate":1685313000,"duration":115,"pictureUrl":"","pictureId":null,"episode":null,"season":null,"programDescription":"Programa de actualidade nacional e internacional. Espaço também para entrevista curta e reportagem. Permite interactividade com a participação telefónica dos telespectadores, na abordagem de um tema eleito.","programName":"Domingo Desportivo","date":"20230528","categoryName":"Informação desportiva","categoryId":"1041","channelName":"","channelId":"2275"},{"eventId":"227548112","updated":1685255885,"utcBeginDate":1685313000,"utcEndDate":1685314800,"duration":30,"pictureUrl":"/public/img/epg/ed529677b7a94e04b2824b0743557ff5_resized_352x198.jpg","pictureId":"ed529677b7a94e04b2824b0743557ff5","episode":null,"season":null,"programDescription":"Documentário.","programName":"Documentário","date":"20230528","categoryName":"Documentários","categoryId":"1290","channelName":"","channelId":"2275"}],"standard":true}
\ No newline at end of file
diff --git a/sites/zap.co.ao/zap.co.ao.channels.xml b/sites/zap.co.ao/zap.co.ao.channels.xml
index 5e283ea4..1a1561c0 100644
--- a/sites/zap.co.ao/zap.co.ao.channels.xml
+++ b/sites/zap.co.ao/zap.co.ao.channels.xml
@@ -1,105 +1,118 @@
-
-
-
- 24 Kitchen Portugal
- A Bola TV
- AXN Movies
- AXN Portugal
- Africanews
- Afro Music Channel
- Aljazeera Channel
- Aljazeera English
- BBC World News Africa
- Baby TV Europe
- Band Internacional
- Band News
- Be Kuduro
- Benfica TV
- Biggs
- Blast
- Blaze Portugal
- Bloomberg TV Africa
- CCTV 4 Europe
- CM TV
- Canal Hollywood Portugal
- Canal Panda Portugal
- Canal Programação
- Colors
- Cubavisión Internacional
- Cubayo
- Digital Congo TV
- Disney Channel Portugal
- Disney Junior Portugal
- ESPN 2 Africa
- ESPN Africa
- EuroNews Português
- Extreme Sports Channel
- FightBox HD
- Food Network EMEA
- Fox Comedy Portugal
- Fox Crime Portugal
- Fox Life Portugal
- Fox Movies Portugal
- Fox Portugal
- France 2
- France 3
- France 5
- France 24 Français
- Gametoon
- Globo On
- Gloom Channel
- Gulli Brasil
- Histoire TV
- História Portugal
- Kix
- LCI
- La Liga na Zap
- Luxe TV
- MCM Top
- Motorvision TV
- MyZen Music
- MyZen Nature
- NBA TV
- National Geographic Portugal
- National Geographic Wild South Africa
- Odisseia
- Porto Canal
- RFM TV
- RTNC
- RT News
- RTP África
- RTP Internacional Europa
- RTR Planeta
- Rai Italia Africa
- Rossiya 24
- SIC K
- SIC Mulher
- SIC Radical
- STV Noticias
- Sport TV África 1
- Sporting TV
- Stingray CMusic
- Stingray IConcerts
- TLN Network
- TPA 1
- TVCine Action
- TVCine Edition
- TVCine Emotion
- TVCine Top
- TVE Internacional Europa
- TV Globo Internacional África
- TVI 24
- TVI Ficção
- TVI Internacional
- Télé 50
- Tiji
- Travel Channel Europe
- Ushuaïa TV
- Zap Filmes 1
- Zap Filmes 2
- Zap Filmes 3
- Zap Filmes HD
- Zap Novelas
- Zap Viva
-
-
\ No newline at end of file
+
+
+
+ 24 Kitchen
+ A Bola TV
+ Africa News
+ AfroMusic
+ Aljazeera Arabic
+ Al Jazeera English
+ AXN Movies
+ BABY TV
+ Band News
+ BeKuduro
+ BENFICATV
+ Biggs
+ Black Diamond
+ BomSom TV
+ Canal Hollywood
+ Canal Panda
+ CNN Portugal
+ Colors Cineplex
+ Cubayo
+ Digital Congo
+ Fashion BOX
+ FIGHTBOX
+ Fight Sports
+ FOX Comedy
+ FOX Crime
+ FOX Movies
+ France 2
+ France 24 Fr
+ France 3
+ France 5
+ Gametoon
+ GLOBOON
+ GLOOM
+ Gulli
+ Histoire
+ KIX
+ La Liga HD
+ LCI
+ MCM TOP
+ Motorvision
+ My Music Channel HD
+ Odisseia
+ PandaKids
+ +HITS AFRICA
+ Porto Canal
+ RTP 3
+ RTP África
+ RTP Internacional
+ SIC K
+ SIC Mulher
+ SIC Radical
+ Sporting TV
+ SportTV África HD
+ Stingray iConcerts HD
+ STV Noticias HD
+ TELE 50
+ Tiji
+ TPA 1
+ TPA 2
+ Trace Brazuca
+ TVCine ACTION HD
+ TVCine EDITION HD
+ TVCine EMOTION HD
+ TVCine TOP HD
+ TV Zimbo HD
+ Ushuaia TV
+ W-Sport
+ ZAP Novelas HD
+ ZAP Viva
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sites/zap.co.ao/zap.co.ao.config.js b/sites/zap.co.ao/zap.co.ao.config.js
index 3495e574..7134c0ee 100644
--- a/sites/zap.co.ao/zap.co.ao.config.js
+++ b/sites/zap.co.ao/zap.co.ao.config.js
@@ -1,53 +1,49 @@
-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)
+const { DateTime } = require('luxon')
+const axios = require('axios')
module.exports = {
- skip: true, // NOTE: Connection timeout
site: 'zap.co.ao',
days: 2,
+ maxConnections: 200,
url: function ({ date, channel }) {
- return `https://www.zap.co.ao/_api/channels/${date.format('YYYY-M-D')}/epg.json`
+ return `https://zapon.zapsi.net/ao/m/api/epg/events?date=${date.format('YYYYMMDD')}&channel=${
+ channel.site_id
+ }`
},
- parser: function ({ content, channel, date }) {
+ parser: function ({ content }) {
const programs = []
- const items = parseItems(content, channel)
+ const items = parseItems(content)
if (!items.length) return programs
items.forEach(item => {
- const prev = programs[programs.length - 1]
- let start = parseStart(item, date)
- if (prev && start.isBefore(prev.start)) {
- start = start.add(1, 'd')
- date = date.add(1, 'd')
- }
- const stop = start.add(item.duration, 's')
programs.push({
- title: item.name,
- description: item.sinopse,
- start,
- stop
+ title: item.programName,
+ description: item.programDescription,
+ category: item.categoryName,
+ start: DateTime.fromSeconds(item.utcBeginDate).toUTC(),
+ stop: DateTime.fromSeconds(item.utcEndDate).toUTC()
})
})
return programs
+ },
+ async channels() {
+ const channels = await axios
+ .get(`https://zapon.zapsi.net/ao/m/api/epg/channels`)
+ .then(r => r.data.data)
+ .catch(console.log)
+
+ return channels.map(item => {
+ return {
+ lang: 'pt',
+ site_id: item.id,
+ name: item.name
+ }
+ })
}
}
-function parseItems(content, channel) {
- const channels = JSON.parse(content)
- const data = channels.find(ch => ch.id == channel.site_id)
+function parseItems(content) {
+ const data = JSON.parse(content)
- return data ? data.epg : []
-}
-
-function parseStart(item, date) {
- const [hours, minutes] = item.start_time.split('h')
- const dateString = `${date.format('YYYY-MM-DD')} ${hours}:${minutes}`
-
- return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Africa/Luanda')
+ return data.data || []
}
diff --git a/sites/zap.co.ao/zap.co.ao.test.js b/sites/zap.co.ao/zap.co.ao.test.js
index 4aafc586..c7f94b90 100644
--- a/sites/zap.co.ao/zap.co.ao.test.js
+++ b/sites/zap.co.ao/zap.co.ao.test.js
@@ -1,67 +1,48 @@
-// npx epg-grabber --config=sites/zap.co.ao/zap.co.ao.config.js --channels=sites/zap.co.ao/zap.co.ao.channels.xml --output=guide.xml --days=2
+// npm run channels:parse -- --config=./sites/zap.co.ao/zap.co.ao.config.js --output=./sites/zap.co.ao/zap.co.ao.channels.xml
+// npx epg-grabber --config=sites/zap.co.ao/zap.co.ao.config.js --channels=sites/zap.co.ao/zap.co.ao.channels.xml --output=guide.xml
const { parser, url } = require('./zap.co.ao.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('2021-11-25', 'YYYY-MM-DD').startOf('d')
+const date = dayjs.utc('2023-05-28', 'YYYY-MM-DD').startOf('d')
const channel = {
- site_id: '78',
- xmltv_id: '24KitchenPortugal.pt'
+ site_id: '2275',
+ xmltv_id: 'TPA1.ao'
}
-const content = `[{"image_uri":"https://www.zap.co.ao/media/cache/movie_thumb/uploads/ao/channels/54bd3c6b068ef.png","id":78,"identifier":"24KITCHEN","name":"24Kitchen","number":84,"theme":"Outros / Entretenimento / Tem\\u00e1ticos","language":"Portugu\\u00eas","site":"www.24kitchen.pt","description":"Com Jamie Oliver e Gordon Ramsay no comando, este canal de renome internacional traz para junto de si os melhores chefs de cozinha do mundo em portugu\\u00eas.","epg":[{"start_seconds":4680,"id":51296648,"identifier":"P9FGQ7","name":"Filipa Gomes Cozinha Com Twist T.2 Ep.22","subtitle":"","sinopse":"Ano: 2017 Com: Filipa Gomes \\nWorkout.\\nHoje em dia h\\u00e1 imensa gente que faz do desporto um mantra! \\u00c9 a pensar nessas pessoas que apresentamos tr\\u00eas receitas ideais para comer antes ou depois do treino.","date":"2021-11-25T00:00:00+0000","start_time":"01h18","end_time":"01h46","duration":1680},{"start_seconds":85440,"id":51296700,"identifier":"P9FX4J","name":"MasterChef USA T.11 Ep.17","subtitle":"","sinopse":"Finale - Curtis Stone.\\nO famoso chef Curtis Stone est\\u00e1 de volta como jurado convidado para as semifinais quando o Top Tr\\u00eas luta por um lugar na final na ronda de aperitivos.","date":"2021-11-25T00:00:00+0000","start_time":"23h44","end_time":"00h26","duration":2520},{"start_seconds":1560,"id":51296701,"identifier":"P9FX4K","name":"Prato do Dia T.2 Ep.9","subtitle":"","sinopse":"Ano: 2013 Com: Filipa Gomes \\nO sabor de um bom queijo caprese faz companhia ao presunto numas espetadas que abrem o apetite para uma salada onde um tenro naco da vazia \\u00e9 o destaque principal. E \\u00e0 espera est\\u00e1 ainda um cheesecake carregado do sabor \\u00fanico das cerejas do Fund\\u00e3o.","date":"2021-11-25T00:00:00+0000","start_time":"00h26","end_time":"00h51","duration":1500},{"start_seconds":3060,"id":51296702,"identifier":"P9FX4L","name":"Prato do Dia T.2 Ep.10","subtitle":"","sinopse":"Ano: 2013 Com: Filipa Gomes \\nUm bom prato de carac\\u00f3is anuncia uma grande tarde de petiscos. Segue-se uma salada fria com a textura das favas e o sabor da entremeada, e termina com um crocante caramelo de amendoim, sem que termine a boa disposi\\u00e7\\u00e3o.","date":"2021-11-25T00:00:00+0000","start_time":"00h51","end_time":"01h17","duration":1560}]},{"image_uri":"https://www.zap.co.ao/media/cache/movie_thumb/uploads/ao/channels/57a081f87891b.png","id":79,"identifier":"FOODNW","name":"Food Network","number":85,"theme":"Outros / Entretenimento / Tem\\u00e1ticos","language":"Portugu\\u00eas","site":"http://www.foodnetwork.com/","description":"Um canal onde o mundo da cozinha \\u00e9 explorado a todos os n\\u00edveis, em Alta Defini\\u00e7\\u00e3o. Aqui poder\\u00e1 encontrar novas e diferentes t\\u00e9cnicas de abordar os alimentos, cultura pop, viagens e competi\\u00e7\\u00f5es.","epg":[{"start_seconds":3600,"id":51302141,"identifier":"P9FHFQ","name":"Guy's Grocery Games T.5 Ep.8","subtitle":"","sinopse":"Ano: 2015 De: J. Rupert Thompson Com: Guy Fieri, Troy Johnson, Melissa d'Arabian \\nIMDB\\u00ae 6,6/10\\nThrillin' Grillin'.\\nGuy Fieri re\\u00fane quatro chefs com talento numa competi\\u00e7\\u00e3o dura e dif\\u00edcil entre as filas de produtos do supermercado.","date":"2021-11-25T00:00:00+0000","start_time":"01h00","end_time":"01h40","duration":2400}]}]`
it('can generate valid url', () => {
- expect(url({ date })).toBe('https://www.zap.co.ao/_api/channels/2021-11-25/epg.json')
+ expect(url({ date, channel })).toBe(
+ 'https://zapon.zapsi.net/ao/m/api/epg/events?date=20230528&channel=2275'
+ )
})
it('can parse response', () => {
- const result = parser({ content, channel, date }).map(p => {
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
+ const results = parser({ content }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
- expect(result).toMatchObject([
- {
- start: '2021-11-25T00:18:00.000Z',
- stop: '2021-11-25T00:46:00.000Z',
- title: `Filipa Gomes Cozinha Com Twist T.2 Ep.22`,
- description:
- 'Ano: 2017 Com: Filipa Gomes \nWorkout.\nHoje em dia há imensa gente que faz do desporto um mantra! É a pensar nessas pessoas que apresentamos três receitas ideais para comer antes ou depois do treino.'
- },
- {
- start: '2021-11-25T22:44:00.000Z',
- stop: '2021-11-25T23:26:00.000Z',
- title: `MasterChef USA T.11 Ep.17`,
- description:
- 'Finale - Curtis Stone.\nO famoso chef Curtis Stone está de volta como jurado convidado para as semifinais quando o Top Três luta por um lugar na final na ronda de aperitivos.'
- },
- {
- start: '2021-11-25T23:26:00.000Z',
- stop: '2021-11-25T23:51:00.000Z',
- title: `Prato do Dia T.2 Ep.9`,
- description:
- 'Ano: 2013 Com: Filipa Gomes \nO sabor de um bom queijo caprese faz companhia ao presunto numas espetadas que abrem o apetite para uma salada onde um tenro naco da vazia é o destaque principal. E à espera está ainda um cheesecake carregado do sabor único das cerejas do Fundão.'
- },
- {
- start: '2021-11-25T23:51:00.000Z',
- stop: '2021-11-26T00:17:00.000Z',
- title: `Prato do Dia T.2 Ep.10`,
- description:
- 'Ano: 2013 Com: Filipa Gomes \nUm bom prato de caracóis anuncia uma grande tarde de petiscos. Segue-se uma salada fria com a textura das favas e o sabor da entremeada, e termina com um crocante caramelo de amendoim, sem que termine a boa disposição.'
- }
- ])
+ expect(results[0]).toMatchObject({
+ start: '2023-05-27T23:00:00.000Z',
+ stop: '2023-05-28T00:00:00.000Z',
+ title: `Jornal da Meia-Noite`,
+ description:
+ 'Um jornal diferente do Telejornal, por conter análise, comentários e coluna com jornalistas experientes sobre factos do dia a dia.',
+ category: 'Noticiário'
+ })
})
it('can handle empty guide', () => {
- const result = parser({
- date,
- channel,
+ const results = parser({
content: `[]`
})
- expect(result).toMatchObject([])
+ expect(results).toMatchObject([])
})