Merge pull request #1144 from iptv-org/add-reportv.com.ar

Add guide from reportv.com.ar
This commit is contained in:
Aleksandr Statciuk 2022-10-04 00:45:25 +03:00 committed by GitHub
commit 8284ce3374
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 1560 additions and 0 deletions

17
.github/workflows/reportv.com.ar.yml vendored Normal file
View file

@ -0,0 +1,17 @@
name: reportv.com.ar
on:
schedule:
- cron: '0 3 * * *'
workflow_dispatch:
workflow_run:
workflows: [_trigger]
types:
- completed
jobs:
load:
uses: ./.github/workflows/_load.yml
with:
site: ${{github.workflow}}
secrets:
APP_ID: ${{ secrets.APP_ID }}
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
<div id="tableContainer" style="background:#FFF;height: 745px;overflow: hidden; position:absolute;width:923px; z-index:0;" class="GrillatableContainer" ><div id="tblGrilla_head" style="overflow:hidden;float:left;min-width:925px;max-width:925px;" class="CronofixedHeader" ><div id="Programa / Pel&iacute;cula" style="float:left;width:360px;height:18px" class="crono_th" ><div style="float:left;margin-left:4px;margin-bottom:3px;border:solid 1px #333;border-radius:2px;" ><img src='./img/Logos/NoPicture.jpg' title=" - " width="25" heigth="38" alt=''/></div>&nbsp;&nbsp;&nbsp;&nbsp;Programa / Pel&iacute;cula</div><div id="Categor&iacute;a" style="float:left;width:175px;height:18px" class="crono_th" >Categor&iacute;a</div><div id="G&eacute;nero" style="float:left;width:175px;height:18px" class="crono_th" >G&eacute;nero</div><div id="Duraci&oacute;n" style="float:left;width:128.75px;height:18px" class="crono_th" >Duraci&oacute;n</div><div id="crono_cerrar" style="display:block;float:left;width:46.25px;text-align:center;height:18px" class="crono_th" onclick="hide('divDetalle_Seniales'); hide('divFondoOpacoSeniales');show('divResult')" ><img src='./img/2694/Boton_Cerrar.png' width='13px' height='13px' align='middle' /></div></div><div id="CronotableContainer" style="overflow-x:hidden;float:left;width:923px; height:720px;" class="CronotableContainer" ><div id="tblGrilla_body" style="float:left;min-width:925px;max-width:925px;" class="CronoscrollContent" ><div style="width:925px;height:50px" class="trFecha" >Lo sentimos, no hemos encotrado datos para los filtros seleccionados.</div></div></div></div>

View file

