Files
epg/sites/tvguide.com/tvguide.com.config.js

72 lines
1.9 KiB
JavaScript
Raw Normal View History

2022-10-30 18:39:05 +03:00
const axios = require('axios')
2021-08-27 16:05:09 +03:00
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(timezone)
module.exports = {
site: 'tvguide.com',
2023-01-10 12:40:01 +03:00
days: 2,
2021-08-27 16:05:09 +03:00
url: function ({ date, channel }) {
2022-10-30 18:39:05 +03:00
const [providerId, channelSourceIds] = channel.site_id.split('#')
const url = `https://cmg-prod.apigee.net/v1/xapi/tvschedules/tvguide/${providerId}/web?start=${date
.startOf('d')
.unix()}&duration=1440&channelSourceIds=${channelSourceIds}`
2021-08-27 16:05:09 +03:00
return url
},
2022-10-30 18:39:05 +03:00
async parser({ content, channel }) {
2021-08-27 16:05:09 +03:00
const programs = []
const items = parseItems(content)
2022-10-30 18:39:05 +03:00
for (let item of items) {
const details = await loadProgramDetails(item)
2021-08-27 16:05:09 +03:00
programs.push({
title: item.title,
2022-10-30 18:39:05 +03:00
sub_title: details.episodeTitle,
description: details.description,
season: details.seasonNumber,
episode: details.episodeNumber,
rating: parseRating(item),
categories: parseCategories(details),
2021-08-27 16:05:09 +03:00
start: parseTime(item.startTime),
stop: parseTime(item.endTime)
})
2022-10-30 18:39:05 +03:00
}
2021-08-27 16:05:09 +03:00
return programs
}
}
2022-10-30 18:39:05 +03:00
function parseRating(item) {
return item.rating ? { system: 'MPA', value: item.rating } : null
}
function parseCategories(details) {
return Array.isArray(details.genres) ? details.genres.map(g => g.name) : []
}
2021-08-27 16:05:09 +03:00
function parseTime(timestamp) {
return dayjs.unix(timestamp)
}
function parseItems(content) {
2022-10-04 16:26:51 +03:00
const data = JSON.parse(content)
2022-10-30 18:39:05 +03:00
if (!data.data || !Array.isArray(data.data.items) || !data.data.items.length) return []
2021-08-27 16:05:09 +03:00
2022-10-04 16:26:51 +03:00
return data.data.items[0].programSchedules
2021-08-27 16:05:09 +03:00
}
2022-10-30 18:39:05 +03:00
async function loadProgramDetails(item) {
const data = await axios
.get(item.programDetails)
.then(r => r.data)
.catch(err => {
console.log(err.message)
})
if (!data || !data.data || !data.data.item) return {}
return data.data.item
}