Files
epg/scripts/commands/api/generate.ts

42 lines
1.2 KiB
TypeScript
Raw Normal View History

2025-07-18 22:51:01 +03:00
import { Logger, Collection, Storage } from '@freearhey/core'
2025-01-01 10:18:30 +03:00
import { SITES_DIR, API_DIR } from '../../constants'
2025-07-18 22:51:01 +03:00
import { GuideChannel } from '../../models'
import { ChannelsParser } from '../../core'
2025-04-02 07:13:39 +03:00
import epgGrabber from 'epg-grabber'
2025-07-18 22:51:01 +03:00
import path from 'path'
2025-01-01 10:18:30 +03:00
async function main() {
const logger = new Logger()
logger.start('staring...')
logger.info('loading channels...')
const sitesStorage = new Storage(SITES_DIR)
2025-07-18 22:51:01 +03:00
const parser = new ChannelsParser({
storage: sitesStorage
})
2025-01-01 10:18:30 +03:00
2025-07-18 22:51:01 +03:00
const files: string[] = await sitesStorage.list('**/*.channels.xml')
2025-01-01 10:18:30 +03:00
2025-07-18 22:51:01 +03:00
const channels = new Collection()
2025-01-01 10:18:30 +03:00
for (const filepath of files) {
2025-07-18 22:51:01 +03:00
const channelList = await parser.parse(filepath)
2025-01-01 10:18:30 +03:00
2025-07-18 22:51:01 +03:00
channelList.channels.forEach((data: epgGrabber.Channel) => {
channels.add(new GuideChannel(data))
})
}
2025-01-01 10:18:30 +03:00
2025-07-18 22:51:01 +03:00
logger.info(`found ${channels.count()} channel(s)`)
2025-04-02 07:13:39 +03:00
2025-07-18 22:51:01 +03:00
const output = channels.map((channel: GuideChannel) => channel.toJSON())
2025-01-01 10:18:30 +03:00
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()