2022-01-19 16:29:17 +03:00
|
|
|
const { db, logger, file } = require('../core')
|
|
|
|
|
const grabber = require('epg-grabber')
|
2022-01-09 16:09:19 +03:00
|
|
|
const _ = require('lodash')
|
|
|
|
|
|
2022-01-09 20:14:41 +03:00
|
|
|
const DB_DIR = process.env.DB_DIR || 'scripts/database'
|
2022-01-14 20:37:21 +03:00
|
|
|
const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs'
|
2022-01-12 13:27:27 +03:00
|
|
|
const PUBLIC_DIR = process.env.PUBLIC_DIR || '.gh-pages'
|
2022-01-15 18:26:03 +03:00
|
|
|
const LOG_PATH = `${LOGS_DIR}/update-guides.log`
|
2022-01-09 16:09:19 +03:00
|
|
|
|
|
|
|
|
async function main() {
|
2022-01-14 20:37:21 +03:00
|
|
|
await setUp()
|
2022-01-12 13:27:27 +03:00
|
|
|
await generateGuides()
|
2022-01-09 16:09:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
main()
|
|
|
|
|
|
2022-01-12 13:27:27 +03:00
|
|
|
async function generateGuides() {
|
|
|
|
|
logger.info(`Generating guides/...`)
|
2022-01-10 22:16:18 +03:00
|
|
|
|
2022-01-15 18:26:03 +03:00
|
|
|
const channels = await loadChannels()
|
2022-01-14 17:13:20 +03:00
|
|
|
const programs = await loadPrograms()
|
2022-01-10 22:16:18 +03:00
|
|
|
|
2022-01-15 18:26:03 +03:00
|
|
|
const grouped = _.groupBy(programs, i => `${i.gid}_${i.site}`)
|
2022-01-14 20:37:21 +03:00
|
|
|
for (let key in grouped) {
|
|
|
|
|
const [gid, site] = key.split('_') || [null, null]
|
|
|
|
|
const filepath = `${PUBLIC_DIR}/guides/${gid}/${site}.epg.xml`
|
|
|
|
|
const groupProgs = grouped[key]
|
2022-01-14 17:13:20 +03:00
|
|
|
const groupChannels = Object.keys(_.groupBy(groupProgs, i => `${i.site}_${i.channel}`)).map(
|
|
|
|
|
key => {
|
|
|
|
|
let [site, channel] = key.split('_')
|
2022-01-09 18:15:38 +03:00
|
|
|
|
2022-01-14 17:13:20 +03:00
|
|
|
return channels.find(i => i.xmltv_id === channel && i.site === site)
|
2022-01-09 18:15:38 +03:00
|
|
|
}
|
2022-01-14 17:13:20 +03:00
|
|
|
)
|
2022-01-10 00:34:05 +03:00
|
|
|
|
2022-01-19 16:29:17 +03:00
|
|
|
const output = grabber.convertToXMLTV({ channels: groupChannels, programs: groupProgs })
|
2022-01-09 18:15:38 +03:00
|
|
|
|
2022-01-15 19:40:33 +03:00
|
|
|
logger.info(`Creating "${filepath}"...`)
|
2022-01-14 17:13:20 +03:00
|
|
|
await file.create(filepath, output)
|
2022-01-14 20:37:21 +03:00
|
|
|
|
|
|
|
|
await log({
|
|
|
|
|
gid,
|
2022-01-15 00:03:45 +03:00
|
|
|
site,
|
|
|
|
|
count: groupChannels.length,
|
|
|
|
|
status: 1
|
2022-01-14 20:37:21 +03:00
|
|
|
})
|
2022-01-14 17:13:20 +03:00
|
|
|
}
|
2022-01-15 19:40:33 +03:00
|
|
|
|
|
|
|
|
logger.info(`Done`)
|
2022-01-09 16:09:19 +03:00
|
|
|
}
|
|
|
|
|
|
2022-01-15 18:26:03 +03:00
|
|
|
async function loadChannels() {
|
2022-01-15 19:40:33 +03:00
|
|
|
logger.info('Loading channels...')
|
2022-01-15 18:26:03 +03:00
|
|
|
|
|
|
|
|
await db.channels.load()
|
|
|
|
|
|
|
|
|
|
return await db.channels.find({}).sort({ xmltv_id: 1 })
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-09 22:03:45 +03:00
|
|
|
async function loadPrograms() {
|
2022-01-15 19:40:33 +03:00
|
|
|
logger.info('Loading programs...')
|
2022-01-15 18:26:03 +03:00
|
|
|
|
2022-01-15 19:40:33 +03:00
|
|
|
logger.info('Loading "database/programs.db"...')
|
2022-01-15 18:26:03 +03:00
|
|
|
await db.programs.load()
|
|
|
|
|
|
2022-01-15 19:40:33 +03:00
|
|
|
logger.info('Loading programs from "database/programs.db"...')
|
2022-01-14 17:13:20 +03:00
|
|
|
let programs = await db.programs.find({}).sort({ channel: 1, start: 1 })
|
2022-01-12 13:27:27 +03:00
|
|
|
|
|
|
|
|
programs = programs.map(program => {
|
|
|
|
|
return {
|
2022-01-19 16:29:17 +03:00
|
|
|
title: program.title,
|
|
|
|
|
description: program.description,
|
2022-01-21 00:00:44 +03:00
|
|
|
category: program.category,
|
2022-01-12 13:27:27 +03:00
|
|
|
icon: program.icon,
|
|
|
|
|
channel: program.channel,
|
|
|
|
|
lang: program.lang,
|
|
|
|
|
start: program.start,
|
|
|
|
|
stop: program.stop,
|
|
|
|
|
site: program.site,
|
|
|
|
|
country: program.country,
|
2022-01-19 02:28:46 +03:00
|
|
|
season: program.season,
|
|
|
|
|
episode: program.episode,
|
2022-01-14 17:13:20 +03:00
|
|
|
gid: program.gid,
|
2022-01-12 13:27:27 +03:00
|
|
|
_id: program._id
|
2022-01-09 20:29:18 +03:00
|
|
|
}
|
2022-01-12 13:27:27 +03:00
|
|
|
})
|
2022-01-09 20:29:18 +03:00
|
|
|
|
2022-01-12 13:27:27 +03:00
|
|
|
return programs
|
2022-01-09 22:03:45 +03:00
|
|
|
}
|
2022-01-14 20:37:21 +03:00
|
|
|
|
|
|
|
|
async function setUp() {
|
2022-01-15 18:26:03 +03:00
|
|
|
logger.info(`Creating '${LOG_PATH}'...`)
|
|
|
|
|
await file.create(LOG_PATH)
|
2022-01-14 20:37:21 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function log(data) {
|
2022-01-15 18:26:03 +03:00
|
|
|
await file.append(LOG_PATH, JSON.stringify(data) + '\n')
|
2022-01-14 20:37:21 +03:00
|
|
|
}
|