Files
epg/sites/teliatv.ee/teliatv.ee.config.js
RevGear 3742888b11 Update teliatv.ee
Added website language (English / Estonian / Russian) to site id and use that to get data URL, rather than use channel language. Too many cases where the language in the URL didn't match the actual language of the returned data.

Refreshed channel list
2023-01-27 17:35:29 +00:00

70 lines
1.8 KiB
JavaScript

const axios = require('axios')
const dayjs = require('dayjs')
module.exports = {
site: 'teliatv.ee',
days: 2,
url({ date, channel }) {
const [lang, channelId] = channel.site_id.split('#')
return `https://api.teliatv.ee/dtv-api/3.2/${lang}/epg/guide?channelIds=${
channelId
}&relations=programmes&images=webGuideItemLarge&startAt=${date
.add(1, 'd')
.format('YYYY-MM-DDTHH:mm')}&startAtOp=lte&endAt=${date.format(
'YYYY-MM-DDTHH:mm'
)}&endAtOp=gt`
},
parser({ content, channel }) {
let programs = []
const items = parseItems(content, channel)
items.forEach(item => {
programs.push({
title: item.name,
icon: parseIcon(item),
start: dayjs(item.startAt),
stop: dayjs(item.endAt)
})
})
return programs
},
async channels({ lang }) {
const data = await axios
.get(`https://api.teliatv.ee/dtv-api/3.0/${lang}/channel-lists?listClass=tv&ui=tv-web`)
.then(r => r.data)
.catch(console.log)
return Object.values(data.channels).map(item => {
return {
lang,
site_id: item.id,
name: item.title
}
})
}
}
function parseIcon(item) {
return item.images.webGuideItemLarge
? `https://inet-static.mw.elion.ee${item.images.webGuideItemLarge}`
: null
}
function parseItems(content, channel) {
const data = JSON.parse(content)
if (!data || !data.relations || !data.categoryItems) return []
const [, channelId] = channel.site_id.split('#')
const items = data.categoryItems[channelId] || []
return items
.map(i => {
const programmeId = i.related.programmeIds[0]
if (!programmeId) return null
const progData = data.relations.programmes[programmeId]
if (!progData) return null
return { ...i, ...progData }
})
.filter(i => i)
}