Initial Commit

This commit is contained in:
2023-09-10 21:48:48 +02:00
commit 227cca7d31
791 changed files with 165200 additions and 0 deletions

View File

@@ -0,0 +1 @@
[{"idCanal":"3","programas":[{"id":"ME13368522","idCanal":"3","iniDate":"2022-10-04 01:30:00","endDate":"2022-10-04 02:25:00","idSection":"2","txtSection":"Otros","name":"","title":"Comerse el mundo","description":"El cocinero Javier Peña recorre diversos países mostrándonos su diversidad gastronómica.","recommended":"0","id_programa":"CF5266694","idCellnex":"202210040130","duracion":"005500","rating":"0"}]},{"idCanal":"4","programas":[{"id":"CF161485462","idCanal":"4","iniDate":"2022-10-04 00:35:00","endDate":"2022-10-04 01:15:00","idSection":"2","txtSection":"Otros","name":"","title":"Primeras Damas","description":"Eleanor Roosevelt y su esposo, Franklin Delano Roosevelt, formaron el mejor equipo político de la historia americana en la Casa Blanca.","recommended":"0","id_programa":"CF5812759","idCellnex":"202210040035","duracion":"004000","rating":"5"}]}]

View File

@@ -0,0 +1,40 @@
[{
"id_programa": "CF5266694",
"id_section": "2",
"txt_section": "Otros",
"title": "Comerse el mundo",
"description": "El cocinero Javier Peña recorre diversos países mostrándonos su diversidad gastronómica.",
"duration": "50",
"artistic": "0",
"commercial": "0",
"id_genre": "03",
"txt_genre": "Ocio-Cultura",
"id_subgenre": "223",
"txt_subgenre": "Cocina",
"id_parental": "0",
"txtParental": "Sin clasificar",
"season": "1",
"episode": "23",
"episode_title": "París",
"episode_description": "El chef Peña viaja hasta París, una de las capitales mundiales de la alta gastronomía. Allí visitará un viñedo muy especial en pleno corazón de la ciudad, probará los famosos caracoles, hará un queso y conocerá a chefs que llegaron a la capital gala para cumplir sus sueños y los consiguieron.",
"total_episodes": "0",
"country": "España",
"year": "",
"director": "Sergio Martín, Victor Arribas",
"script": "Filippo Gravino, Guido Iuculano, Michele Pellegrini",
"actors": "Pietro Sermonti, Maya Sansa, Ana Caterina Morariu",
"producer": "Javier Redondo",
"production": "",
"presented_by": "Javier Peña",
"photography": "",
"music": "Paco Musulén",
"creator": "",
"guest_actors": "Tobia de Angelis, Benedetta Porcaroli, Roberto Nocchi",
"image": "imagenes\/programas\/2099957.jpg",
"poster": "imagenes\/programas\/2099957.jpg",
"paisISO": "ESP",
"imagenPadre": "2099957",
"posterPadre": "2099957",
"seriado": false,
"multievento": false
}]

View File

