mirror of
https://github.com/iptv-org/epg
synced 2026-03-21 19:30:52 -04:00
add france.tv, fix movistarplus, new tataplay channels
This commit is contained in:
1028
sites/france.tv/__data__/content.json
Normal file
1028
sites/france.tv/__data__/content.json
Normal file
File diff suppressed because it is too large
Load Diff
19
sites/france.tv/france.tv.channels.xml
Normal file
19
sites/france.tv/france.tv.channels.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="france.tv" site_id="arte" lang="fr" xmltv_id="arte.fr@HD">Arte</channel>
|
||||
<channel site="france.tv" site_id="france-2" lang="fr" xmltv_id="France2.fr@HD">France 2</channel>
|
||||
<channel site="france.tv" site_id="france-3" lang="fr" xmltv_id="France3.fr@HD">France 3</channel>
|
||||
<channel site="france.tv" site_id="france-4" lang="fr" xmltv_id="France4.fr@HD">France 4</channel>
|
||||
<channel site="france.tv" site_id="france-5" lang="fr" xmltv_id="France5.fr@HD">France 5</channel>
|
||||
<channel site="france.tv" site_id="france-24" lang="fr" xmltv_id="France24.fr@HD">France 24</channel>
|
||||
<channel site="france.tv" site_id="france-info" lang="fr" xmltv_id="FranceInfo.fr@HD">franceinfo:</channel>
|
||||
<channel site="france.tv" site_id="lcp-public-senat" lang="fr" xmltv_id="LCPPublicSenat.fr@HD">LCP Public Sénat</channel>
|
||||
<channel site="france.tv" site_id="mieux" lang="fr" xmltv_id="">Mieux</channel>
|
||||
<channel site="france.tv" site_id="tv5-monde" lang="fr" xmltv_id="TV5Monde.fr@HD">TV5 Monde</channel>
|
||||
<channel site="france.tv" site_id="sport" lang="fr" xmltv_id="">France.tv Sport</channel>
|
||||
<channel site="france.tv" site_id="docs" lang="fr" xmltv_id="">France.tv Docs</channel>
|
||||
<channel site="france.tv" site_id="series" lang="fr" xmltv_id="">France.tv Séries</channel>
|
||||
<channel site="france.tv" site_id="ina" lang="fr" xmltv_id="">INA</channel>
|
||||
<!--Channel below is for specific events, won't be used a lot-->
|
||||
<channel site="france.tv" site_id="francetv" lang="fr" xmltv_id="">France.tv</channel>
|
||||
</channels>
|
||||
110
sites/france.tv/france.tv.config.js
Normal file
110
sites/france.tv/france.tv.config.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.tz.setDefault('Europe/Paris')
|
||||
|
||||
// Because France is excellent at pointing hours, their programs ALL start at 5/6 am,
|
||||
// so we need to keep track of the earlier day's program to get the midnight programming. How... odd.
|
||||
module.exports = {
|
||||
site: 'france.tv',
|
||||
days: 2,
|
||||
url: function ({ channel, date }) {
|
||||
return `https://www.france.tv/api/epg/videos/?date=${date.format('YYYY-MM-DD')}&channel=${channel.site_id}`
|
||||
},
|
||||
parser: function ({ content, date }) {
|
||||
const programs = []
|
||||
let items = []
|
||||
|
||||
try {
|
||||
items = JSON.parse(content)
|
||||
} catch {
|
||||
return programs
|
||||
}
|
||||
|
||||
items.forEach(item => {
|
||||
const { start, stop } = parseDuration(date, item)
|
||||
if (!start.isValid() || !stop.isValid()) return
|
||||
// Can contain Season and Episode in title, but not always. If title is missing, skip the program
|
||||
if (!item?.content?.title) return
|
||||
|
||||
let title = item.content.title
|
||||
let season = null
|
||||
let episode = null
|
||||
|
||||
const seMatch = title.match(/\s*-?\s*S(\d+)\s+E(\d+)\s*-?\s*/)
|
||||
if (seMatch) {
|
||||
season = parseInt(seMatch[1])
|
||||
episode = parseInt(seMatch[2])
|
||||
title = title.replace(seMatch[0], ' ').replace(/^\s+/, '').replace(/\s+$/, '').trim()
|
||||
}
|
||||
|
||||
const fullTitle = (item.content.titleLeading ? item.content.titleLeading + (title ? ' - ' : '') : '') + title
|
||||
|
||||
programs.push({
|
||||
title: fullTitle,
|
||||
description: item.content.description,
|
||||
image: getImageUrl(item),
|
||||
icon: getImageUrl(item),
|
||||
start,
|
||||
stop,
|
||||
season: season,
|
||||
episode: episode,
|
||||
rating: item.content.csa
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
let reachedNextDay = false
|
||||
|
||||
function parseDuration(date, item) {
|
||||
const current_date = date.format('YYYY-MM-DD')
|
||||
const time = item.content?.broadcastBeginDate
|
||||
const duration = item.content?.duration // e.g. "11 min 45 s", "1 h 30 min", "30 min"
|
||||
|
||||
if (!time) return { start: dayjs(null), stop: dayjs(null) }
|
||||
|
||||
const timeParts = time.split('h')
|
||||
const hour = parseInt(timeParts[0])
|
||||
|
||||
// Once we've seen programs and encounter 00h, mark as next day
|
||||
if (reachedNextDay) {
|
||||
return { start: dayjs(null), stop: dayjs(null) }
|
||||
}
|
||||
|
||||
if (hour === 0) {
|
||||
reachedNextDay = true
|
||||
return { start: dayjs(null), stop: dayjs(null) }
|
||||
}
|
||||
|
||||
let durationInSeconds = 0
|
||||
if (duration) {
|
||||
const durationParts = duration.split(' ')
|
||||
for (let i = 0; i < durationParts.length; i++) {
|
||||
const part = durationParts[i]
|
||||
if (part === 'h' && i > 0) {
|
||||
durationInSeconds += parseInt(durationParts[i - 1]) * 3600
|
||||
} else if (part === 'min' && i > 0) {
|
||||
durationInSeconds += parseInt(durationParts[i - 1]) * 60
|
||||
} else if (part === 's' && i > 0) {
|
||||
durationInSeconds += parseInt(durationParts[i - 1])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const start = dayjs.utc(`${current_date} ${timeParts[0]}:${timeParts[1]}`, 'YYYY-MM-DD HH:mm')
|
||||
const stop = start.add(durationInSeconds, 'second')
|
||||
return { start, stop }
|
||||
}
|
||||
|
||||
function getImageUrl(item) {
|
||||
const url = item.content?.thumbnail?.x1
|
||||
return url
|
||||
}
|
||||
49
sites/france.tv/france.tv.test.js
Normal file
49
sites/france.tv/france.tv.test.js
Normal file
@@ -0,0 +1,49 @@
|
||||
const { parser, url } = require('./france.tv.config.js')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(utc)
|
||||
|
||||
const date = dayjs.utc('2026-02-19', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'france2',
|
||||
xmltv_id: 'France2.fr@HD'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel, date })).toBe('https://www.france.tv/api/epg/videos/?date=2026-02-19&channel=france2')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
|
||||
const results = parser({ content, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(18)
|
||||
expect(results[0]).toMatchObject({
|
||||
title: 'Le 6h info - Émission du jeudi 19 février 2026',
|
||||
description: "Un rendez-vous réveil-matin, avec un point sur l'actualité assorti de différentes rubriques qui permettent d'en explorer certains aspects plus en profondeur.",
|
||||
image: 'https://medias.france.tv/S9p5NdAs4OR2UbyC1NIQWsYV-K4/240x0/filters:quality(85):format(webp)/b/f/3/e85c2e8fed4a4955965dfff63c3843fb.jpg',
|
||||
start: '2026-02-19T06:00:00.000Z',
|
||||
stop: '2026-02-19T06:30:00.000Z'
|
||||
})
|
||||
expect(results[17]).toMatchObject({
|
||||
title: 'JO Club - Émission du jeudi 19 février 2026',
|
||||
description: "Tous les soirs, tout au long de ces Jeux olympiques d'hiver de Milan-Cortina, Laurent Luyat revient, avec les journalistes et consultants de France Télévisions, sur les épreuves de la journée. Il accueille les athlètes et les médaillés du jour. La journée a été marquée par du combiné nordique, avec l'épreuve par équipes messieurs, les demi-final...",
|
||||
image: 'https://medias.france.tv/xuxaBPNFyhMiVB5eeYrZV_1nPj4/240x0/filters:quality(85):format(webp)/v/p/h/phpmhbhpv.jpg',
|
||||
start: '2026-02-19T23:00:00.000Z',
|
||||
stop: '2026-02-20T00:00:00.000Z'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({ content: [], date })
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
})
|
||||
21
sites/france.tv/readme.md
Normal file
21
sites/france.tv/readme.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# france.tv
|
||||
|
||||
https://www.france.tv/
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=france.tv
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/france.tv/france.tv.config.js --output=./sites/france.tv/france.tv.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- france.tv
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
5025
sites/movistarplus.es/__data__/content.json
Normal file
5025
sites/movistarplus.es/__data__/content.json
Normal file
File diff suppressed because it is too large
Load Diff
374
sites/movistarplus.es/__data__/ficha.json
Normal file
374
sites/movistarplus.es/__data__/ficha.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
378
sites/movistarplus.es/__data__/ficha2.json
Normal file
378
sites/movistarplus.es/__data__/ficha2.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
|
||||
@@ -1,97 +1,93 @@
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
const dayjs = require('dayjs')
|
||||
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`
|
||||
},
|
||||
async parser({ content }) {
|
||||
let programs = []
|
||||
let items = parseItems(content)
|
||||
let items = await parseItems(content)
|
||||
if (!items.length) return programs
|
||||
|
||||
const $ = cheerio.load(content)
|
||||
const programElements = $('div[id^="ele-"]').get()
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const el = items[i]
|
||||
let description = null
|
||||
|
||||
if (programElements[i]) {
|
||||
const programDiv = $(programElements[i])
|
||||
const programLink = programDiv.find('a').attr('href')
|
||||
|
||||
if (programLink) {
|
||||
const idMatch = programLink.match(/id=(\d+)/)
|
||||
if (idMatch && idMatch[1]) {
|
||||
description = await getProgramDescription(programLink).catch(() => null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
items.forEach(el => {
|
||||
programs.push({
|
||||
title: el.item.name,
|
||||
description: description,
|
||||
start: dayjs(el.item.startDate),
|
||||
stop: dayjs(el.item.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')
|
||||
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
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
async function parseItems(content) {
|
||||
try {
|
||||
const $ = cheerio.load(content)
|
||||
let scheme = $('script:contains("@type": "ItemList")').html()
|
||||
scheme = JSON.parse(scheme)
|
||||
if (!scheme || !Array.isArray(scheme.itemListElement)) return []
|
||||
|
||||
return scheme.itemListElement
|
||||
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 []
|
||||
}
|
||||
}
|
||||
|
||||
async function getProgramDescription(programUrl) {
|
||||
try {
|
||||
const response = await axios.get(programUrl, {
|
||||
headers: {
|
||||
'Referer': 'https://www.movistarplus.es/programacion-tv/'
|
||||
}
|
||||
})
|
||||
|
||||
const $ = cheerio.load(response.data)
|
||||
const description = $('.show-content .text p').first().text().trim() || null
|
||||
|
||||
return description
|
||||
} catch (error) {
|
||||
console.error(`Error fetching description from ${programUrl}:`, error.message)
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.'
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user