@ -0,0 +1,364 @@
<script type="text/javascript">
<!--
var margen_img;
var ficha_size;
var margen;
var capitulo_size;
var sinopsis_size;
var margin_left_calendario;
var Ficha_Tecnica_Height;
var Sinopsis_Height;
var Capitulo_Height;
//-->
</script><script type="text/javascript">
<!--
/************************************************************************/
/*ANIMACION DE LLEGADA DE DIVS A LA PANTALLA DETALLE*/
/************************************************************************/
/* Calculo el tama<6D>o que llevaran los box de las fichas */
var Sinopsis_Height = 100;
var Sinopsis_Margin_Top = 0;
var Capitulo_Height = 100;
var Capitulo_Margin_Top = 0;
var Sinopsis_Visibility = "visible";
var Capitulo_Visibility = "visible";
if ( $("#Capitulo").attr("name") == "Disable" ) {
Sinopsis_Height = 150;
Sinopsis_Margin_Top = 40;
Capitulo_Height = 0;
Capitulo_Visibility = "hidden";
}
if ( $("#Sinopsis").attr("name") == "Disable" ) {
Capitulo_Height = 150;
Capitulo_Margin_Top = 35;
Sinopsis_Height = 0;
Sinopsis_Visibility = "hidden";
}
if ( $("#Sinopsis").attr("name") == "Disable" && $("#Capitulo").attr("name") == "Disable" ){
Sinopsis_Height = 150;
Sinopsis_Margin_Top = 40;
Capitulo_Height = 0;
Capitulo_Visibility = "hidden";
Sinopsis_Visibility = "visible";
}
$("#Ficha").css({
"height" : '140px',
"width" : "195px",
});
$("#Ficha .inner").css({
"height" : '122px',
"width" : "98%",
});
$("#Ficha .h4").css({
"height" : '18px',
"width" : "100%",
});
$("#Sinopsis").css({
"height" : Sinopsis_Height+'px',
"margin-top" : Sinopsis_Margin_Top+"px",
"width" : "99%",
"visibility" : Sinopsis_Visibility,
});
$("#Sinopsis .inner").css({
"height" : (Sinopsis_Height - 16) +'px',
});
$("#Capitulo").css({
"height" : Capitulo_Height+'px',
"margin-top" : Capitulo_Margin_Top+'px',
"margin-left" : "0px",
"width" : "99%",
"visibility" : Capitulo_Visibility,
});
$("#Capitulo .inner").css({
"height" : (Capitulo_Height - 16) +'px',
});
// Muestra la seccion de agendar.
function Mostrar_Ficha_Agenda() {
$("#Email").animate({
'opacity': '0.0',
"height": "0px",
"margin-top" : "100%",
}, 0 ).show()
.animate({
'opacity': '1.0',
"height": "100%",
"margin-top" : "0px",
}, 1000 );
}
$("#Ficha").css("margin-top","10px");
$("#ImgProg").css("margin-top","10px");
$("#Calendario").css("margin-top","10px");
$("#Emisiones").css("opacity",0);
$("#btnEmisiones").click(function(){
$("#Emisiones").animate({
'opacity': '0.0',
"margin-left" : "580px",
"width" : "0px",
}, 1500 );
$("#Email").animate({
'opacity': '0.0',
}, 1500 );
});
//Muestra la seccion de emisiones
function Mostrar_Seccion_Emisiones(){
$("#Emisiones").animate({
'opacity': '0.0',
"width" : "0px",
"margin-left" : "580px",
"margin-top" : "17px",
'z-index' : '10',
}, 0 ).show()
.animate({
'opacity': '1.0',
"margin-left" : "295px",
"margin-top" : "17px",
"width" : "285px",
}, 1500 );
$("#Email").animate({
'opacity': '0.0',
"width" : "0px",
}, 0 ).show()
.animate({
"margin-top": "195px",
"width" : "100%",
}, 1500 );
}
//-->
</script><script type="text/javascript">
<!--
/************************************************************************/
/************************************************************************/
$("#cerrar").click(function(){
hide('divDetalle');
hide('divFondoOpacoFull');
setTimeout("$('#divFondoOpacoFull').remove()",500);
});
/************************************************************************
SECCION TABLA DE EMISIONES
************************************************************************/
/* Muestra la tabla con las emisiones del programa*/
$("#CalendarioDetalle .emision").click( function() {
Fecha = $(this).attr("id").split("/");
dia = Fecha[0];
$("#tblEmisiones tbody tr").each(function(){
if($(this).attr("value") != dia) {
$(this).css("display","none");
}
else {
$(this).css("display","table-row");
}
});
Mostrar_Seccion_Emisiones();
});
function verEmisiones(dia) {
$("#tblEmisiones tbody tr").each(function(){
if($(this).attr("value") != dia && dia != 0) {
$(this).css("display","none");
}
else {
$(this).css("display","table-row");
}
});
Mostrar_Seccion_Emisiones(0);
};
/************************************************************************
SECCION RECODATORIO
************************************************************************/
/* Muestra el div para agendar la emision*/
function verAgendar(emision, id_programa, id_senial, fecha, hora){
$("#FechaAgenda").text(emision);
$("#id_programa").attr("value",id_programa);
$("#id_senial").attr("value",id_senial);
$("#fecha_emision").attr("value",fecha + ' ' + hora);
$("#fecha_recordatorio").attr("value",1);
Mostrar_Ficha_Agenda();
}
$("#hora_recordatorio").change(function(){
$("#fecha_recordatorio").attr("value",this.value);
});
$("#btnAgendar").attr("disabled","disabled");
$("#txtemail").keyup(function(){
regex= /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; //FUNCIONA
//regex=/^.*?\@+[0-9a-zA-Z])+$/;
if (regex.test(this.value)){
$("#txtemail").css("color","#000");
$("#btnAgendar").attr("disabled",false);
} else {
$("#btnAgendar").attr("disabled","disabled");
$("#txtemail").css("color","#F00");
}
});
/**********************************************************************/
$("#btnAgendar").click(function() {
InsertarRecordatorio();
$("#Email").animate({
"height": "0px",
"margin-top" : "100%",
"opacity": "0.0",
}, 1000 );
});
$("#btnCancelarAgenda").click(function() {
$("#Email").animate({
"height": "0px",
"margin-top" : "100%",
"opacity": "0.0",
}, 1000 );
});
/* Llama al script Recordatorio.php para insertar en base de datos.*/
function InsertarRecordatorio(){
$.ajax({
async: true,
type: "POST",
url: "Recordatorio.php",
dataType: "html",
contentType: "application/x-www-form-urlencoded",
data: {
Alineacion : $("#alineacion").attr("value"),
Email : $("#txtemail").attr("value"),
idPrograma: $("#id_programa").attr("value"),
idSenial: $("#id_senial").attr("value"),
FechaEmision : $("#fecha_emision").attr("value"),
FechaRecordatorio : $("#fecha_recordatorio").attr("value"),
},
success: RecordatorioAgendado,
error:problemas,
});
return false;
}
function RecordatorioAgendado(datos)
{
CustomAlert(datos,'Recordatorio Guardado!');
}
//-->
</script>
<div id="Detalle" style="width:580px; height:420px" >
<input type="hidden" id="HEADER" value="TITULO"/>
<div id="Fichas">
<table id="TablaDetalle" width="100%">
<tr height="170px">
<td width="140px" >
<div id="Ficha" class="outer">
<label class="h4">Ficha T&eacute;cnica</label>
<div class="inner">
<label class="lable">Canal: </label>
<br><label class="lable">T&iacute;tulo: </label>
<!---->
<br><label class='lable'>Inicio: </label>
<br><label class="lable">Fin: </label>
<br><lable class="lable">Duraci&oacute;n: </lable>
</div>
</div>
</td>
<td width="160px">
<div id="Img">
<img id="ImgProg" src="./img/Programas/NoPicture.jpg" width="159px" height="116px">
<a href="../buscador/img/Programas/" style="display:block;text-align:center;visibility:hidden" onclick="Galeria('../buscador/img/Programas/');
return false;">
<img id="persona_mas_fotos" src="./img/2307/Galeria_Personas.png" alt="Galeria de fotos" style="">
</a>
</div>
</td>
<td width="200px">
<div id="Calendario" >
<table id="CalendarioDetalle" class="tablacalendario" cellspacing="3" cellpadding="1" border="0"><tr><td colspan="7" class="tit"><table width="100%" cellspacing="2" cellpadding="0" border="0"><tr><td><span></span></td><td class='titmesano'>Octubre 2022</td><td><span></span></td></tr></table></td></tr><tr><td width="14%" class="diasemana">Lu</td><td width="14%" class="diasemana">Ma</td><td width="14%" class="diasemana">Mi</td><td width="14%" class="diasemana">Ju</td><td width="14%" class="diasemana">Vi</td><td width="14%" class="diasemana">S&aacute;</td><td width="14%" class="diasemana">Do</td></tr><tr><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='01/10/2022' class='sinemision Dia' ><span>01</span></td><td id='02/10/2022' class='domingo Dia' ><span>02</span></td></tr><tr><td id='03/10/2022' class='sinemision hoy Dia' ><span>03</span></td><td id='04/10/2022' class='sinemision Dia' ><span>04</span></td><td id='05/10/2022' class='sinemision Dia' ><span>05</span></td><td id='06/10/2022' class='sinemision Dia' ><span>06</span></td><td id='07/10/2022' class='sinemision Dia' ><span>07</span></td><td id='08/10/2022' class='sinemision Dia' ><span>08</span></td><td id='09/10/2022' class='domingo Dia' ><span>09</span></td></tr><tr><td id='10/10/2022' class='sinemision Dia' ><span>10</span></td><td id='11/10/2022' class='sinemision Dia' ><span>11</span></td><td id='12/10/2022' class='sinemision Dia' ><span>12</span></td><td id='13/10/2022' class='sinemision Dia' ><span>13</span></td><td id='14/10/2022' class='sinemision Dia' ><span>14</span></td><td id='15/10/2022' class='sinemision Dia' ><span>15</span></td><td id='16/10/2022' class='domingo Dia' ><span>16</span></td></tr><tr><td id='17/10/2022' class='sinemision Dia' ><span>17</span></td><td id='18/10/2022' class='sinemision Dia' ><span>18</span></td><td id='19/10/2022' class='sinemision Dia' ><span>19</span></td><td id='20/10/2022' class='sinemision Dia' ><span>20</span></td><td id='21/10/2022' class='sinemision Dia' ><span>21</span></td><td id='22/10/2022' class='sinemision Dia' ><span>22</span></td><td id='23/10/2022' class='domingo Dia' ><span>23</span></td></tr><tr><td id='24/10/2022' class='sinemision Dia' ><span>24</span></td><td id='25/10/2022' class='sinemision Dia' ><span>25</span></td><td id='26/10/2022' class='sinemision Dia' ><span>26</span></td><td id='27/10/2022' class='sinemision Dia' ><span>27</span></td><td id='28/10/2022' class='sinemision Dia' ><span>28</span></td><td id='29/10/2022' class='sinemision Dia' ><span>29</span></td><td id='30/10/2022' class='domingo Dia' ><span>30</span></td></tr><tr><td id='31/10/2022' class='sinemision Dia' ><span>31</span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td><td id='//' class='diainvalido' ><span></span></td></tr></table>
</div>
</td>
</tr>
<tr>
<td colspan="3">
<div id="Sinopsis" class="outer" name="Disable">
<label class="h4">Sinops&iacute;s</label>
<div class="inner" >
No hay informaci&oacute;n disponible.
</div>
</div>
</td>
</tr>
<tr>
<td colspan="3">
<div id="Capitulo" class="outer" name="Disable">
<!--<label class="h4">Emisi&oacute;n de hoy</label>-->
<div class="inner">
No hay informaci&oacute;n disponible.
</div>
</div>
</td>
</tr>
</table>
<div id="Emisiones" >
<div id="Email">
<div>
<label id="FechaAgenda"></label>
<input type="hidden" id="id_programa" value=""/>
<input type="hidden" id="id_senial" value=""/>
<input type="hidden" id="fecha_emision" value=""/>
<input type="hidden" id="fecha_recordatorio" value=""/>
<input type="hidden" id="alineacion" value="2694"/>
</div>
<div>
<label> E-mail </label>
<input type="text" id="txtemail"/>
</div>
<div>
<label> Recordar </label>
<select id="hora_recordatorio">
<option value="1">1 hora</option>
<option value="2">2 horas</option>
<option value="6">6 horas</option>
<option value="12">12 horas</option>
</select>
<label> antes </label>
</div>
<div>
<input id="btnAgendar" type="button" value="Agendar" title="Agendar" style="width:80px"/>
<input id="btnCancelarAgenda" type="button" value="Salir" title="Cancelar" style="width:80px"/>
</div>
</div>
<div id="btnEmisiones">
<img title="Ocultar" src="img/2694/OcultarEmisiones.png" width="20px" height="25px">
</div>
<div id="TablaEmisiones"><table id="tblEmisiones" width="" heigth="" id='tblEmisiones' ></table></div>
</div>
</div>
</div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,168 @@
require('dayjs/locale/es')
const axios = require('axios')
const dayjs = require('dayjs')
const cheerio = require('cheerio')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const _ = require('lodash')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
module.exports = {
site: 'reportv.com.ar',
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
},
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data({ channel, date }) {
const formData = new URLSearchParams()
formData.append('idSenial', channel.site_id)
formData.append('Alineacion', '2694')
formData.append('DiaDesde', date.format('YYYY/MM/DD'))
formData.append('HoraDesde', '00:00:00')
return formData
}
},
url: `https://www.reportv.com.ar/buscador/ProgXSenial.php`,
parser: async function ({ content, date }) {
let programs = []
const items = parseItems(content, date)
for (let item of items) {
const $item = cheerio.load(item)
const start = parseStart($item, date)
const duration = parseDuration($item)
const stop = start.add(duration, 's')
const details = await loadProgramDetails($item)
programs.push({
title: parseTitle($item),
category: parseCategory($item),
icon: details.icon,
description: details.description,
directors: details.directors,
actors: details.actors,
start,
stop
})
}
return programs
},
async channels() {
const content = await axios
.get(`https://www.reportv.com.ar/buscador/Buscador.php?aid=2694`)
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(content)
const items = $('#tr_home_2 > td:nth-child(1) > select > option').toArray()
return items.map(item => {
return {
site_id: $(item).attr('value'),
name: $(item).text()
}
})
}
}
async function loadProgramDetails($item) {
const onclick = $item('*').attr('onclick')
const regexp = /detallePrograma\((\d+),(\d+),(\d+),(\d+),'([^']+)'\);/g
const match = [...onclick.matchAll(regexp)]
const [_, id, idc, id_alineacion, idp, title] = match[0]
if (!id || !idc || !id_alineacion || !idp || !title) return Promise.resolve({})
const formData = new URLSearchParams()
formData.append('id', id)
formData.append('idc', idc)
formData.append('id_alineacion', id_alineacion)
formData.append('idp', idp)
formData.append('title', title)
const content = await axios
.post(`https://www.reportv.com.ar/buscador/DetallePrograma.php`, formData)
.then(r => r.data.toString())
.catch(console.error)
if (!content) return Promise.resolve({})
const $ = cheerio.load(content)
return Promise.resolve({
icon: parseIcon($),
actors: parseActors($),
directors: parseDirectors($),
description: parseDescription($)
})
}
function parseActors($) {
const section = $('#Ficha > div')
.html()
.split('<br>')
.find(str => str.includes('Actores:'))
if (!section) return null
const $section = cheerio.load(section)
return $section('span')
.map((i, el) => $(el).text().trim())
.get()
}
function parseDirectors($) {
const section = $('#Ficha > div')
.html()
.split('<br>')
.find(str => str.includes('Directores:'))
if (!section) return null
const $section = cheerio.load(section)
return $section('span')
.map((i, el) => $(el).text().trim())
.get()
}
function parseDescription($) {
return $('#Sinopsis > div').text().trim()
}
function parseIcon($) {
const src = $('#ImgProg').attr('src')
const url = new URL(src, 'https://www.reportv.com.ar/buscador/')
return url.href
}
function parseTitle($item) {
const [_, title] = $item('div:nth-child(1) > span').text().split(' - ')
return title
}
function parseCategory($item) {
return $item('div:nth-child(3) > span').text()
}
function parseStart($item, date) {
const [time, _] = $item('div:nth-child(1) > span').text().split(' - ')
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'America/Caracas')
}
function parseDuration($item) {
const [hh, mm, ss] = $item('div:nth-child(4) > span').text().split(':')
return parseInt(hh) * 3600 + parseInt(mm) * 60 + parseInt(ss)
}
function parseItems(content, date) {
if (!content) return []
const $ = cheerio.load(content)
const d = _.startCase(date.locale('es').format('DD MMMM YYYY'))
return $(`.trProg[title*="${d}"]`).toArray()
}

