Files
epg/sites/vidio.com/vidio.com.config.js
2025-09-28 17:55:05 +03:00

89 lines
2.4 KiB
JavaScript

const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const crypto = require('crypto')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
const WEB_CLIENT_SECRET = Buffer.from('dPr0QImQ7bc5o9LMntNba2DOsSbZcjUh')
const WEB_CLIENT_IV = Buffer.from('C8RWsrtFsoeyCyPt')
module.exports = {
site: 'vidio.com',
days: 2,
url({ date, channel }) {
return `https://api.vidio.com/livestreamings/${channel.site_id}/schedules?filter[date]=${date.format('YYYY-MM-DD')}`
},
request: {
async headers() {
const session = await loadSessionDetails()
if (!session || !session.api_key) return null
var cipher = crypto.createCipheriv('aes-256-cbc', WEB_CLIENT_SECRET, WEB_CLIENT_IV)
return {
'X-API-Key': cipher.update(session.api_key, 'utf8', 'base64') + cipher.final('base64'),
'X-Secure-Level': 2
}
}
},
parser({ content }) {
const programs = []
const json = JSON.parse(content)
if (Array.isArray(json?.data)) {
for (const program of json.data) {
programs.push({
title: program.attributes.title,
description: program.attributes.description,
start: dayjs(program.attributes.start_time),
stop: dayjs(program.attributes.end_time),
image: program.attributes.image_landscape_url
})
}
}
return programs
},
async channels() {
const channels = []
const json = await axios
.get(
'https://api.vidio.com/livestreamings?stream_type=tv_stream',
{
headers: await this.request.headers()
}
)
.then(response => response.data)
.catch(console.error)
if (Array.isArray(json?.data)) {
for (const channel of json.data) {
channels.push({
lang: 'id',
site_id: channel.id,
name: channel.attributes.title
})
}
}
return channels
}
}
function loadSessionDetails() {
return axios
.post(
'https://www.vidio.com/auth',
{},
{
headers: {
'Content-Type': 'application/json'
}
}
)
.then(r => r.data)
.catch(console.log)
}