epg/sites/tvmusor.hu/tvmusor.hu.config.js
2021-11-24 05:04:56 +03:00

72 lines
1.8 KiB
JavaScript

const FormData = require('form-data')
const axios = require('axios')
const dayjs = require('dayjs')
module.exports = {
site: 'tvmusor.hu',
url: 'http://www.tvmusor.hu/a/get-events/',
request: {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
data({ channel, date }) {
const params = new URLSearchParams()
params.append(
'data',
JSON.stringify({
blocks: [`${channel.site_id}|${date.format('YYYY-MM-DD')}`]
})
)
return params
}
},
parser({ content, channel, date }) {
let programs = []
const items = parseItems(content, channel, date)
items.forEach(item => {
programs.push({
title: item.j,
category: item.h,
description: item.c,
icon: parseIcon(item),
start: dayjs(item.e),
stop: dayjs(item.f)
})
})
return programs
},
async channels() {
const data = await axios
.get(`http://www.tvmusor.hu/most/`)
.then(r => r.data)
.catch(console.log)
const [_, channelData] = data.match(/const CHANNEL_DATA = (.*);/)
const json = channelData.replace('},}', '}}').replace(/(\d+):/g, '"$1":')
const channels = JSON.parse(json)
return Object.values(channels).map(item => {
return {
lang: 'hu',
site_id: item.id,
name: item.name
}
})
}
}
function parseIcon(item) {
return item.z ? `http://www.tvmusor.hu/images/events/408/${item.z}` : null
}
function parseItems(content, channel, date) {
const data = JSON.parse(content)
if (!data || !data.data || !data.data.loadedBlocks) return []
const blocks = data.data.loadedBlocks
const blockId = `${channel.site_id}_${date.format('YYYY-MM-DD')}`
return Array.isArray(blocks[blockId]) ? blocks[blockId] : []
}