Update index.js

This commit is contained in:
Aleksandr Statciuk 2021-10-06 00:37:16 +03:00
parent d945a311cf
commit b498d24815
1 changed files with 35 additions and 65 deletions

View File

@ -1,74 +1,44 @@
#! /usr/bin/env node const axios = require('axios').default
const { Command } = require('commander')
const program = new Command()
const utils = require('./utils') const utils = require('./utils')
const { name, version, description } = require('../package.json')
program const Result = {
.name(name) events: {
.version(version, '-v, --version') data: () => {},
.description(description) error: () => {},
.option('-c, --config <config>', 'Path to [site].config.js file') done: () => {}
.option('-o, --output <output>', 'Path to output file', 'guide.xml') },
.option('--channels <channels>', 'Path to channels.xml file') on(type, cb) {
.option('--lang <lang>', 'Set default language for all programs', 'en') this.events[type] = cb
.option('--days <days>', 'Number of days for which to grab the program', 1) }
.option('--delay <delay>', 'Delay between requests (in mileseconds)', 3000) }
.option('--debug', 'Enable debug mode', false)
.parse(process.argv)
const options = program.opts() module.exports = {
const config = utils.loadConfig(options) grab: async function (channel, config, cb) {
cb(Result)
async function main() { const utcDate = utils.getUTCDate()
console.log('\r\nStarting...') const dates = Array.from({ length: config.days }, (_, i) => utcDate.add(i, 'd'))
const queue = []
const channels = utils.parseChannels(config.channels)
const utcDate = utils.getUTCDate()
const dates = Array.from({ length: config.days }, (_, i) => utcDate.add(i, 'd'))
const queue = []
channels.forEach(channel => {
dates.forEach(date => { dates.forEach(date => {
queue.push({ date, channel }) queue.push({ date, channel })
}) })
})
let programs = [] let programs = []
console.log('Parsing:') for (let item of queue) {
for (let item of queue) { await utils
if (options.debug) console.time(' Response Time') .buildRequest(item, config)
await utils .then(request => utils.fetchData(request))
.buildRequest(item, config) .then(response => utils.parseResponse(item, response, config))
.then(utils.fetchData) .then(results => {
.then(async response => { item.programs = results
if (options.debug) console.timeEnd(' Response Time') Result.events['data'](item)
if (options.debug) console.time(' Parsing Time') programs = programs.concat(results)
const results = await utils.parseResponse(item, response, config) })
if (options.debug) console.timeEnd(' Parsing Time') .catch(err => {
programs = programs.concat(results) Result.events['error'](err)
}) })
.then(utils.sleep(config.delay)) .finally(utils.sleep(config.delay))
.catch(err => { }
console.log(
` ${config.site} - ${item.channel.xmltv_id} - ${item.date.format( Result.events['done'](programs)
'MMM D, YYYY'
)} (0 programs)`
)
console.log(` Error: ${err.message}`)
if (options.debug) {
console.timeEnd(' Response Time')
console.timeEnd(' Parsing Time')
}
})
} }
const xml = utils.convertToXMLTV({ config, channels, programs })
utils.writeToFile(config.output, xml)
console.log(`File '${config.output}' successfully saved`)
console.log('Finish')
} }
main()