Files
epg/sites/maxstream.tv/maxstream.tv.config.js
2026-05-05 12:42:41 +03:00

74 lines
2.3 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')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
const tz = 'Asia/Jakarta'
module.exports = {
site: 'maxstream.tv',
days: 2,
url({ channel }) {
return `https://vmp.maxstream.tv/api/v3/videos/${channel.site_id}/schedules`
},
parser({ content, channel, date }) {
const programs = []
if (content && typeof content === 'string') {
content = JSON.parse(content)
}
if (Array.isArray(content?.data)) {
const schedules = []
content.data.forEach(item => {
schedules.push(...item.metadata)
})
const f = dt => dayjs.tz(dt, tz).isSame(date, 'day')
schedules
.filter(
entry => entry.parentId === channel.site_id && (f(entry.startTime) || f(entry.endTime))
)
.forEach(entry => {
const [, , , season, , , session2, , , episode] = entry.tvProgram.match(
/((\s(\d+)[a-zA-Z]{2})?\s(Season(\s)?||S)(\d+)?)?(\s-\sEps\.(\s)?(\d+))/
) || [null, null, null, null, null, null, null, null, null, null]
programs.push({
title: entry.tvProgram,
description: entry.description,
start: dayjs.tz(entry.startTime, tz),
stop: dayjs.tz(entry.endTime, tz),
season: season || session2 ? parseInt(season || session2) : null,
episode: episode ? parseInt(episode) : null,
image: entry.thumbnail_url
})
})
}
return programs
},
async channels() {
const channels = []
const data = await axios
.get('https://vmp.maxstream.tv/api/v3/videos/list?contentType=channel')
.then(response => response.data)
.catch(console.error)
if (Array.isArray(data?.videos)) {
channels.push(
...data.videos
.filter(item => item?.contentType === 'Channel')
.map(item => ({
lang: 'id',
site_id: item.id,
name: item.translations.id.title
}))
)
}
return channels
}
}