04/2026 Part 2 : Scrapers

Part 1
This commit is contained in:
Ismaël Moret
2026-04-15 10:46:12 +02:00
committed by GitHub
parent d27160fd2b
commit 67c1a7e45e
58 changed files with 11124 additions and 4510 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,374 @@
{
"DatosAccesoAnonimo": {
"TipoEmision": "Pase",
"TipoComercial": "Subscripcion",
"TipoComercial2": {
"Tipo": "Subscripcion",
"Descripcion": null
},
"Freemium": false,
"TiposComerciales": [
{
"Tipo": "Subscripcion",
"Descripcion": null
}
],
"Logos": [
{
"id": "default",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpmos/SEXTA"
},
{
"id": "default",
"state": "over",
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpmos/SEXTA"
},
{
"id": "bg_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpepg/SEXTA"
},
{
"id": "bg_light",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpepg/SEXTA"
},
{
"id": "nobox_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/wpmarcaficha/SEXTA"
}
],
"Precio": null,
"HoraInicio": "1770587100000",
"FechaFinPublicacion": null,
"FormatoVideo": null,
"FormatoAudio": null,
"VersionIdioma": null,
"HoraInicioSaltoCanal": "1770583500000",
"HoraFinSaltoCanal": "1770605100000",
"Subtitulos": [],
"Subtitulos2012": [],
"IndicadorSubtitulosSordos": null
},
"Id": 4235944,
"SerialId": 63188236,
"TipoContenido": "Episodio",
"CodSubTipoContenido": "E",
"SubTipoContenido": "episodio",
"SubTipoContedor": "temporada",
"TipoComercial": "Subscripcion",
"Titulo": "Especial ARV... (T2026): El análisis",
"catalogItemType": "LiveEpisode",
"TipoComercial2": {
"Tipo": "Subscripcion",
"Descripcion": null
},
"Contenedor": {
"Id": 4235938,
"Path": "T-4235940|E-4235944",
"TituloSerie": "Especial ARV elecciones Aragón",
"Temporada": "(T2026)",
"Ficha": "https://ottcache.dof6.com/movistarplus/webplayer/contents/4235938/details?mediaType=FOTOV&profile=OTT&mode=VODRU7D&channels=SEXTA&version=8&tlsStream=true&mdrm=true&showNonRated=true",
"Padre": "https://ottcache.dof6.com/movistarplus/webplayer/contents/4235940/details?mediaType=FOTOV&profile=OTT&mode=VODRU7D&version=8&tlsStream=true&mdrm=true&showNonRated=true"
},
"TituloEpisodio": "El análisis",
"TiposComerciales": [
{
"Tipo": "Subscripcion",
"Descripcion": null
}
],
"NumeroEpisodio": "01",
"TituloEpisodioLargo": "T2026 E1 \"El análisis\"",
"TituloVerLinea1": "Especial ARV elecciones Aragón",
"TituloVerLinea2": "T2026 E1",
"Directo": false,
"Estreno": false,
"TituloHorLinea1": "Especial ARV elecciones Aragón",
"TituloHorLinea2": "T2026 E1 \"El análisis\"",
"NivelMoral": null,
"Lanzable": false,
"TituloSeguimiento": "T2026 E1",
"Serie": {
"Id": 4235940,
"SeasonId": 4235940,
"TituloSerie": "Especial ARV elecciones Aragón",
"Temporada": "(T2026)",
"Ficha": "https://ottcache.dof6.com/movistarplus/webplayer/contents/4235940/details?mediaType=FOTOV&profile=OTT&mode=VODRU7D&version=8&tlsStream=true&mdrm=true&showNonRated=true",
"Descargable": false
},
"ratingLabels": [],
"IdSerie": 4235938,
"Seguible": false,
"OrdenacionDescendente": false,
"Genero": {
"ComAntena": "Política"
},
"Imagen": "https://estatico.emisiondof6.com/recorte/n/dispficha/MSEXTAP4235944",
"DisponibleVOD": false,
"Imagenes": [
{
"id": "default",
"uri": "https://estatico.emisiondof6.com/recorte/n/dispficha/MSEXTAP4235944"
},
{
"id": "horizontal",
"uri": "https://estatico.emisiondof6.com/recorte/n/ywcatalogoh/MSEXTAT4235944"
},
{
"id": "watch2tgr-start",
"uri": "https://estatico.emisiondof6.com/recorte/n/vegtooltip/MSEXTAF4235944.jpg"
},
{
"id": "watch2tgr-end",
"uri": "https://estatico.emisiondof6.com/recorte/n/vegend/MSEXTAF4235944.jpg"
}
],
"Competicion": {
"Fase": null,
"Jornada": null
},
"Descripcion": "Antonio García Ferreras y Ana Pastor analizan y debaten sobre el recuento y los resultados que arrojen las urnas con analistas como Lluís Orriols, Antonio Maestre, Ignacio Escolar, Pilar Velasco, Santiago Martínez Vares y Pablo Montesinos.",
"Sinopsis": "Antonio García Ferreras y Ana Pastor analizan y debaten sobre el recuento y los resultados que arrojen las urnas con analistas como Lluís Orriols, Antonio Maestre, Ignacio Escolar, Pilar Velasco, Santiago Martínez Vares y Pablo Montesinos.",
"Duracion": 136,
"Nacionalidad": "España",
"Anno": "2026",
"Actores": null,
"Directores": null,
"Descargable": false,
"Valoracion": {
"Valoracion": 2.8,
"Valoraciones": 33
},
"TituloNormalizado": "especial-arv-elecciones-aragon-t2026/el-analisis",
"RutaNormalizada": "entretenimiento/especial-arv-elecciones-aragon-t2026/el-analisis",
"Pases": [
{
"catalogItemType": "LiveEpisode",
"HoraInicio": "1770587100000",
"Duracion": 136,
"HoraInicioSaltoCanal": "1770583500000",
"Grabable": false,
"HoraFinSaltoCanal": "1770605100000",
"TemporadaGrabable": true,
"Canal": {
"CodCadenaTv": "SEXTA",
"Nombre": "La Sexta",
"Uid": 444099,
"CasId": "4526",
"ServiceUid": "717",
"ServiceUid2": "4526",
"ServiceId": 6,
"PuntoReproduccion": "https://lasexta-dash-movistarplus.emisiondof6.com/manifest.mpd",
"Logos": [
{
"id": "default",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpmos/SEXTA"
},
{
"id": "default",
"state": "over",
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpmos/SEXTA"
},
{
"id": "bg_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpepg/SEXTA"
},
{
"id": "bg_light",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpepg/SEXTA"
},
{
"id": "nobox_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/wpmarcaficha/SEXTA"
}
],
"Dial": 6,
"HomeZone": false,
"FormatoAudio": null,
"FormatoVideo": "HD",
"LogoTaquilla": null,
"Logo": "https://estatico.emisiondof6.com/recorte/m-DP/wpmos/SEXTA",
"HDR": false,
"EsVirtual": false,
"CDN": "tcdn",
"EsSatelite": false,
"QMWatermark": false,
"links": []
},
"Fase": null,
"CodEventoRejilla": null,
"ShowId": 63188242,
"SerialId": 63188236,
"tvProducts": [
"BOBFUT2",
"DIFUSION",
"DO0001",
"DO0002",
"DO0003",
"DO0004",
"FUSICE",
"MOVFAM",
"NDDEM2",
"NDDEMO",
"PAQINI",
"PR01H",
"PR01S",
"TRIDIS",
"TVBACH",
"TVBAFU",
"TVBALI",
"TVCOMU",
"UTX00",
"UTX0Y",
"UTX1H",
"UTX1I",
"UTX2A",
"UTX2C",
"UTX2J",
"UTX2N",
"UTX2P",
"UTX2Q",
"UTX2R",
"UTX32",
"UTX37",
"UTX38",
"UTX4I",
"UTX4N",
"UTX4P",
"UTX5M",
"UTX5V",
"UTX6C",
"UTX7T",
"UTX7U",
"UTX90",
"UTXAH",
"UTXC7",
"UTXC8",
"UTXCL",
"UTXCN",
"UTXCP",
"UTXD0",
"UTXD3",
"UTXHA",
"UTXHB",
"UTXHC",
"UTXHD",
"UTXIC",
"UTXIE",
"UTXIF",
"UTXIH",
"UTXII",
"UTXIR",
"UTXIS"
],
"BlackOutU7D": false,
"links": [
{
"rel": "start-over",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/tvMediaURLs?tvProgram.id=63188242&svc=startover",
"state": null
},
{
"rel": "catch-up",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/tvMediaURLs?tvProgram.id=63188242&svc=cutv",
"state": null
},
{
"rel": "npvr",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/tvMediaURLs?tvProgram.id=63188242&svc=npvr",
"state": null
}
]
}
],
"LenguajeSignos": false,
"Upselling": "PKS--1",
"audioDescription": {
"available": false,
"audios": []
},
"Trailers": [],
"Eventos": [],
"BingeWatchingAction": "none",
"StreamTag": false,
"VodItems": [],
"OpcionesFavoritos": [
{
"Id": 63188236,
"Family": "tv",
"Texto": "TEMPORADA"
}
],
"links": [
{
"rel": "mas_info",
"href": "https://estatico.emisiondof6.com/ficha/especial-arv-elecciones-aragon-t2026/el-analisis/?tipo=E&id=4235944"
},
{
"rel": "ver_ahora",
"href": "https://ver.movistarplus.es/ficha/especial-arv-elecciones-aragon-t2026/el-analisis/?id=4235944"
},
{
"rel": "shows",
"href": "/movistarplus/contents/4235944/shows"
},
{
"rel": "alternate",
"href": "appmovistar://movistarplus.es/ficha?id=4235944&referrer=api",
"class": "entryPoint",
"hints": {
"devices": [
"android.cell",
"iphone",
"amazon.tv"
]
}
},
{
"rel": "alternate",
"href": "https://wl.movistarplus.es/ficha/?id=4235944&referrer=api",
"class": "entryPoint",
"hints": {
"devices": [
"web"
]
}
},
{
"rel": "alternate",
"href": "https://wl.movistarplus.es/play?id=4235944&referrer=api",
"class": "play",
"hints": {
"devices": [
"web"
]
}
},
{
"rel": "untrack2",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/bookmarks/vod/4235944",
"hints": {
"allow": [
"DELETE"
],
"auth-req": [
{
"scheme": "asmgr"
}
]
}
},
{
"rel": "self",
"href": "https://ottcache.dof6.com/movistarplus/webplayer/contents/63188242/details?mediaType=FOTOV&profile=OTT&mode=U7D2&channels=SEXTA&version=8&tlsStream=true&mdrm=true&catalog=catchup&showNonRated=true",
"id": 63188236
}
]
}

