Create sporttv.pt.config.js

This commit is contained in:
freearhey 2024-12-23 07:26:37 +03:00
parent eb10f8207b
commit a7bd3204be

View file

@ -0,0 +1,63 @@
const dayjs = require('dayjs')
const cheerio = require('cheerio')
module.exports = {
site: 'sporttv.pt',
days: 2,
url: 'https://www.sporttv.pt/guia',
parser({ content, date, channel }) {
let programs = []
const items = parseItems(content, channel, date)
items.forEach(item => {
const start = dayjs(item.data)
const stop = start.add(item.duracao, 'ms')
programs.push({
title: item.descricao,
description: item?.evento?.nome,
image: item.imagem,
category: item?.modalidade?.nomeModalidade,
start,
stop
})
})
return programs
}
}
function parseItems(content, channel, date) {
const $ = cheerio.load(content)
const nuxtData = $('#__NUXT_DATA__').html()
if (!nuxtData) return []
const parsed = JSON.parse(nuxtData)
const dataIndex = parsed[1].data
const epgIndex = Object.values(parsed[dataIndex])[3] // 1611
const epg = parsed[epgIndex].map(i => parsed[i]).map(obj => dataMapper(obj, parsed))
if (!Array.isArray(epg)) return []
return epg
.filter(
item => item.canal.id === parseInt(channel.site_id) && date.isSame(dayjs(item.data), 'd')
)
.sort((a, b) => {
if (a < b) return -1
if (a > b) return 1
return 0
})
}
function dataMapper(object, parsed) {
let output = {}
for (let key in object) {
const value = parsed[object[key]]
if (typeof value === 'object') {
output[key] = dataMapper(value, parsed)
} else {
output[key] = value
}
}
return output
}