60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
const axios = require('axios')
|
|
const cheerio = require('cheerio')
|
|
const dayjs = require('dayjs')
|
|
|
|
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'
|
|
)}`
|
|
},
|
|
parser({ content }) {
|
|
let programs = []
|
|
let items = parseItems(content)
|
|
if (!items.length) return programs
|
|
items.forEach(el => {
|
|
programs.push({
|
|
title: el.item.name,
|
|
start: dayjs(el.item.startDate),
|
|
stop: dayjs(el.item.endDate)
|
|
})
|
|
})
|
|
return programs
|
|
},
|
|
async channels() {
|
|
const html = await axios
|
|
.get('https://www.movistarplus.es/programacion-tv')
|
|
.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()
|
|
|
|
return {
|
|
lang: 'es',
|
|
name: el.item.name,
|
|
site_id
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
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
|
|
} catch {
|
|
return []
|
|
}
|
|
} |