View File

@@ -0,0 +1,378 @@
{
"DatosAccesoAnonimo": {
"TipoEmision": "Pase",
"TipoComercial": "Subscripcion",
"TipoComercial2": {
"Tipo": "Subscripcion",
"Descripcion": null
},
"Freemium": false,
"TiposComerciales": [
{
"Tipo": "Subscripcion",
"Descripcion": null
}
],
"Logos": [
{
"id": "default",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpmos/SEXTA"
},
{
"id": "default",
"state": "over",
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpmos/SEXTA"
},
{
"id": "bg_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpepg/SEXTA"
},
{
"id": "bg_light",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpepg/SEXTA"
},
{
"id": "nobox_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/wpmarcaficha/SEXTA"
}
],
"Precio": null,
"HoraInicio": "1770669060000",
"FechaFinPublicacion": null,
"FormatoVideo": null,
"FormatoAudio": null,
"VersionIdioma": null,
"HoraInicioSaltoCanal": "1770665460000",
"HoraFinSaltoCanal": "1770687060000",
"Subtitulos": [],
"Subtitulos2012": [],
"IndicadorSubtitulosSordos": null
},
"Id": 4236939,
"SerialId": 62244130,
"TipoContenido": "Episodio",
"CodSubTipoContenido": "E",
"SubTipoContenido": "episodio",
"SubTipoContedor": "temporada",
"TipoComercial": "Subscripcion",
"Titulo": "El intermedio (T20): Ep.624",
"catalogItemType": "LiveEpisode",
"TipoComercial2": {
"Tipo": "Subscripcion",
"Descripcion": null
},
"Contenedor": {
"Id": 901510,
"Path": "T-4105626|E-4236939",
"TituloSerie": "El intermedio",
"Temporada": "(T20)",
"Ficha": "https://ottcache.dof6.com/movistarplus/webplayer/contents/901510/details?mediaType=FOTOV&profile=OTT&mode=VODRU7D&channels=SEXTA&version=8&tlsStream=true&mdrm=true&showNonRated=true",
"Padre": "https://ottcache.dof6.com/movistarplus/webplayer/contents/4105626/details?mediaType=FOTOV&profile=OTT&mode=VODRU7D&version=8&tlsStream=true&mdrm=true&showNonRated=true"
},
"TituloEpisodio": "Episodio 624",
"TiposComerciales": [
{
"Tipo": "Subscripcion",
"Descripcion": null
}
],
"NumeroEpisodio": "624",
"TituloEpisodioLargo": "T20 E624 \"Episodio 624\"",
"TituloVerLinea1": "El intermedio",
"TituloVerLinea2": "T20 E624",
"Directo": false,
"Estreno": false,
"TituloHorLinea1": "El intermedio",
"TituloHorLinea2": "T20 E624 \"Episodio 624\"",
"NivelMoral": {
"_id": "08",
"Id": "+12",
"Logo": "https://voddelivery.emisiondof6.com/images/logos/logos_nivelmoral/12.png"
},
"Lanzable": false,
"TituloSeguimiento": "T20 E624",
"Serie": {
"Id": 4105626,
"SeasonId": 4105626,
"TituloSerie": "El intermedio",
"Temporada": "(T20)",
"Ficha": "https://ottcache.dof6.com/movistarplus/webplayer/contents/4105626/details?mediaType=FOTOV&profile=OTT&mode=VODRU7D&version=8&tlsStream=true&mdrm=true&showNonRated=true",
"Descargable": false
},
"ratingLabels": [],
"IdSerie": 901510,
"Seguible": false,
"OrdenacionDescendente": false,
"Genero": {
"ComAntena": "Humor"
},
"Imagen": "https://estatico.emisiondof6.com/recorte/n/dispficha/MSEXTAP4236939",
"DisponibleVOD": false,
"Imagenes": [
{
"id": "default",
"uri": "https://estatico.emisiondof6.com/recorte/n/dispficha/MSEXTAP4236939"
},
{
"id": "horizontal",
"uri": "https://estatico.emisiondof6.com/recorte/n/ywcatalogoh/MSEXTAT4236939"
},
{
"id": "watch2tgr-start",
"uri": "https://estatico.emisiondof6.com/recorte/n/vegtooltip/MSEXTAF4236939.jpg"
},
{
"id": "watch2tgr-end",
"uri": "https://estatico.emisiondof6.com/recorte/n/vegend/MSEXTAF4236939.jpg"
}
],
"Competicion": {
"Fase": null,
"Jornada": null
},
"Descripcion": "El Gran Wyoming, con la ayuda de sus colaboradores, analiza en clave de humor las noticias más importantes del día. El sello inconfundible del cómico sirve para completar la información desde un punto de vista más distendido e irónico.",
"Sinopsis": "El Gran Wyoming, con la ayuda de sus colaboradores, analiza en clave de humor las noticias más importantes del día. El sello inconfundible del cómico sirve para completar la información desde un punto de vista más distendido e irónico.",
"Duracion": 93,
"Nacionalidad": "España",
"Anno": "2025",
"Actores": null,
"Directores": null,
"Descargable": false,
"Valoracion": {
"Valoracion": 3,
"Valoraciones": 30
},
"TituloNormalizado": "el-intermedio-t20/episodio-624",
"RutaNormalizada": "entretenimiento/el-intermedio-t20/episodio-624",
"Pases": [
{
"catalogItemType": "LiveEpisode",
"HoraInicio": "1770669060000",
"Duracion": 93,
"HoraInicioSaltoCanal": "1770665460000",
"Grabable": false,
"HoraFinSaltoCanal": "1770687060000",
"TemporadaGrabable": true,
"Canal": {
"CodCadenaTv": "SEXTA",
"Nombre": "La Sexta",
"Uid": 444099,
"CasId": "4526",
"ServiceUid": "717",
"ServiceUid2": "4526",
"ServiceId": 6,
"PuntoReproduccion": "https://lasexta-dash-movistarplus.emisiondof6.com/manifest.mpd",
"Logos": [
{
"id": "default",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpmos/SEXTA"
},
{
"id": "default",
"state": "over",
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpmos/SEXTA"
},
{
"id": "bg_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DP/wpepg/SEXTA"
},
{
"id": "bg_light",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-DPBLAN/wpepg/SEXTA"
},
{
"id": "nobox_dark",
"state": null,
"uri": "https://estatico.emisiondof6.com/recorte/m-NEONEGR/wpmarcaficha/SEXTA"
}
],
"Dial": 6,
"HomeZone": false,
"FormatoAudio": null,
"FormatoVideo": "HD",
"LogoTaquilla": null,
"Logo": "https://estatico.emisiondof6.com/recorte/m-DP/wpmos/SEXTA",
"HDR": false,
"EsVirtual": false,
"CDN": "tcdn",
"EsSatelite": false,
"QMWatermark": false,
"links": []
},
"Fase": null,
"CodEventoRejilla": null,
"ShowId": 63182873,
"SerialId": 62244130,
"tvProducts": [
"BOBFUT2",
"DIFUSION",
"DO0001",
"DO0002",
"DO0003",
"DO0004",
"FUSICE",
"MOVFAM",
"NDDEM2",
"NDDEMO",
"PAQINI",
"PR01H",
"PR01S",
"TRIDIS",
"TVBACH",
"TVBAFU",
"TVBALI",
"TVCOMU",
"UTX00",
"UTX0Y",
"UTX1H",
"UTX1I",
"UTX2A",
"UTX2C",
"UTX2J",
"UTX2N",
"UTX2P",
"UTX2Q",
"UTX2R",
"UTX32",
"UTX37",
"UTX38",
"UTX4I",
"UTX4N",
"UTX4P",
"UTX5M",
"UTX5V",
"UTX6C",
"UTX7T",
"UTX7U",
"UTX90",
"UTXAH",
"UTXC7",
"UTXC8",
"UTXCL",
"UTXCN",
"UTXCP",
"UTXD0",
"UTXD3",
"UTXHA",
"UTXHB",
"UTXHC",
"UTXHD",
"UTXIC",
"UTXIE",
"UTXIF",
"UTXIH",
"UTXII",
"UTXIR",
"UTXIS"
],
"BlackOutU7D": false,
"links": [
{
"rel": "start-over",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/tvMediaURLs?tvProgram.id=63182873&svc=startover",
"state": null
},
{
"rel": "catch-up",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/tvMediaURLs?tvProgram.id=63182873&svc=cutv",
"state": null
},
{
"rel": "npvr",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/tvMediaURLs?tvProgram.id=63182873&svc=npvr",
"state": null
}
]
}
],
"LenguajeSignos": false,
"Upselling": "PKS--1",
"audioDescription": {
"available": false,
"audios": []
},
"Trailers": [],
"Eventos": [],
"BingeWatchingAction": "none",
"StreamTag": false,
"VodItems": [],
"OpcionesFavoritos": [
{
"Id": 62244130,
"Family": "tv",
"Texto": "TEMPORADA"
}
],
"links": [
{
"rel": "mas_info",
"href": "https://estatico.emisiondof6.com/ficha/el-intermedio-t20/episodio-624/?tipo=E&id=4236939"
},
{
"rel": "ver_ahora",
"href": "https://ver.movistarplus.es/ficha/el-intermedio-t20/episodio-624/?id=4236939"
},
{
"rel": "shows",
"href": "/movistarplus/contents/4236939/shows"
},
{
"rel": "alternate",
"href": "appmovistar://movistarplus.es/ficha?id=4236939&referrer=api",
"class": "entryPoint",
"hints": {
"devices": [
"android.cell",
"iphone",
"amazon.tv"
]
}
},
{
"rel": "alternate",
"href": "https://wl.movistarplus.es/ficha/?id=4236939&referrer=api",
"class": "entryPoint",
"hints": {
"devices": [
"web"
]
}
},
{
"rel": "alternate",
"href": "https://wl.movistarplus.es/play?id=4236939&referrer=api",
"class": "play",
"hints": {
"devices": [
"web"
]
}
},
{
"rel": "untrack2",
"href": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/bookmarks/rec/63182873",
"hints": {
"allow": [
"DELETE"
],
"auth-req": [
{
"scheme": "asmgr"
}
]
}
},
{
"rel": "self",
"href": "https://ottcache.dof6.com/movistarplus/webplayer/contents/63182873/details?mediaType=FOTOV&profile=OTT&mode=VODREJILLA&channels=SEXTA&version=8&tlsStream=true&mdrm=true&catalog=events&showNonRated=true",
"id": 63182873
}
]
}

