epg/sites/kplus.vn/kplus.vn.config.js
2022-11-12 00:50:38 +03:00

79 lines
1.9 KiB
JavaScript

const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(timezone)
dayjs.extend(utc)
const API_ENDPOINT = `https://www.kplus.vn/Schedule/getSchedule`
module.exports = {
site: 'kplus.vn',
skip: true, // channel list changes with each request
url: API_ENDPOINT,
request: {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data({ date }) {
const params = new URLSearchParams()
params.append('date', date.format('D-M-YYYY'))
params.append('categories', '')
return params
},
method: 'POST'
},
parser: function ({ content, channel }) {
let programs = []
const items = parseItems(content, channel)
items.forEach(item => {
const prev = programs[programs.length - 1]
const start = parseStart(item)
const stop = start.add(1, 'h')
if (prev) prev.stop = start
programs.push({
title: item.Program.Name,
icon: item.Program.Images,
category: item.Program.Genres,
start,
stop
})
})
return programs
},
async channels() {
const params = new URLSearchParams()
params.append('date', dayjs().format('D-M-YYYY'))
params.append('categories', '')
const data = await axios
.post(API_ENDPOINT, params, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(r => r.data)
.catch(console.log)
return data.Channels.map(item => {
return {
lang: 'vi',
site_id: item.Id,
name: item.Name
}
})
}
}
function parseStart(item) {
return dayjs.tz(item.ShowingTime, 'Asia/Ho_Chi_Minh')
}
function parseItems(content, channel) {
const data = JSON.parse(content)
if (!data || !Array.isArray(data.Schedules)) return []
return data.Schedules.filter(i => i.ChannelId == channel.site_id)
}