View file

@ -0,0 +1,114 @@
// npx epg-grabber --config=sites/reportv.com.ar/reportv.com.ar.config.js --channels=sites/reportv.com.ar/reportv.com.ar_ve.channels.xml --output=guide.xml --days=2
// npm run channels:parse -- --config=./sites/reportv.com.ar/reportv.com.ar.config.js --output=./sites/reportv.com.ar/reportv.com.ar_ve.channels.xml
const { parser, url, request } = require('./reportv.com.ar.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 axios = require('axios')
jest.mock('axios')
const date = dayjs.utc('2022-10-03', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '914',
xmltv_id: 'VePlusVenezuela.ve'
}
it('can generate valid url', () => {
expect(url).toBe('https://www.reportv.com.ar/buscador/ProgXSenial.php')
})
it('can generate valid request method', () => {
expect(request.method).toBe('POST')
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject({
'Content-Type': 'application/x-www-form-urlencoded'
})
})
it('can generate valid request data', () => {
const result = request.data({ channel, date })
expect(result.get('idSenial')).toBe('914')
expect(result.get('Alineacion')).toBe('2694')
expect(result.get('DiaDesde')).toBe('2022/10/03')
expect(result.get('HoraDesde')).toBe('00:00:00')
})
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
axios.post.mockImplementation((url, data) => {
if (
url === 'https://www.reportv.com.ar/buscador/DetallePrograma.php' &&
data.get('id') == '286096'
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/program1.html'))
})
} else if (
url === 'https://www.reportv.com.ar/buscador/DetallePrograma.php' &&
data.get('id') == '392803'
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/program2.html'))
})
} else {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/no_program.html'))
})
}
})
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: '2022-10-03T04:00:00.000Z',
stop: '2022-10-03T05:00:00.000Z',
title: '¿Quién tiene la razón?',
category: 'Talk Show',
icon: 'https://www.reportv.com.ar/buscador/img/Programas/4401882.jpg',
actors: ['Nancy Álvarez'],
description:
'Espacio que dará de qué hablar cuando la doctora Nancy Álvarez y Carmen Jara, acompañadas de un jurado implacable, lleguen a escuchar y a resolver los problemas de las partes en conflicto para luego decidir quién tiene la razón.'
})
expect(results[21]).toMatchObject({
start: '2022-10-04T03:00:00.000Z',
stop: '2022-10-04T04:00:00.000Z',
title: 'Valeria',
category: 'Comedia',
icon: 'https://www.reportv.com.ar/buscador/img/Programas/18788047.jpg',
directors: ['Inma Torrente'],
actors: [
'Diana Gómez',
'Silma López',
'Paula Malia',
'Teresa Riott',
'Maxi Iglesias',
'Juanlu González',
'Aitor Luna',
'Lauren McFall',
'Éva Martin',
'Raquel Ventosa'
],
description:
'Valeria es una escritora que no está pasando por su mejor momento a nivel profesional y sentimental. La distancia emocional que la separa de su marido la lleva a refugiarse en sus tres mejores amigas: Carmen, Lola y Nerea. Valeria y sus amigas están inmersas en un torbellino de emociones de amor, amistad, celos, infidelidad, dudas, desamor, secretos, trabajo, preocupaciones, alegrías y sueños sobre el futuro.'
})
})
it('can handle empty guide', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
const result = await parser({ content, date })
expect(result).toMatchObject([])
})