@@ -0,0 +1,203 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="programacion-tv.elpais.com">
<channels>
<channel lang="es" xmltv_id="324.es" site_id="449">3/24</channel>
<channel lang="es" xmltv_id="7TelevisionRegiondeMurcia.es" site_id="551">7 Región de Murcia</channel>
<channel lang="es" xmltv_id="AlJazeeraEnglish.qa" site_id="539">Al Jazeera English</channel>
<channel lang="es" xmltv_id="AMCSpain.es" site_id="481">AMC</channel>
<channel lang="es" xmltv_id="Antena3.es" site_id="2">Antena 3</channel>
<channel lang="es" xmltv_id="AragonTV.es" site_id="522">Aragón TV</channel>
<channel lang="es" xmltv_id="Atreseries.es" site_id="883">Atreseries</channel>
<channel lang="es" xmltv_id="AXNEurope.gr" site_id="63">AXN</channel>
<channel lang="es" xmltv_id="AXNWhite.us" site_id="512">AXN White</channel>
<channel lang="es" xmltv_id="BabyTV.uk" site_id="573">Baby TV</channel>
<channel lang="es" xmltv_id="BarcaTV.es" site_id="155">Barça TV</channel>
<channel lang="es" xmltv_id="BBCWorldNewsEurope.uk" site_id="208">BBC World</channel>
<channel lang="es" xmltv_id="beINSportsenEspanol.us" site_id="840">BeIN Sports</channel>
<channel lang="es" xmltv_id="BeMad.es" site_id="890">Be Mad</channel>
<channel lang="es" xmltv_id="BoingSpain.es" site_id="665">Boing</channel>
<channel lang="es" xmltv_id="Calle13.es" site_id="64">Calle 13</channel>
<channel lang="es" xmltv_id="Canal24Horas.es" site_id="8">Canal 24 h</channel>
<channel lang="es" xmltv_id="CanalCocina.es" site_id="183">Canal Cocina</channel>
<channel lang="es" xmltv_id="CanalExtremaduraSatelite.es" site_id="582">Canal Extremadura TV</channel>
<channel lang="es" xmltv_id="CanalHollywood.es" site_id="61">Hollywood</channel>
<channel lang="es" xmltv_id="CanalPandaSpain.es" site_id="698">Canal Panda</channel>
<channel lang="es" xmltv_id="CanalParlamento.es" site_id="604">Canal Parlamento</channel>
<channel lang="es" xmltv_id="CanalSUR.us" site_id="30">Canal Sur</channel>
<channel lang="es" xmltv_id="CanalSurAndalucia.es" site_id="31">Canal Sur Andalucía</channel>
<channel lang="es" xmltv_id="CaracolInternacional.co" site_id="566">Caracol TV</channel>
<channel lang="es" xmltv_id="CazayPesca.es" site_id="386">Caza y Pesca</channel>
<channel lang="es" xmltv_id="Clan.es" site_id="505">Clan TVE</channel>
<channel lang="es" xmltv_id="CNBCEurope.uk" site_id="204">CNBC</channel>
<channel lang="es" xmltv_id="CNNInternationalEurope.us" site_id="203">CNN International</channel>
<channel lang="es" xmltv_id="CMMTV.es" site_id="296">CMM TV</channel>
<channel lang="es" xmltv_id="ComedyCentralSpain.es" site_id="493">Comedy Central</channel>
<channel lang="es" xmltv_id="CosmopolitanTV.es" site_id="186">Cosmopolitan</channel>
<channel lang="es" xmltv_id="Cuatro.es" site_id="496">Cuatro</channel>
<channel lang="es" xmltv_id="CubavisionInternacional.cu" site_id="567">Cubavisión Internacional</channel>
<channel lang="es" xmltv_id="Dark.es" site_id="920">Dark</channel>
<channel lang="es" xmltv_id="Decasa.es" site_id="572">Decasa</channel>
<channel lang="es" xmltv_id="DiscoveryenEspanol.us" site_id="146">Discovery Channel</channel>
<channel lang="es" xmltv_id="DisneyChannelSpain.es" site_id="175">Disney Channel</channel>
<channel lang="es" xmltv_id="DisneyJuniorSpain.es" site_id="292">Disney Junior</channel>
<channel lang="es" xmltv_id="Divinity.es" site_id="697">Divinity</channel>
<channel lang="es" xmltv_id="DMAXSpain.es" site_id="475">DMAX</channel>
<channel lang="es" xmltv_id="DWEspanol.de" site_id="206">Deutsche Welle</channel>
<channel lang="es" xmltv_id="Energy.es" site_id="709">Energy</channel>
<channel lang="es" xmltv_id="ElToroTV.es" site_id="516">El Toro TV</channel>
<channel lang="es" xmltv_id="ETB1.es" site_id="33">ETB 1</channel>
<channel lang="es" xmltv_id="ETB3.es" site_id="795">ETB 3</channel>
<channel lang="es" xmltv_id="EuronewsSpanish.fr" site_id="139">EuroNews</channel>
<channel lang="es" xmltv_id="Eurosport1.fr" site_id="154">Eurosport</channel>
<channel lang="es" xmltv_id="Eurosport2.fr" site_id="491">Eurosport 2</channel>
<channel lang="es" xmltv_id="EWTNEspanaLatinAmerica.us" site_id="190">EWTN</channel>
<channel lang="es" xmltv_id="ExtremeSportsChannelEurope.nl" site_id="550">Extreme Sports</channel>
<channel lang="es" xmltv_id="FactoriadeFiccion.es" site_id="506">FDF Telecinco</channel>
<channel lang="es" xmltv_id="FoxLifeSpain.es" site_id="660">Fox Life</channel>
<channel lang="es" xmltv_id="FoxSpain.es" site_id="202">FOX</channel>
<channel lang="es" xmltv_id="France24Espanol.fr" site_id="608">France 24</channel>
<channel lang="es" xmltv_id="GaliciaTVEuropa.es" site_id="37">Galicia TV</channel>
<channel lang="es" xmltv_id="Gol.es" site_id="897">Gol TV</channel>
<channel lang="es" xmltv_id="HistoriaSpain.es" site_id="148">Historia</channel>
<channel lang="es" xmltv_id="I24NewsEnglish.il" site_id="792">i24 News</channel>
<channel lang="es" xmltv_id="IberaliaTV.es" site_id="654">Iberalia</channel>
<channel lang="es" xmltv_id="La1.es" site_id="3">La 1</channel>
<channel lang="es" xmltv_id="La2.es" site_id="4">La 2</channel>
<channel lang="es" xmltv_id="LaSexta.es" site_id="510">laSexta</channel>
<channel lang="es" xmltv_id="Mega.es" site_id="841">Mega</channel>
<channel lang="es" xmltv_id="Mezzo.fr" site_id="338">Mezzo</channel>
<channel lang="es" xmltv_id="MovistarAccion.es" site_id="847">Movistar Acción</channel>
<channel lang="es" xmltv_id="MovistarCineEspanol.es" site_id="385">Movistar Cine Español</channel>
<channel lang="es" xmltv_id="MovistarComedia.es" site_id="848">Movistar Comedia</channel>
<channel lang="es" xmltv_id="MovistarDeportesPeru.pe" site_id="377">Movistar Deportes</channel>
<channel lang="es" xmltv_id="MovistarEstrenos.es" site_id="845">Movistar Estrenos</channel>
<channel lang="es" xmltv_id="MovistarSeries.es" site_id="843">Movistar Series</channel>
<channel lang="es" xmltv_id="MTV90s.uk" site_id="160">MTV 90s</channel>
<channel lang="es" xmltv_id="MTVHitsEurope.uk" site_id="161">MTV Hits</channel>
<channel lang="es" xmltv_id="MTVLive.uk" site_id="702">MTV Live</channel>
<channel lang="es" xmltv_id="MTVSpain.es" site_id="159">MTV España</channel>
<channel lang="es" xmltv_id="NationalGeographicSpain.es" site_id="151">National Geographic</channel>
<channel lang="es" xmltv_id="Neox.es" site_id="508">Neox</channel>
<channel lang="es" xmltv_id="NickelodeonSpain.es" site_id="200">Nickelodeon</channel>
<channel lang="es" xmltv_id="NickJrSpain.es" site_id="687">Nick Junior</channel>
<channel lang="es" xmltv_id="Nova.es" site_id="509">Nova</channel>
<channel lang="es" xmltv_id="La8Burgos.es" site_id="872">La 8 Burgos</channel>
<channel lang="es" xmltv_id="Odisea.es" site_id="135">Odisea</channel>
<channel lang="es" xmltv_id="ProTVInternational.ro" site_id="570">Pro TV International</channel>
<channel lang="es" xmltv_id="RealMadridTV.es" site_id="158">Real Madrid TV</channel>
<channel lang="es" xmltv_id="RecordTVEuropa.pt" site_id="615">Record TV</channel>
<channel lang="es" xmltv_id="RTenEspanol.ru" site_id="682">RT Español</channel>
<channel lang="es" xmltv_id="SolMusica.es" site_id="171">Sol Música</channel>
<channel lang="es" xmltv_id="Somos.es" site_id="501">Somos</channel>
<channel lang="es" xmltv_id="SundanceTVSpain.es" site_id="699">Sundance Channel</channel>
<channel lang="es" xmltv_id="SyfySpain.es" site_id="520">Syfy</channel>
<channel lang="es" xmltv_id="Taroteame.es" site_id="826">Taroteame</channel>
<channel lang="es" xmltv_id="TCMSpain.es" site_id="59">TCM</channel>
<channel lang="es" xmltv_id="Telecinco.es" site_id="1">Telecinco</channel>
<channel lang="es" xmltv_id="Teledeporte.es" site_id="9">Teledeporte</channel>
<channel lang="es" xmltv_id="Telesur.ve" site_id="614">teleSUR</channel>
<channel lang="es" xmltv_id="TNTSpain.es" site_id="577">TNT</channel>
<channel lang="es" xmltv_id="TV3.es" site_id="43">TV3</channel>
<channel lang="es" xmltv_id="TV3CAT.es" site_id="47">TV3CAT</channel>
<channel lang="es" xmltv_id="TV5MondeEurope.fr" site_id="209">TV5 Monde</channel>
<channel lang="es" xmltv_id="TVCanaria.es" site_id="41">TV Canaria</channel>
<channel lang="es" xmltv_id="TVChile.cl" site_id="416">TV Chile</channel>
<channel lang="es" xmltv_id="TVEInternacionalAsiaOceania.es" site_id="667">TVE Internacional Asia</channel>
<channel lang="es" xmltv_id="TVEInternacionalEuropeAsia.es" site_id="468">TVE Internacional</channel>
<channel lang="es" xmltv_id="VePlusPanregional.ve" site_id="653">VE PLUS TV</channel>
<channel lang="es" xmltv_id="Viajar.es" site_id="188">Viajar</channel>
<channel lang="es" xmltv_id="XTRM.es" site_id="68">XTRM</channel>
<!-- <channel lang="es" xmltv_id="" site_id="140">Fox News</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="163">40TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="165">MTV00</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="174">Disney XD</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="18">La 1 Catalunya</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="196">Bloomberg</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="242">betevé</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="243">8TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="280">La 2 Catalunya</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="291">Disney Channel +1</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="296">Castilla - La Mancha TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="316">Tele Elx</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="32">Andalucía TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="324">CyLTV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="333">Movistar Golf</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="34">ETB 2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="35">ETB 4</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="36">TVG</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="378">Movistar Deportes 2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="38">Telemadrid</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="39">La Otra</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="395">Motors tv</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="400">TV Polonia</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="469">MTV Dance</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="492">AMC Break</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="519">IB3</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="521">TPA</channel> -->
<channel lang="es" xmltv_id="SX3.es" site_id="541">Super 3</channel>
<!-- <channel lang="es" xmltv_id="" site_id="575">Classica</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="589">Canal de las Estrellas Europa</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="594">TVE América I</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="597">TVE América II</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="603">Libertad Digital TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="607">AZ Mundo</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="613">TV Colombia</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="616">Telefé Internacional</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="619">CGTN Español</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="627">MTV Music</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="628">TCM +1</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="629">ZTV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="630">Phoenix Infonews</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="631">Phoenix CNE</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="643">La 8</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="656">Cazavisión</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="671">Hollywood +1</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="672">Esport3</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="681">National Geographic Wild HD</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="683">Disney XD +1</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="686">TMV Valencia</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="689">13 TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="690">La 1 HD</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="691">AMC Crime</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="705">MTV 80s</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="711">UPV TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="716">Paramount Network</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="743">Futbol Replay</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="746">Canal+ Liga</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="748">Mezzo Live</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="751">Canal 7 Televalencia</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="753">Onda Algeciras TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="754">Popular TV Murcia</channel> -->
<channel lang="es" xmltv_id="NavarraTV.es" site_id="771">Navarra Televisión</channel>
<!-- <channel lang="es" xmltv_id="" site_id="777">Movistar Fútbol</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="779">TVG2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="781">ETB 4</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="784">National Geographic Wild GeoWild 985</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="786">El Garage TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="789">AZ Corazón</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="790">El Trece Internacional</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="791">CNC News</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="796">TeleRibera</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="798">Movistar F1</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="804">Moto GP</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="812">MyZen TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="819">Fight Sports</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="824">Fashion One</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="827">Orbe 21</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="829">MarTV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="832">TV Mediterráneo</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="833">Ukraine Today</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="839">Non Stop People</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="842">Canal+</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="844">Movistar Series Xtra</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="846">Movistar Xtra</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="849">Movistar DCine</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="870">Viral TV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="874">Iberalia 2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="882">Partidazo</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="889">Ten</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="892">Dkiss</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="894">La Xarxa Televisions</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="895">BeIN LaLiga</channel> -->
</channels>
</site>

