From 7cb449da0664b955786e63c3939efa92fd4a5252 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 17 Nov 2023 05:03:54 +0300 Subject: [PATCH] Create generate.ts --- scripts/commands/api/generate.ts | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 scripts/commands/api/generate.ts diff --git a/scripts/commands/api/generate.ts b/scripts/commands/api/generate.ts new file mode 100644 index 00000000..a51b4dc5 --- /dev/null +++ b/scripts/commands/api/generate.ts @@ -0,0 +1,51 @@ +import { Logger, Storage, Collection } from '@freearhey/core' +import { ChannelsParser } from '../../core' +import path from 'path' +import { SITES_DIR, API_DIR } from '../../constants' +import { Channel } from 'epg-grabber' + +type OutputItem = { + channel: string + site: string + site_id: string + site_name: string + lang: string +} + +async function main() { + const logger = new Logger() + + logger.start('staring...') + + logger.info('loading channels...') + const sitesStorage = new Storage(SITES_DIR) + const parser = new ChannelsParser({ storage: sitesStorage }) + + let files: string[] = [] + files = await sitesStorage.list('**/*.channels.xml') + + let parsedChannels = new Collection() + for (const filepath of files) { + parsedChannels = parsedChannels.concat(await parser.parse(filepath)) + } + + logger.info(` found ${parsedChannels.count()} channel(s)`) + + const output = parsedChannels.map((channel: Channel): OutputItem => { + return { + channel: channel.xmltv_id || '', + site: channel.site || '', + site_id: channel.site_id || '', + site_name: channel.name, + lang: channel.lang || '' + } + }) + + const apiStorage = new Storage(API_DIR) + const outputFilename = 'guides.json' + await apiStorage.save('guides.json', output.toJSON()) + + logger.info(`saved to "${path.join(API_DIR, outputFilename)}"`) +} + +main()