View file

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="reportv.com.ar">
<channels>
<channel lang="en" xmltv_id="AdrenalinaSportsNetwork.us" site_id="2793">ADRENALINA SPORTS NETWORK</channel>
<channel lang="en" xmltv_id="AgrotendenciaTV.cr" site_id="2280">AGROTENDENCIA</channel>
<channel lang="en" xmltv_id="ANTV.ve" site_id="2187">ANTV</channel>
<channel lang="en" xmltv_id="AvilaTV.ve" site_id="3300">ÁVILA TV</channel>
<channel lang="en" xmltv_id="BabyTV.uk" site_id="695">BABY TV</channel>
<channel lang="en" xmltv_id="BethelTV.pe" site_id="808">BETHEL</channel>
<channel lang="en" xmltv_id="BoliviaTV.bo" site_id="4055">BOLIVIA TV</channel>
<channel lang="en" xmltv_id="BrazzersTV.us" site_id="3290">BRAZZERS TV</channel>
<channel lang="en" xmltv_id="CanalI.ve" site_id="967">CANAL I</channel>
<channel lang="en" xmltv_id="Colombeia.ve" site_id="2626">COLOMBEIA</channel>
<channel lang="en" xmltv_id="ConCienciaTV.ve" site_id="2831">CONCIENCIA TV</channel>
<channel lang="en" xmltv_id="DWEspanol.de" site_id="16">DW ESPAÑOL</channel>
<channel lang="en" xmltv_id="Eurochannel.us" site_id="337">EUROCHANNEL</channel>
<channel lang="en" xmltv_id="EuropaEuropa.ar" site_id="184">EUROPA EUROPA</channel>
<channel lang="en" xmltv_id="Globovision.ve" site_id="309">GLOBOVISION</channel>
<channel lang="en" xmltv_id="GoldenPremier.mx" site_id="2376">GOLDEN PREMIER</channel>
<channel lang="en" xmltv_id="IVC.ve" site_id="3315">IVC</channel>
<channel lang="en" xmltv_id="IVCHD.ve" site_id="4479">IVC HD</channel>
<channel lang="en" xmltv_id="LaVozdeMaria.do" site_id="1945">LA VOZ DE MARIA</channel>
<channel lang="en" xmltv_id="MeridianoTV.ve" site_id="934">MERIDIANO TV</channel>
<channel lang="en" xmltv_id="MultiPremier.mx" site_id="106">MULTIPREMIER</channel>
<channel lang="en" xmltv_id="PenthouseTV.us" site_id="3291">PENTHOUSE</channel>
<channel lang="en" xmltv_id="RTPInternacional.pt" site_id="931">RTP INTERNACIONAL</channel>
<channel lang="en" xmltv_id="SerTV.pa" site_id="2226">SERTV</channel>
<channel lang="en" xmltv_id="SunChannel.ve" site_id="771">SUN CHANNEL</channel>
<channel lang="en" xmltv_id="TelefeInternacional.ar" site_id="149">TELEFE INTERNACIONAL</channel>
<channel lang="en" xmltv_id="Televen.ve" site_id="408">TELEVEN</channel>
<channel lang="en" xmltv_id="TLT.ve" site_id="3530">TLT</channel>
<channel lang="en" xmltv_id="Tooncast.us" site_id="880">TOONCAST</channel>
<channel lang="en" xmltv_id="TVes.ve" site_id="2186">TVES</channel>
<channel lang="en" xmltv_id="TVFamilia.ve" site_id="3413">TV FAMILIA</channel>
<channel lang="en" xmltv_id="ValeTV.ve" site_id="3357">VALE TV</channel>
<channel lang="en" xmltv_id="Venevision.ve" site_id="2138">VENEVISION</channel>
<channel lang="en" xmltv_id="Venus.ar" site_id="3294">VENUS</channel>
<channel lang="en" xmltv_id="VePlusVenezuela.ve" site_id="914">VENEVISION PLUS</channel>
<channel lang="en" xmltv_id="Vive.ve" site_id="407">VIVE TV</channel>
<!-- <channel lang="en" xmltv_id="" site_id="1054">CLASICOS INSTRUMENTALES</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1101">FOX SPORTS 3</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1102">DISNEY JR</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1112">TRU TV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1117">SY FY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1132">ESPN EXTRA HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="115">HTV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1153">TELEMUNDO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1154">CANAL 13</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1181">DISCOVERY HD THEATER</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1226">NICK JR</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1229">NICKELODEON</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1258">SPACE HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="13">CNN</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1330">CCTV 4</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1332">X-TIME</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1339">MTV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1348">HBO MUNDI</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="135">TV PUBLICA</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1362">AMC</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="137">DE PELICULA</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1502">RUSSIA TODAY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1531">HGTV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1537">STAR CHANNEL HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1720">ROCK ALTERNATIVO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1752">MAS CHIC</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1835">GLITZ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="1966">TBS VERYFUNNY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2005">ESPN 3</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2020">ESPN 3 HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2037">COMEDY CENTRAL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="21">HBO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2127">HBO 2</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2165">HBO PLUS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2202">FOX SPORTS 2</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2204">SPACE</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2217">PASIONES HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="222">ESPN 4 HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2235">LAS ESTRELLAS HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2293">CINEMAX</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2360">NICKMUSIC</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2566">ADRENALINA SPORTS NETWORK HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2603">ESPN</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2669">HOLA TV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2670">HOLA TV HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2790">LIFETIME</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2791">UNIVISION HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="281">CANAL 24 HS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2824">H2</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2835">TLNOVELAS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2899">ESPN 2</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="29">RAI</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2910">PARAMOUNT NETWORK</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="2932">ANIMAL PLANET</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3041">TNT SERIES</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="311">TYC SPORTS HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3135">DISCOVERY HOME AND HEALTH</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3292">PLAYBOY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3313">FANB TV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="334">HBO XTREME</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="335">HBO FAMILY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3352">TVEPACO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3381">CANAL GUIA INTER</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="339">TLC</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3422">HBO POP PANAMERICANO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3450">FOOD NETWORK HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3467">CINECANAL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="374">CUBAVISION</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3750">TLT HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="38">TV5</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="386">DISNEY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="388">TELESUR</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="3901">SHOWVEN TV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="396">DISCOVERY KIDS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="401">GOLDEN</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="403">CARTOON NETWORK</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="404">NATIONAL GEOGRAPHIC</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="413">ENLACE</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="420">VTV</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="423">UNIVERSAL CHANNEL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="427">FX</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="4361">ESPN 4</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="438">DISCOVERY CHANNEL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="445">HISTORY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="446">SONY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="4527">GOLDEN EDGE HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="453">CARTOONITO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="455">A&amp;E MUNDO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="461">TNT</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="466">WARNER</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="473">EL GOURMET</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="479">AXN</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="491">ENTERTAINMENT TELEVISION</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="492">DISCOVERY TURBO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="493">DISCOVERY SCIENCE</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="4993">GOLDEN PLUS HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="500">HBO SIGNATURE</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="532">80S HITS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="533">90S HITS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="535">EXITOS EN ESPAÑOL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="536">EXITOS EN INGLES</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="545">JAZZ CLASICO</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="546">MARIACHI</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="571">NUEVA ERA</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="572">CONTEMPORANEA</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="580">STUDIO UNIVERSAL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="59">TVE</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="591">DISCOVERY ID</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="61">ANTENA3</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="6223">CLAROSPORTS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="63">FILM&amp;ARTS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="64">EWTN</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="6653">BYM SPORTS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="6996">DIRECTV SPORTS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="6997">DIRECTV SPORTS HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="6998">DIRECTV SPORTS 2</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="6999">DIRECTV SPORTS 2 HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="7000">DIRECTV SPORTS +</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="7001">DIRECTV SPORTS + HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="7263">BYM SPORTS HD</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="727">MTV HITS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="778">STAR CHANNEL</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="9">LAS ESTRELLAS</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="910">TCM</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="917">I-SAT</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="933">VH1 CLASSIC</channel> -->
</channels>
</site>