epg/sites/firstmedia.com/firstmedia.com.config.js
Toha 916b5f5234 Use simultaneous fetch helper.
- Introduce fetch helper for site to fetch guide simultaneously.
- Clean-up unused requires.
- Updated tv.yandex.ru cookies.

Signed-off-by: Toha <tohenk@yahoo.com>
2024-12-20 19:54:59 +07:00

102 lines
2.6 KiB
JavaScript

const dayjs = require('dayjs')
const timezone = require('dayjs/plugin/timezone')
const utc = require('dayjs/plugin/utc')
dayjs.extend(timezone)
dayjs.extend(utc)
module.exports = {
site: 'firstmedia.com',
days: 2,
url({ channel, date }) {
return `https://api.firstmedia.com/api/content/tv-guide/list?date=${date.format(
'DD/MM/YYYY'
)}&channel=${channel.site_id}&startTime=1&endTime=24`
},
parser({ content, channel, date }) {
if (!content || !channel || !date) return []
const programs = []
const items = parseItems(content, channel.site_id)
.map(item => {
item.start = toDelta(item.date, item.startTime)
item.stop = toDelta(item.date, item.endTime)
return item
})
.sort((a, b) => a.start - b.start)
const dt = date.tz('Asia/Jakarta').startOf('d')
let lastStop
items.forEach(item => {
if (lastStop === undefined || item.start >= lastStop) {
lastStop = item.stop
programs.push({
title: parseTitle(item),
description: parseDescription(item),
start: asDate(parseStart({ item, date: dt })),
stop: asDate(parseStop({ item, date: dt }))
})
}
})
return programs
},
async channels() {
const axios = require('axios')
const result = await axios
.get(
`https://api.firstmedia.com/api/content/tv-guide/list?date=${dayjs().format(
'DD/MM/YYYY'
)}&channel=&startTime=0&endTime=24`
)
.then(response => response.data)
.catch(console.error)
const channels = []
if (result.data && result.data.entries) {
Object.values(result.data.entries).forEach(schedules => {
if (schedules.length) {
channels.push({
lang: 'en',
site_id: schedules[0].channel.no,
name: schedules[0].channel.name
})
}
})
}
return channels
}
}
function parseItems(content, channel) {
return JSON.parse(content.trim()).data.entries[channel] || []
}
function parseTitle(item) {
return item.title
}
function parseDescription(item) {
return item.long_description
}
function parseStart({ item, date }) {
return date.add(item.start, 'ms')
}
function parseStop({ item, date }) {
return date.add(item.stop, 'ms')
}
function toDelta(from, to) {
return toDate(to).diff(toDate(from), 'milliseconds')
}
function toDate(date) {
return dayjs(date, 'YYYY-MM-DD HH:mm:ss')
}
function asDate(date) {
return date.toISOString()
}