View File

@@ -0,0 +1,105 @@
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(timezone)
module.exports = {
site: 'programacion-tv.elpais.com',
days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
}
},
url: function ({ date }) {
return `https://programacion-tv.elpais.com/data/parrilla_${date.format('DDMMYYYY')}.json`
},
parser: async function ({ content, channel }) {
const programs = []
const items = parseItems(content, channel)
if (!items.length) return programs
const programsData = await loadProgramsData(channel)
items.forEach(item => {
const start = parseStart(item)
const stop = parseStop(item)
const details = programsData.find(p => p.id_programa === item.id_programa) || {}
programs.push({
title: item.title,
sub_title: details.episode_title,
description: details.episode_description || item.description,
category: parseCategory(details),
icon: parseIcon(details),
director: parseList(details.director),
actors: parseList(details.actors),
writer: parseList(details.script),
producer: parseList(details.producer),
presenter: parseList(details.presented_by),
composer: parseList(details.music),
guest: parseList(details.guest_actors),
season: parseNumber(details.season),
episode: parseNumber(details.episode),
start,
stop
})
})
return programs
},
async channels() {
const data = await axios
.get(`https://programacion-tv.elpais.com/data/canales.json`)
.then(r => r.data)
.catch(console.log)
return Object.values(data).map(item => ({
lang: 'es',
site_id: item.id,
name: item.nombre
}))
}
}
function parseNumber(str) {
return typeof str === 'string' ? parseInt(str) : null
}
function parseList(str) {
return typeof str === 'string' ? str.split(', ') : []
}
function parseIcon(details) {
const url = new URL(details.image, 'https://programacion-tv.elpais.com/')
return url.href
}
function parseCategory(details) {
return [details.txt_genre, details.txt_subgenre].filter(Boolean).join('/')
}
async function loadProgramsData(channel) {
return await axios
.get(`https://programacion-tv.elpais.com/data/programas/${channel.site_id}.json`)
.then(r => r.data)
.catch(console.log)
}
function parseStart(item) {
return dayjs.tz(item.iniDate, 'YYYY-MM-DD HH:mm:ss', 'Europe/Madrid')
}
function parseStop(item) {
return dayjs.tz(item.endDate, 'YYYY-MM-DD HH:mm:ss', 'Europe/Madrid')
}
function parseItems(content, channel) {
if (!content) return []
const data = JSON.parse(content)
const channelData = data.find(i => i.idCanal === channel.site_id)
if (!channelData || !Array.isArray(channelData.programas)) return []
return channelData.programas
}