View File

@@ -1,181 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="movistarplus.es" site_id="7tvmur" lang="es" xmltv_id="">7 TV Región Murcia</channel>
<channel site="movistarplus.es" site_id="13tv" lang="es" xmltv_id="">TRECE</channel>
<channel site="movistarplus.es" site_id="24h" lang="es" xmltv_id="">24 Horas</channel>
<channel site="movistarplus.es" site_id="3_24" lang="es" xmltv_id="">3 24</channel>
<channel site="movistarplus.es" site_id="a3" lang="es" xmltv_id="">Antena 3</channel>
<channel site="movistarplus.es" site_id="aljaze" lang="es" xmltv_id="">Al Jazeera English</channel>
<channel site="movistarplus.es" site_id="andatv" lang="es" xmltv_id="">Andalucía TV</channel>
<channel site="movistarplus.es" site_id="antv" lang="es" xmltv_id="">Canal Sur Andalucía</channel>
<channel site="movistarplus.es" site_id="apunt" lang="es" xmltv_id="">À Punt</channel>
<channel site="movistarplus.es" site_id="aragon" lang="es" xmltv_id="">Aragón TV Int</channel>
<channel site="movistarplus.es" site_id="aragtv" lang="es" xmltv_id="">Aragón TV</channel>
<channel site="movistarplus.es" site_id="arirhd" lang="es" xmltv_id="">Arirang TV HD</channel>
<channel site="movistarplus.es" site_id="arthur" lang="es" xmltv_id="">M+ Deportes 2</channel>
<channel site="movistarplus.es" site_id="atress" lang="es" xmltv_id="">Atreseries</channel>
<channel site="movistarplus.es" site_id="axn" lang="es" xmltv_id="">AXN</channel>
<channel site="movistarplus.es" site_id="baby" lang="es" xmltv_id="">Baby TV</channel>
<channel site="movistarplus.es" site_id="bbc" lang="es" xmltv_id="">BBC World</channel>
<channel site="movistarplus.es" site_id="bbdra" lang="es" xmltv_id="">BBC Drama</channel>
<channel site="movistarplus.es" site_id="bbfoo" lang="es" xmltv_id="">BBC Food</channel>
<channel site="movistarplus.es" site_id="bbgea" lang="es" xmltv_id="">BBC Top Gear</channel>
<channel site="movistarplus.es" site_id="bbhis" lang="es" xmltv_id="">BBC History</channel>
<channel site="movistarplus.es" site_id="bemad" lang="es" xmltv_id="">BE MAD</channel>
<channel site="movistarplus.es" site_id="bl" lang="es" xmltv_id="">Bloomberg</channel>
<channel site="movistarplus.es" site_id="boing" lang="es" xmltv_id="">Boing</channel>
<channel site="movistarplus.es" site_id="btv" lang="es" xmltv_id="">Betevé</channel>
<channel site="movistarplus.es" site_id="c4" lang="es" xmltv_id="">Cuatro</channel>
<channel site="movistarplus.es" site_id="c33" lang="es" xmltv_id="">SX3</channel>
<channel site="movistarplus.es" site_id="can33" lang="es" xmltv_id="">33</channel>
<channel site="movistarplus.es" site_id="canar" lang="es" xmltv_id="">TV Canaria</channel>
<channel site="movistarplus.es" site_id="cansur" lang="es" xmltv_id="">Canal Sur</channel>
<channel site="movistarplus.es" site_id="casman" lang="es" xmltv_id="">Castilla la Mancha TV</channel>
<channel site="movistarplus.es" site_id="cazpes" lang="es" xmltv_id="">Caza y Pesca</channel>
<channel site="movistarplus.es" site_id="cctv-e" lang="es" xmltv_id="">CGTN Español</channel>
<channel site="movistarplus.es" site_id="cgtnd" lang="es" xmltv_id="">CGTN Documentary</channel>
<channel site="movistarplus.es" site_id="cgtndo" lang="es" xmltv_id="">CGTN Documentary HD</channel>
<channel site="movistarplus.es" site_id="cgtnen" lang="es" xmltv_id="">CGTN English HD</channel>
<channel site="movistarplus.es" site_id="cgtnfr" lang="es" xmltv_id="">CGTN Français HD</channel>
<channel site="movistarplus.es" site_id="chap1" lang="es" xmltv_id="">M+ Liga de Campeones 2</channel>
<channel site="movistarplus.es" site_id="chap2" lang="es" xmltv_id="">M+ Liga de Campeones 3</channel>
<channel site="movistarplus.es" site_id="chap3" lang="es" xmltv_id="">M+ Liga de Campeones 4</channel>
<channel site="movistarplus.es" site_id="chap4" lang="es" xmltv_id="">M+ Liga de Campeones 5</channel>
<channel site="movistarplus.es" site_id="chap5" lang="es" xmltv_id="">M+ Liga de Campeones 6</channel>
<channel site="movistarplus.es" site_id="chap6" lang="es" xmltv_id="">M+ Liga de Campeones 7</channel>
<channel site="movistarplus.es" site_id="chap7" lang="es" xmltv_id="">M+ Liga de Campeones 8</channel>
<channel site="movistarplus.es" site_id="chap8" lang="es" xmltv_id="">M+ Liga de Campeones 9</channel>
<channel site="movistarplus.es" site_id="chap9" lang="es" xmltv_id="">M+ Liga de Campeones 10</channel>
<channel site="movistarplus.es" site_id="chap10" lang="es" xmltv_id="">M+ Liga de Campeones 11</channel>
<channel site="movistarplus.es" site_id="chap11" lang="es" xmltv_id="">M+ Liga de Campeones 12</channel>
<channel site="movistarplus.es" site_id="chap12" lang="es" xmltv_id="">M+ Liga de Campeones 13</channel>
<channel site="movistarplus.es" site_id="chapio" lang="es" xmltv_id="">M+ Liga de Campeones</channel>
<channel site="movistarplus.es" site_id="chile" lang="es" xmltv_id="">TV Chile</channel>
<channel site="movistarplus.es" site_id="cl13" lang="es" xmltv_id="">Calle 13</channel>
<channel site="movistarplus.es" site_id="clantv" lang="es" xmltv_id="">Clan TVE</channel>
<channel site="movistarplus.es" site_id="classd" lang="es" xmltv_id="">Classica</channel>
<channel site="movistarplus.es" site_id="cnn" lang="es" xmltv_id="">CNN Int</channel>
<channel site="movistarplus.es" site_id="colomb" lang="es" xmltv_id="">TV Colombia</channel>
<channel site="movistarplus.es" site_id="cosmo" lang="es" xmltv_id="">COSMO</channel>
<channel site="movistarplus.es" site_id="cpacci" lang="es" xmltv_id="">M+ Acción</channel>
<channel site="movistarplus.es" site_id="cpcole" lang="es" xmltv_id="">M+ Drama</channel>
<channel site="movistarplus.es" site_id="cpcome" lang="es" xmltv_id="">M+ Comedia</channel>
<channel site="movistarplus.es" site_id="cpdep" lang="es" xmltv_id="">M+ Deportes</channel>
<channel site="movistarplus.es" site_id="csurhd" lang="es" xmltv_id="">Canal Sur HD</channel>
<channel site="movistarplus.es" site_id="cubav" lang="es" xmltv_id="">Cubavisión</channel>
<channel site="movistarplus.es" site_id="cyltv" lang="es" xmltv_id="">La 7</channel>
<channel site="movistarplus.es" site_id="dayst" lang="es" xmltv_id="">Daystar Español HD</channel>
<channel site="movistarplus.es" site_id="dazn3" lang="es" xmltv_id="">DAZN 3</channel>
<channel site="movistarplus.es" site_id="dazn4" lang="es" xmltv_id="">DAZN 4</channel>
<channel site="movistarplus.es" site_id="daznl2" lang="es" xmltv_id="">DAZN LALIGA 2</channel>
<channel site="movistarplus.es" site_id="daznli" lang="es" xmltv_id="">DAZN LALIGA</channel>
<channel site="movistarplus.es" site_id="dcesp" lang="es" xmltv_id="">M+ Cine Español</channel>
<channel site="movistarplus.es" site_id="dch" lang="es" xmltv_id="">Disney Channel</channel>
<channel site="movistarplus.es" site_id="dcr" lang="es" xmltv_id="">Discovery</channel>
<channel site="movistarplus.es" site_id="dcrmax" lang="es" xmltv_id="">DMAX</channel>
<channel site="movistarplus.es" site_id="divini" lang="es" xmltv_id="">Divinity</channel>
<channel site="movistarplus.es" site_id="dkiss" lang="es" xmltv_id="">DKISS</channel>
<channel site="movistarplus.es" site_id="dwsp" lang="es" xmltv_id="">Dreamworks</channel>
<channel site="movistarplus.es" site_id="energy" lang="es" xmltv_id="">Energy</channel>
<channel site="movistarplus.es" site_id="enw" lang="es" xmltv_id="">Euronews</channel>
<channel site="movistarplus.es" site_id="esp" lang="es" xmltv_id="">Eurosport 1</channel>
<channel site="movistarplus.es" site_id="esp2" lang="es" xmltv_id="">Eurosport 2</channel>
<channel site="movistarplus.es" site_id="esp3" lang="es" xmltv_id="">Esport 3</channel>
<channel site="movistarplus.es" site_id="esp4k" lang="es" xmltv_id="">Eurosport 4K</channel>
<channel site="movistarplus.es" site_id="etb" lang="es" xmltv_id="">EITB Basque</channel>
<channel site="movistarplus.es" site_id="etb1" lang="es" xmltv_id="">ETB 1</channel>
<channel site="movistarplus.es" site_id="etb2" lang="es" xmltv_id="">ETB 2</channel>
<channel site="movistarplus.es" site_id="etb3" lang="es" xmltv_id="">ETB 3</channel>
<channel site="movistarplus.es" site_id="ewtn" lang="es" xmltv_id="">EWTN</channel>
<channel site="movistarplus.es" site_id="extre" lang="es" xmltv_id="">Canal Extremadura</channel>
<channel site="movistarplus.es" site_id="extrem" lang="es" xmltv_id="">Canal Extremadura Sat</channel>
<channel site="movistarplus.es" site_id="fdfic" lang="es" xmltv_id="">Factoría de Ficción</channel>
<channel site="movistarplus.es" site_id="foxge" lang="es" xmltv_id="">STAR Channel</channel>
<channel site="movistarplus.es" site_id="france" lang="es" xmltv_id="">FRANCE24 (FR)</channel>
<channel site="movistarplus.es" site_id="futrep" lang="es" xmltv_id="">Canal Fútbol Replay</channel>
<channel site="movistarplus.es" site_id="galav" lang="es" xmltv_id="">Canal de las Estrellas</channel>
<channel site="movistarplus.es" site_id="garage" lang="es" xmltv_id="">El Garage TV</channel>
<channel site="movistarplus.es" site_id="gol" lang="es" xmltv_id="">GOL PLAY</channel>
<channel site="movistarplus.es" site_id="golf2" lang="es" xmltv_id="">M+ Golf 2</channel>
<channel site="movistarplus.es" site_id="golf+" lang="es" xmltv_id="">M+ Golf</channel>
<channel site="movistarplus.es" site_id="hdtq10" lang="es" xmltv_id="">Alquiler HD</channel>
<channel site="movistarplus.es" site_id="ib3" lang="es" xmltv_id="">IB3</channel>
<channel site="movistarplus.es" site_id="iberal" lang="es" xmltv_id="">Iberalia TV</channel>
<channel site="movistarplus.es" site_id="inteco" lang="es" xmltv_id="">El Toro TV</channel>
<channel site="movistarplus.es" site_id="inteua" lang="es" xmltv_id="">1+1 Internacional</channel>
<channel site="movistarplus.es" site_id="la2" lang="es" xmltv_id="">LA 2</channel>
<channel site="movistarplus.es" site_id="m1sd" lang="es" xmltv_id="">DAZN 1</channel>
<channel site="movistarplus.es" site_id="m2sd" lang="es" xmltv_id="">DAZN 2</channel>
<channel site="movistarplus.es" site_id="maxava" lang="es" xmltv_id="">Max Avances</channel>
<channel site="movistarplus.es" site_id="mcapra" lang="es" xmltv_id="">M+E: Demi Moore</channel>
<channel site="movistarplus.es" site_id="mclas" lang="es" xmltv_id="">M+ Clásicos</channel>
<channel site="movistarplus.es" site_id="mcopa" lang="es" xmltv_id="">M+ Copa del Rey</channel>
<channel site="movistarplus.es" site_id="mdoc" lang="es" xmltv_id="">M+ Documentales</channel>
<channel site="movistarplus.es" site_id="medite" lang="es" xmltv_id="">La Ocho TV</channel>
<channel site="movistarplus.es" site_id="mega" lang="es" xmltv_id="">Mega</channel>
<channel site="movistarplus.es" site_id="mellav" lang="es" xmltv_id="">M+ Ellas V</channel>
<channel site="movistarplus.es" site_id="mezzli" lang="es" xmltv_id="">Mezzo Live</channel>
<channel site="movistarplus.es" site_id="mezzo" lang="es" xmltv_id="">Mezzo</channel>
<channel site="movistarplus.es" site_id="mgoya" lang="es" xmltv_id="">M+ Los Goya</channel>
<channel site="movistarplus.es" site_id="mindi" lang="es" xmltv_id="">M+ Indie</channel>
<channel site="movistarplus.es" site_id="mlig1" lang="es" xmltv_id="">M+ LALIGA TV 2</channel>
<channel site="movistarplus.es" site_id="mlig2" lang="es" xmltv_id="">M+ LALIGA TV 3</channel>
<channel site="movistarplus.es" site_id="mlig3" lang="es" xmltv_id="">M+ LALIGA TV 4</channel>
<channel site="movistarplus.es" site_id="mliga" lang="es" xmltv_id="">M+ LALIGA TV</channel>
<channel site="movistarplus.es" site_id="mligs" lang="es" xmltv_id="">LALIGA TV HYPERMOTION</channel>
<channel site="movistarplus.es" site_id="mligs2" lang="es" xmltv_id="">LALIGA TV HYPERMOTION 2</channel>
<channel site="movistarplus.es" site_id="mligs3" lang="es" xmltv_id="">LALIGA TV HYPERMOTION 3</channel>
<channel site="movistarplus.es" site_id="mliguh" lang="es" xmltv_id="">M+ LALIGA TV UHD</channel>
<channel site="movistarplus.es" site_id="morig" lang="es" xmltv_id="">M+ Originales</channel>
<channel site="movistarplus.es" site_id="mplus" lang="es" xmltv_id="">Movistar Plus+</channel>
<channel site="movistarplus.es" site_id="mplus2" lang="es" xmltv_id="">Movistar Plus+ 2</channel>
<channel site="movistarplus.es" site_id="mtv" lang="es" xmltv_id="">MTV</channel>
<channel site="movistarplus.es" site_id="multi6" lang="es" xmltv_id="">M+ Deportes 7</channel>
<channel site="movistarplus.es" site_id="multi8" lang="es" xmltv_id="">M+ Deportes 6</channel>
<channel site="movistarplus.es" site_id="mv1" lang="es" xmltv_id="">M+ Cine</channel>
<channel site="movistarplus.es" site_id="mv2" lang="es" xmltv_id="">M+ Series</channel>
<channel site="movistarplus.es" site_id="mvf1" lang="es" xmltv_id="">DAZN F1</channel>
<channel site="movistarplus.es" site_id="natgeo" lang="es" xmltv_id="">National Geographic</channel>
<channel site="movistarplus.es" site_id="natgw" lang="es" xmltv_id="">Nat Geo Wild</channel>
<channel site="movistarplus.es" site_id="nava" lang="es" xmltv_id="">Navarra TV</channel>
<channel site="movistarplus.es" site_id="nbc" lang="es" xmltv_id="">CNBC</channel>
<channel site="movistarplus.es" site_id="negotv" lang="es" xmltv_id="">Negocios TV</channel>
<channel site="movistarplus.es" site_id="neox" lang="es" xmltv_id="">Neox</channel>
<channel site="movistarplus.es" site_id="nick" lang="es" xmltv_id="">Nickelodeon</channel>
<channel site="movistarplus.es" site_id="nickjr" lang="es" xmltv_id="">NICK JR</channel>
<channel site="movistarplus.es" site_id="nova" lang="es" xmltv_id="">Nova</channel>
<channel site="movistarplus.es" site_id="otra" lang="es" xmltv_id="">La Otra</channel>
<channel site="movistarplus.es" site_id="parch" lang="es" xmltv_id="">Paramount Network</channel>
<channel site="movistarplus.es" site_id="pcm" lang="es" xmltv_id="">Comedy Central</channel>
<channel site="movistarplus.es" site_id="playdc" lang="es" xmltv_id="">Disney Junior</channel>
<channel site="movistarplus.es" site_id="realm" lang="es" xmltv_id="">Real Madrid TV</channel>
<channel site="movistarplus.es" site_id="resist" lang="es" xmltv_id="">La Resistencia</channel>
<channel site="movistarplus.es" site_id="sci-fi" lang="es" xmltv_id="">SYFY</channel>
<channel site="movistarplus.es" site_id="set" lang="es" xmltv_id="">AXN Movies</channel>
<channel site="movistarplus.es" site_id="sexta" lang="es" xmltv_id="">La Sexta</channel>
<channel site="movistarplus.es" site_id="skynw" lang="es" xmltv_id="">Sky News</channel>
<channel site="movistarplus.es" site_id="skysho" lang="es" xmltv_id="">SkyShowtime 1</channel>
<channel site="movistarplus.es" site_id="t5" lang="es" xmltv_id="">Telecinco</channel>
<channel site="movistarplus.es" site_id="tcm" lang="es" xmltv_id="">TCM</channel>
<channel site="movistarplus.es" site_id="tdep" lang="es" xmltv_id="">Teledeporte</channel>
<channel site="movistarplus.es" site_id="telmad" lang="es" xmltv_id="">Telemadrid</channel>
<channel site="movistarplus.es" site_id="telmin" lang="es" xmltv_id="">Telemadrid Int.</channel>
<channel site="movistarplus.es" site_id="ten" lang="es" xmltv_id="">Ten</channel>
<channel site="movistarplus.es" site_id="tlesur" lang="es" xmltv_id="">Telesur</channel>
<channel site="movistarplus.es" site_id="tnt" lang="es" xmltv_id="">Warner TV</channel>
<channel site="movistarplus.es" site_id="tpa" lang="es" xmltv_id="">TPA</channel>
<channel site="movistarplus.es" site_id="tq1" lang="es" xmltv_id="">Alquiler 1</channel>
<channel site="movistarplus.es" site_id="tv3cat" lang="es" xmltv_id="">TV3</channel>
<channel site="movistarplus.es" site_id="tv5" lang="es" xmltv_id="">TV5MONDE</channel>
<channel site="movistarplus.es" site_id="tvc" lang="es" xmltv_id="">TV3 Cat</channel>
<channel site="movistarplus.es" site_id="tve" lang="es" xmltv_id="">LA 1</channel>
<channel site="movistarplus.es" site_id="tvg" lang="es" xmltv_id="">TVG Europa</channel>
<channel site="movistarplus.es" site_id="tvg2" lang="es" xmltv_id="">TVG 2</channel>
<channel site="movistarplus.es" site_id="tvgal" lang="es" xmltv_id="">TVG -TV Galicia</channel>
<channel site="movistarplus.es" site_id="ubeat" lang="es" xmltv_id="">Ubeat</channel>
<channel site="movistarplus.es" site_id="usop2" lang="es" xmltv_id="">M+ Deportes 3</channel>
<channel site="movistarplus.es" site_id="usop3" lang="es" xmltv_id="">M+ Deportes 4</channel>
<channel site="movistarplus.es" site_id="usop11" lang="es" xmltv_id="">M+ Deportes 5</channel>
<channel site="movistarplus.es" site_id="vamosd" lang="es" xmltv_id="">M+ Vamos</channel>
<channel site="movistarplus.es" site_id="vh1" lang="es" xmltv_id="">MTV 00s</channel>
<channel site="movistarplus.es" site_id="13TV" lang="es" xmltv_id="">TRECE</channel>
<channel site="movistarplus.es" site_id="24H" lang="es" xmltv_id="">24 Horas</channel>
<channel site="movistarplus.es" site_id="A3" lang="es" xmltv_id="">Antena 3</channel>
<channel site="movistarplus.es" site_id="ALJAZE" lang="es" xmltv_id="">Al Jazeera English</channel>
<channel site="movistarplus.es" site_id="ANTV" lang="es" xmltv_id="">Canal Sur Andalucía</channel>
<channel site="movistarplus.es" site_id="ARAGON" lang="es" xmltv_id="">Aragón TV Int</channel>
<channel site="movistarplus.es" site_id="ARTHUR" lang="es" xmltv_id="">M+ Deportes 2</channel>
<channel site="movistarplus.es" site_id="ATRESS" lang="es" xmltv_id="">Atreseries</channel>
<channel site="movistarplus.es" site_id="AXN" lang="es" xmltv_id="">AXN</channel>
<channel site="movistarplus.es" site_id="BABY" lang="es" xmltv_id="">Baby TV</channel>
<channel site="movistarplus.es" site_id="BBC" lang="es" xmltv_id="">BBC News</channel>
<channel site="movistarplus.es" site_id="BBCEAR" lang="es" xmltv_id="">BBC Earth</channel>
<channel site="movistarplus.es" site_id="BBCLIF" lang="es" xmltv_id="">BBC Lifestyle</channel>
<channel site="movistarplus.es" site_id="BBDRA" lang="es" xmltv_id="">BBC Series</channel>
<channel site="movistarplus.es" site_id="BBFOO" lang="es" xmltv_id="">BBC Food</channel>
<channel site="movistarplus.es" site_id="BBGEA" lang="es" xmltv_id="">BBC Top Gear</channel>
<channel site="movistarplus.es" site_id="BBHIS" lang="es" xmltv_id="">BBC History</channel>
<channel site="movistarplus.es" site_id="BEMAD" lang="es" xmltv_id="">BE MAD</channel>
<channel site="movistarplus.es" site_id="BL" lang="es" xmltv_id="">Bloomberg</channel>
<channel site="movistarplus.es" site_id="BOING" lang="es" xmltv_id="">Boing</channel>
<channel site="movistarplus.es" site_id="C4" lang="es" xmltv_id="">Cuatro</channel>
<channel site="movistarplus.es" site_id="CAZPES" lang="es" xmltv_id="">Caza y Pesca</channel>
<channel site="movistarplus.es" site_id="CCTV-E" lang="es" xmltv_id="">CGTN Español</channel>
<channel site="movistarplus.es" site_id="CHAP1" lang="es" xmltv_id="">M+ Liga de Campeones 2</channel>
<channel site="movistarplus.es" site_id="CHAP2" lang="es" xmltv_id="">M+ Liga de Campeones 3</channel>
<channel site="movistarplus.es" site_id="CHAP3" lang="es" xmltv_id="">M+ Liga de Campeones 4</channel>
<channel site="movistarplus.es" site_id="CHAP4" lang="es" xmltv_id="">M+ Liga de Campeones 5</channel>
<channel site="movistarplus.es" site_id="CHAP5" lang="es" xmltv_id="">M+ Liga de Campeones 6</channel>
<channel site="movistarplus.es" site_id="CHAP6" lang="es" xmltv_id="">M+ Liga de Campeones 7</channel>
<channel site="movistarplus.es" site_id="CHAP7" lang="es" xmltv_id="">M+ Liga de Campeones 8</channel>
<channel site="movistarplus.es" site_id="CHAP8" lang="es" xmltv_id="">M+ Liga de Campeones 9</channel>
<channel site="movistarplus.es" site_id="CHAP9" lang="es" xmltv_id="">M+ Liga de Campeones 10</channel>
<channel site="movistarplus.es" site_id="CHAP10" lang="es" xmltv_id="">M+ Liga de Campeones 11</channel>
<channel site="movistarplus.es" site_id="CHAP11" lang="es" xmltv_id="">M+ Liga de Campeones 12</channel>
<channel site="movistarplus.es" site_id="CHAP12" lang="es" xmltv_id="">M+ Liga de Campeones 13</channel>
<channel site="movistarplus.es" site_id="CHAPIO" lang="es" xmltv_id="">M+ Liga de Campeones</channel>
<channel site="movistarplus.es" site_id="CL13" lang="es" xmltv_id="">Calle 13</channel>
<channel site="movistarplus.es" site_id="CLANTV" lang="es" xmltv_id="">Clan TVE</channel>
<channel site="movistarplus.es" site_id="CLASSD" lang="es" xmltv_id="">Classica</channel>
<channel site="movistarplus.es" site_id="CNN" lang="es" xmltv_id="">CNN Int</channel>
<channel site="movistarplus.es" site_id="COSMO" lang="es" xmltv_id="">COSMO</channel>
<channel site="movistarplus.es" site_id="CPACCI" lang="es" xmltv_id="">M+ Acción</channel>
<channel site="movistarplus.es" site_id="CPCOLE" lang="es" xmltv_id="">M+ Drama</channel>
<channel site="movistarplus.es" site_id="CPCOME" lang="es" xmltv_id="">M+ Comedia</channel>
<channel site="movistarplus.es" site_id="CPDEP" lang="es" xmltv_id="">M+ Deportes</channel>
<channel site="movistarplus.es" site_id="DAZB2" lang="es" xmltv_id="">DAZN Baloncesto 2</channel>
<channel site="movistarplus.es" site_id="DAZB3" lang="es" xmltv_id="">DAZN Baloncesto 3</channel>
<channel site="movistarplus.es" site_id="DAZBA" lang="es" xmltv_id="">DAZN Baloncesto</channel>
<channel site="movistarplus.es" site_id="DAZN3" lang="es" xmltv_id="">DAZN 3</channel>
<channel site="movistarplus.es" site_id="DAZN4" lang="es" xmltv_id="">DAZN 4</channel>
<channel site="movistarplus.es" site_id="DAZNL2" lang="es" xmltv_id="">DAZN LALIGA 2</channel>
<channel site="movistarplus.es" site_id="DAZNLI" lang="es" xmltv_id="">DAZN LALIGA</channel>
<channel site="movistarplus.es" site_id="DCESP" lang="es" xmltv_id="">M+ Cine Español</channel>
<channel site="movistarplus.es" site_id="DCR" lang="es" xmltv_id="">Discovery</channel>
<channel site="movistarplus.es" site_id="DCRMAX" lang="es" xmltv_id="">DMAX</channel>
<channel site="movistarplus.es" site_id="DIVINI" lang="es" xmltv_id="">Divinity</channel>
<channel site="movistarplus.es" site_id="DKISS" lang="es" xmltv_id="">DKISS</channel>
<channel site="movistarplus.es" site_id="DWSP" lang="es" xmltv_id="">Dreamworks</channel>
<channel site="movistarplus.es" site_id="ENERGY" lang="es" xmltv_id="">Energy</channel>
<channel site="movistarplus.es" site_id="ENW" lang="es" xmltv_id="">Euronews</channel>
<channel site="movistarplus.es" site_id="ESP" lang="es" xmltv_id="">Eurosport 1</channel>
<channel site="movistarplus.es" site_id="ESP2" lang="es" xmltv_id="">Eurosport 2</channel>
<channel site="movistarplus.es" site_id="ETB" lang="es" xmltv_id="">EITB Basque</channel>
<channel site="movistarplus.es" site_id="EXTREM" lang="es" xmltv_id="">Canal Extremadura Sat</channel>
<channel site="movistarplus.es" site_id="FDFIC" lang="es" xmltv_id="">Factoría de Ficción</channel>
<channel site="movistarplus.es" site_id="FLIX1" lang="es" xmltv_id="">Canal FlixOlé 1</channel>
<channel site="movistarplus.es" site_id="FLIX2" lang="es" xmltv_id="">Canal FlixOlé 2</channel>
<channel site="movistarplus.es" site_id="FOXGE" lang="es" xmltv_id="">STAR Channel</channel>
<channel site="movistarplus.es" site_id="FRANCE" lang="es" xmltv_id="">FRANCE24 (FR)</channel>
<channel site="movistarplus.es" site_id="GARAGE" lang="es" xmltv_id="">El Garage TV</channel>
<channel site="movistarplus.es" site_id="GOL" lang="es" xmltv_id="">GOL</channel>
<channel site="movistarplus.es" site_id="GOLF2" lang="es" xmltv_id="">M+ Golf 2</channel>
<channel site="movistarplus.es" site_id="GOLF+" lang="es" xmltv_id="">M+ Golf</channel>
<channel site="movistarplus.es" site_id="INTECO" lang="es" xmltv_id="">El Toro TV</channel>
<channel site="movistarplus.es" site_id="INTEUA" lang="es" xmltv_id="">1+1 Internacional</channel>
<channel site="movistarplus.es" site_id="LA2" lang="es" xmltv_id="">LA 2</channel>
<channel site="movistarplus.es" site_id="M1SD" lang="es" xmltv_id="">DAZN 1</channel>
<channel site="movistarplus.es" site_id="M2SD" lang="es" xmltv_id="">DAZN 2</channel>
<channel site="movistarplus.es" site_id="MAXAVA" lang="es" xmltv_id="">HBO Max Avances</channel>
<channel site="movistarplus.es" site_id="MCIBE" lang="es" xmltv_id="">M+ Cine bélico</channel>
<channel site="movistarplus.es" site_id="MCLAS" lang="es" xmltv_id="">M+ Clásicos</channel>
<channel site="movistarplus.es" site_id="MCOPA" lang="es" xmltv_id="">Primera Federación</channel>
<channel site="movistarplus.es" site_id="MDOC" lang="es" xmltv_id="">M+ Documentales</channel>
<channel site="movistarplus.es" site_id="MEGA" lang="es" xmltv_id="">Mega</channel>
<channel site="movistarplus.es" site_id="MELLAV" lang="es" xmltv_id="">M+ Ellas V</channel>
<channel site="movistarplus.es" site_id="MEZZLI" lang="es" xmltv_id="">Mezzo Live</channel>
<channel site="movistarplus.es" site_id="MEZZO" lang="es" xmltv_id="">Mezzo</channel>
<channel site="movistarplus.es" site_id="MHITS" lang="es" xmltv_id="">M+ Hits</channel>
<channel site="movistarplus.es" site_id="MINDI" lang="es" xmltv_id="">M+ Indie</channel>
<channel site="movistarplus.es" site_id="MLIG1" lang="es" xmltv_id="">M+ LALIGA 2</channel>
<channel site="movistarplus.es" site_id="MLIG2" lang="es" xmltv_id="">M+ LALIGA 3</channel>
<channel site="movistarplus.es" site_id="MLIG3" lang="es" xmltv_id="">M+ LALIGA 4</channel>
<channel site="movistarplus.es" site_id="MLIGA" lang="es" xmltv_id="">M+ LALIGA</channel>
<channel site="movistarplus.es" site_id="MLIGS" lang="es" xmltv_id="">LALIGA TV HYPERMOTION</channel>
<channel site="movistarplus.es" site_id="MLIGS2" lang="es" xmltv_id="">LALIGA TV HYPERMOTION 2</channel>
<channel site="movistarplus.es" site_id="MLIGS3" lang="es" xmltv_id="">LALIGA TV HYPERMOTION 3</channel>
<channel site="movistarplus.es" site_id="MORIG" lang="es" xmltv_id="">M+ Originales</channel>
<channel site="movistarplus.es" site_id="MPLUS" lang="es" xmltv_id="">Movistar Plus+</channel>
<channel site="movistarplus.es" site_id="MTV" lang="es" xmltv_id="">MTV</channel>
<channel site="movistarplus.es" site_id="MULTI6" lang="es" xmltv_id="">M+ Deportes 7</channel>
<channel site="movistarplus.es" site_id="MULTI8" lang="es" xmltv_id="">M+ Deportes 6</channel>
<channel site="movistarplus.es" site_id="MULTI9" lang="es" xmltv_id="">M+ Deportes 8</channel>
<channel site="movistarplus.es" site_id="MV1" lang="es" xmltv_id="">M+ Estrenos</channel>
<channel site="movistarplus.es" site_id="MVF1" lang="es" xmltv_id="">DAZN F1</channel>
<channel site="movistarplus.es" site_id="NATGEO" lang="es" xmltv_id="">National Geographic</channel>
<channel site="movistarplus.es" site_id="NATGW" lang="es" xmltv_id="">Nat Geo Wild</channel>
<channel site="movistarplus.es" site_id="NBC" lang="es" xmltv_id="">CNBC</channel>
<channel site="movistarplus.es" site_id="NEGOTV" lang="es" xmltv_id="">Negocios TV</channel>
<channel site="movistarplus.es" site_id="NEOX" lang="es" xmltv_id="">Neox</channel>
<channel site="movistarplus.es" site_id="NICK" lang="es" xmltv_id="">Nickelodeon</channel>
<channel site="movistarplus.es" site_id="NICKJR" lang="es" xmltv_id="">NICK JR</channel>
<channel site="movistarplus.es" site_id="NOVA" lang="es" xmltv_id="">Nova</channel>
<channel site="movistarplus.es" site_id="PCM" lang="es" xmltv_id="">Comedy Central</channel>
<channel site="movistarplus.es" site_id="PLAYDC" lang="es" xmltv_id="">Disney Junior</channel>
<channel site="movistarplus.es" site_id="REALM" lang="es" xmltv_id="">Real Madrid TV</channel>
<channel site="movistarplus.es" site_id="SCI-FI" lang="es" xmltv_id="">SYFY</channel>
<channel site="movistarplus.es" site_id="SET" lang="es" xmltv_id="">AXN Movies</channel>
<channel site="movistarplus.es" site_id="SEXTA" lang="es" xmltv_id="">La Sexta</channel>
<channel site="movistarplus.es" site_id="SKYSHO" lang="es" xmltv_id="">SkyShowtime 1</channel>
<channel site="movistarplus.es" site_id="SQUI" lang="es" xmltv_id="">Squirrel</channel>
<channel site="movistarplus.es" site_id="T5" lang="es" xmltv_id="">Telecinco</channel>
<channel site="movistarplus.es" site_id="TCM" lang="es" xmltv_id="">TCM</channel>
<channel site="movistarplus.es" site_id="TDEP" lang="es" xmltv_id="">Teledeporte</channel>
<channel site="movistarplus.es" site_id="TELMIN" lang="es" xmltv_id="">Telemadrid Int.</channel>
<channel site="movistarplus.es" site_id="TEN" lang="es" xmltv_id="">Ten</channel>
<channel site="movistarplus.es" site_id="TNT" lang="es" xmltv_id="">Warner TV</channel>
<channel site="movistarplus.es" site_id="TV5" lang="es" xmltv_id="">TV5MONDE</channel>
<channel site="movistarplus.es" site_id="TVC" lang="es" xmltv_id="">TV3 Cat</channel>
<channel site="movistarplus.es" site_id="TVE" lang="es" xmltv_id="">LA 1</channel>
<channel site="movistarplus.es" site_id="TVG" lang="es" xmltv_id="">TVG Europa</channel>
<channel site="movistarplus.es" site_id="UBEAT" lang="es" xmltv_id="">Ubeat</channel>
<channel site="movistarplus.es" site_id="UCL" lang="es" xmltv_id="">UCL</channel>
<channel site="movistarplus.es" site_id="USOP2" lang="es" xmltv_id="">M+ Deportes 3</channel>
<channel site="movistarplus.es" site_id="USOP3" lang="es" xmltv_id="">M+ Deportes 4</channel>
<channel site="movistarplus.es" site_id="USOP11" lang="es" xmltv_id="">M+ Deportes 5</channel>
<channel site="movistarplus.es" site_id="VAM2SD" lang="es" xmltv_id="">M+ Vamos 2</channel>
<channel site="movistarplus.es" site_id="VAMOSD" lang="es" xmltv_id="">M+ Vamos</channel>
<channel site="movistarplus.es" site_id="VEO7" lang="es" xmltv_id="">Veo7</channel>
</channels>

