Update tvguide.com.config.js

This commit is contained in:
Aleksandr Statciuk 2022-10-30 18:39:05 +03:00
parent 344b4e0a66
commit 34597ae3ec

View file

@ -1,3 +1,4 @@
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
@ -8,37 +9,62 @@ dayjs.extend(timezone)
module.exports = {
site: 'tvguide.com',
url: function ({ date, channel }) {
const parts = channel.site_id.split('#')
const start = date.startOf('d')
const duration = date.endOf('d').diff(start, 'm')
const url = `https://cmg-prod.apigee.net/v1/xapi/tvschedules/tvguide/${
parts[0]
}/web?start=${start.unix()}&duration=${duration}&channelSourceIds=${parts[1]}`
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}`
return url
},
parser: function ({ content }) {
async parser({ content, channel }) {
const programs = []
const items = parseItems(content)
items.forEach(item => {
for (let item of items) {
const details = await loadProgramDetails(item)
programs.push({
title: item.title,
sub_title: details.episodeTitle,
description: details.description,
season: details.seasonNumber,
episode: details.episodeNumber,
rating: parseRating(item),
categories: parseCategories(details),
start: parseTime(item.startTime),
stop: parseTime(item.endTime)
})
})
}
return programs
}
}
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) : []
}
function parseTime(timestamp) {
return dayjs.unix(timestamp)
}
function parseItems(content) {
const data = JSON.parse(content)
if (!Array.isArray(data.data.items) || !data.data.items.length) return []
if (!data.data || !Array.isArray(data.data.items) || !data.data.items.length) return []
return data.data.items[0].programSchedules
}
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
}