View File

@@ -0,0 +1,74 @@
// npx epg-grabber --config=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --channels=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml --output=guide.xml --days=2
// npm run channels:parse -- --config=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --output=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml
const { parser, url } = require('./programacion-tv.elpais.com.config.js')
const axios = require('axios')
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)
jest.mock('axios')
const date = dayjs.utc('2022-10-04', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '3',
xmltv_id: 'La1.es'
}
it('can generate valid url', () => {
expect(url({ date })).toBe('https://programacion-tv.elpais.com/data/parrilla_04102022.json')
})
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
axios.get.mockImplementation(url => {
if (url === 'https://programacion-tv.elpais.com/data/programas/3.json') {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/programs.json')))
})
} else {
return Promise.resolve({ data: '' })
}
})
let results = await parser({ content, channel })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results).toMatchObject([
{
start: '2022-10-03T23:30:00.000Z',
stop: '2022-10-04T00:25:00.000Z',
title: 'Comerse el mundo',
sub_title: 'París',
description:
'El chef Peña viaja hasta París, una de las capitales mundiales de la alta gastronomía. Allí visitará un viñedo muy especial en pleno corazón de la ciudad, probará los famosos caracoles, hará un queso y conocerá a chefs que llegaron a la capital gala para cumplir sus sueños y los consiguieron.',
director: ['Sergio Martín', 'Victor Arribas'],
presenter: ['Javier Peña'],
writer: ['Filippo Gravino', 'Guido Iuculano', 'Michele Pellegrini'],
actors: ['Pietro Sermonti', 'Maya Sansa', 'Ana Caterina Morariu'],
guest: ['Tobia de Angelis', 'Benedetta Porcaroli', 'Roberto Nocchi'],
producer: ['Javier Redondo'],
composer: ['Paco Musulén'],
category: 'Ocio-Cultura/Cocina',
season: 1,
episode: 23,
icon: 'https://programacion-tv.elpais.com/imagenes/programas/2099957.jpg'
}
])
})
it('can handle empty guide', async () => {
const result = await parser({
content: ``,
channel
})
expect(result).toMatchObject([])
})