View File

@@ -1,17 +1,16 @@
const axios = require('axios')
const cheerio = require('cheerio')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.tz.setDefault('Europe/Madrid')
module.exports = {
site: 'movistarplus.es',
days: 2,
url({ channel, date }) {
return `https://www.movistarplus.es/programacion-tv/${channel.site_id}/${date.format('YYYY-MM-DD')}`
return `https://ottcache.dof6.com/movistarplus/webplayer/OTT/epg?from=${date.format('YYYY-MM-DDTHH:mm:ss')}&span=1&channel=${channel.site_id}&version=8&mdrm=true&tlsstream=true&demarcation=18`
},
request: {
headers: {
@@ -23,122 +22,82 @@ module.exports = {
},
maxRedirects: 5
},
async parser({ content, date }) {
async parser({ content }) {
let programs = []
const $ = cheerio.load(content)
const programDivs = $('div[id^="ele-"]').toArray()
for (let i = 0; i < programDivs.length; i++) {
const el = $(programDivs[i])
const title = el.find('li.title').text().trim()
if (!title) continue
const timeText = el.find('li.time').text().trim()
if (!timeText) continue
const [hours, minutes] = timeText.split(':').map(h => parseInt(h, 10))
// Parse time in Spain timezone (Europe/Madrid)
let startDate = dayjs.tz(
`${date.format('YYYY-MM-DD')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`,
'YYYY-MM-DD HH:mm',
'Europe/Madrid'
)
// If the time is in early morning (before 5 AM), it's the next day
if (hours < 5) {
startDate = startDate.add(1, 'day')
}
// Calculate end time from next program's start time
let endDate
if (i < programDivs.length - 1) {
const nextEl = $(programDivs[i + 1])
const nextTimeText = nextEl.find('li.time').text().trim()
if (nextTimeText) {
const [nextHours, nextMinutes] = nextTimeText.split(':').map(h => parseInt(h, 10))
endDate = dayjs.tz(
`${date.format('YYYY-MM-DD')} ${nextHours.toString().padStart(2, '0')}:${nextMinutes.toString().padStart(2, '0')}`,
'YYYY-MM-DD HH:mm',
'Europe/Madrid'
)
// If the next time is in early morning (before 5 AM), it's the next day
if (nextHours < 5) {
endDate = endDate.add(1, 'day')
}
// If end time is still before or same as start time, add another day
if (endDate.isBefore(startDate) || endDate.isSame(startDate)) {
endDate = endDate.add(1, 'day')
}
}
}
// If no end time, use start of next day
if (!endDate) {
endDate = startDate.add(1, 'day').startOf('day')
}
const programLink = el.find('a').attr('href')
let description = null
if (programLink) {
description = await getProgramDescription(programLink).catch(() => null)
}
let items = await parseItems(content)
if (!items.length) return programs
items.forEach(el => {
programs.push({
title,
description,
start: startDate,
stop: endDate
title: el.title,
description: el.description,
season: el.season,
episode: el.episode,
start: el.start,
stop: el.stop
})
})
}
return programs
},
async channels() {
const html = await axios
.get('https://www.movistarplus.es/programacion-tv', {
headers: {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}
})
const json = await axios
.get('https://ottcache.dof6.com/movistarplus/webplayer/OTT/contents/channels?mdrm=true&tlsstream=true&demarcation=18&version=8')
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(html)
let scheme = $('script:contains(ItemList)').html()
scheme = JSON.parse(scheme)
return scheme.itemListElement.map(el => {
const urlParts = el.item.url.split('/')
const site_id = urlParts.pop().toLowerCase()
// Load JSON, CodCadenaTv is the closest to the old MVSTR site ch. ID
return json.map(channel => {
return {
lang: 'es',
name: el.item.name,
site_id
site_id: channel.CodCadenaTv,
name: channel.Nombre,
logo: channel.Logo ? channel.Logos[0].url : null
}
})
}
}
async function getProgramDescription(programUrl) {
const response = await axios.get(programUrl, {
headers: {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
Referer: 'https://www.movistarplus.es/programacion-tv/'
}
})
const $ = cheerio.load(response.data)
const description = $('.show-content .text p').first().text().trim() || null
return description
async function parseItems(content) {
try {
const data = JSON.parse(content)
const programs = Array.isArray(data) ? data : [data]
return await Promise.all(programs.map(async (json) => {
const start = dayjs.utc(Number(json?.FechaHoraInicio))
const stop = dayjs.utc(Number(json?.FechaHoraFin))
const ficha = json?.Ficha || null
if (!ficha) {
return {
title: json?.Titulo || '',
description: json?.Resena || '',
start,
stop
}
} else {
try {
const fichaJson = await axios.get(ficha).then(r => r.data)
return {
title: json?.Titulo || fichaJson?.Titulo || '',
description: fichaJson?.Descripcion || json?.Resena || '',
actors: fichaJson?.Actores || [],
directors: fichaJson?.Directores || [],
classification: fichaJson?.Clasificacion || '',
season: fichaJson?.Temporada || null,
episode: fichaJson?.NumeroEpisodio || null,
start,
stop
}
} catch {
return {
title: json?.Titulo || '',
description: json?.Resena || '',
start,
stop
}
}
}
}))
} catch {
return []
}
}

View File

@@ -9,7 +9,7 @@ dayjs.extend(utc)
const axios = require('axios')
jest.mock('axios')
const date = dayjs.utc('2025-05-30', 'YYYY-MM-DD').startOf('d')
const date = dayjs.utc('2026-02-09', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'sexta',
xmltv_id: 'LaSexta.es'
@@ -17,32 +17,31 @@ const channel = {
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://www.movistarplus.es/programacion-tv/sexta/2025-05-30'
'https://ottcache.dof6.com/movistarplus/webplayer/OTT/epg?from=2026-02-09T00:00:00&span=1&channel=sexta&version=8&mdrm=true&tlsstream=true&demarcation=18'
)
})
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
// Ficha for both results
axios.get.mockImplementation(url => {
if (
url ===
'https://www.movistarplus.es/entretenimiento/venta-prime-t1/ficha?tipo=E&id=3414523'
'https://ottcache.dof6.com/movistarplus/webplayer/contents/63188242/details?mediaType=FOTOV&profile=OTT&mode=U7D2&channels=SEXTA&version=8&tlsStream=true&mdrm=true&catalog=catchup&showNonRated=true'
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/program1.html'))
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/ficha.json'), 'utf8'))
})
} else if (
url ===
'https://www.movistarplus.es/deportes/programa/pokerstars-casino-1/ficha?tipo=E&id=2057641'
url === 'https://ottcache.dof6.com/movistarplus/webplayer/contents/63182873/details?mediaType=FOTOV&profile=OTT&mode=VODREJILLA&channels=SEXTA&version=8&tlsStream=true&mdrm=true&catalog=events&showNonRated=true'
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/program2.html'))
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/ficha2.json'), 'utf8'))
})
} else {
return Promise.resolve({ data: '' })
}
})
let results = await parser({ content, date })
results = results.map(p => {
@@ -51,20 +50,18 @@ it('can parse response', async () => {
return p
})
expect(results.length).toBe(23)
expect(results.length).toBe(21)
expect(results[0]).toMatchObject({
start: '2025-05-30T03:15:00.000Z',
stop: '2025-05-30T04:25:00.000Z',
title: 'Venta Prime',
description:
'Espacio de televenta.'
start: '2026-02-08T21:45:00.000Z',
stop: '2026-02-09T00:30:00.000Z',
title: 'Especial ARV elecciones Aragón',
description: 'Antonio García Ferreras y Ana Pastor analizan y debaten sobre el recuento y los resultados que arrojen las urnas con analistas como Lluís Orriols, Antonio Maestre, Ignacio Escolar, Pilar Velasco, Santiago Martínez Vares y Pablo Montesinos.'
})
expect(results[19]).toMatchObject({
start: '2025-05-31T00:45:00.000Z',
stop: '2025-05-31T01:25:00.000Z',
title: 'Pokerstars casino',
description:
'El programa trae cada día toda la emoción de su ruleta en vivo, Spin & Win, una versión exclusiva del clásico juego de casino.'
start: '2026-02-09T20:30:00.000Z',
stop: '2026-02-09T22:00:00.000Z',
title: 'El intermedio',
description: 'El Gran Wyoming, con la ayuda de sus colaboradores, analiza en clave de humor las noticias más importantes del día. El sello inconfundible del cómico sirve para completar la información desde un punto de vista más distendido e irónico.'
})
})