Create starhubtvplus.com.config.js

This commit is contained in:
Aleksandr Statciuk 2022-05-11 01:27:33 +03:00
parent 9e4fd2b5c0
commit 5a2d57e529

View file

@ -0,0 +1,83 @@
const axios = require('axios')
const dayjs = require('dayjs')
const APP_KEY = '5ee2ef931de1c4001b2e7fa3_5ee2ec25a0e845001c1783dc'
const SESSION_KEY = '01G2QG0N3RWDNCBA1S5MK1MD2K17CE4431A2'
module.exports = {
site: 'starhubtvplus.com',
request: {
headers: {
'x-application-key': APP_KEY,
'x-application-session': SESSION_KEY
},
cache: {
ttl: 60 * 60 * 1000 // 1h
}
},
url: function ({ date }) {
const variables = JSON.stringify({
category: '',
dateFrom: date.format('YYYY-MM-DD'),
dateTo: date.add(1, 'd').format('YYYY-MM-DD')
})
const query = `query webFilteredEpg($category: String, $dateFrom: DateWithoutTime, $dateTo: DateWithoutTime!) { nagraEpg(category: $category) { items { id: tvChannel image name: longName programs: programsByDate(dateFrom: $dateFrom, dateTo: $dateTo) { id title description Categories startTime endTime }}}}`
const params = `operationName=webFilteredEpg&variables=${encodeURIComponent(
variables
)}&query=${encodeURIComponent(query)}`
return `https://api.starhubtvplus.com/epg?${params}`
},
parser: function ({ content, channel, cached }) {
let programs = []
const items = parseItems(content, channel)
items.forEach(item => {
programs.push({
title: item.title,
description: item.description,
category: item.Categories,
start: parseStart(item),
stop: parseStop(item)
})
})
return programs
},
async channels() {
const items = await axios
.get(
`https://api.starhubtvplus.com/epg?operationName=webFilteredEpg&variables=%7B%22category%22%3A%22%22,%22dateFrom%22%3A%222022-05-10%22,%22dateTo%22%3A%222022-05-11%22%7D&query=query%20webFilteredEpg(%24category%3A%20String)%20%7B%20nagraEpg(category%3A%20%24category)%20%7B%20items%20%7B%20id%3A%20tvChannel%20image%20name%3A%20longName%20%7D%7D%7D`,
{
headers: {
'x-application-key': APP_KEY,
'x-application-session': SESSION_KEY
}
}
)
.then(r => r.data.data.nagraEpg.items)
.catch(console.log)
return items.map(item => ({
site_id: item.id,
name: item.name.replace('_DASH', '')
}))
}
}
function parseStart(item) {
return dayjs(item.startTime)
}
function parseStop(item) {
return dayjs(item.endTime)
}
function parseItems(content, channel) {
const data = JSON.parse(content)
if (!data || !data.data || !data.data.nagraEpg || !Array.isArray(data.data.nagraEpg.items))
return []
const ch = data.data.nagraEpg.items.find(ch => ch.id == channel.site_id)
return ch && Array.isArray(ch.programs) ? ch.programs : []
}