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