mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
Update grab.js
This commit is contained in:
parent
3d27fd729d
commit
b50351137d
1 changed files with 9 additions and 45 deletions
|
@ -1,12 +1,11 @@
|
||||||
#! /usr/bin/env node
|
#! /usr/bin/env node
|
||||||
|
|
||||||
const { Command } = require('commander')
|
const { Command } = require('commander')
|
||||||
const program = new Command()
|
|
||||||
const grabber = require('epg-grabber')
|
const grabber = require('epg-grabber')
|
||||||
const path = require('path')
|
const parser = require('./parser')
|
||||||
const fs = require('fs')
|
const file = require('./file')
|
||||||
const convert = require('xml-js')
|
|
||||||
|
|
||||||
|
const program = new Command()
|
||||||
program
|
program
|
||||||
.requiredOption('--site <site>', 'Site domain')
|
.requiredOption('--site <site>', 'Site domain')
|
||||||
.option('--country <country>', 'Filter channels by country ISO code')
|
.option('--country <country>', 'Filter channels by country ISO code')
|
||||||
|
@ -24,14 +23,14 @@ async function main() {
|
||||||
const channelsPath = `sites/${options.site}.channels.xml`
|
const channelsPath = `sites/${options.site}.channels.xml`
|
||||||
|
|
||||||
console.log(`Loading '${channelsPath}'...`)
|
console.log(`Loading '${channelsPath}'...`)
|
||||||
let channels = parseChannels(path.resolve(channelsPath))
|
const channelsFile = file.read(channelsPath)
|
||||||
|
let channels = parser.parseChannels(channelsFile)
|
||||||
channels = filterChannels(channels, options)
|
channels = filterChannels(channels, options)
|
||||||
|
|
||||||
console.log('Parsing:')
|
console.log('Parsing:')
|
||||||
let programs = []
|
let programs = []
|
||||||
for (let channel of channels) {
|
for (let channel of channels) {
|
||||||
const configPath = path.resolve(`sites/${channel.site}.config.js`)
|
const config = file.load(`sites/${channel.site}.config.js`)
|
||||||
const config = require(configPath)
|
|
||||||
config.days = options.days
|
config.days = options.days
|
||||||
await grabber
|
await grabber
|
||||||
.grab(channel, config, (item, err) => {
|
.grab(channel, config, (item, err) => {
|
||||||
|
@ -54,7 +53,7 @@ async function main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const xml = grabber.convertToXMLTV({ channels, programs })
|
const xml = grabber.convertToXMLTV({ channels, programs })
|
||||||
writeToFile(options.output, xml)
|
file.write(options.output, xml)
|
||||||
|
|
||||||
console.log(`File '${options.output}' successfully saved`)
|
console.log(`File '${options.output}' successfully saved`)
|
||||||
console.timeEnd(`Done in`)
|
console.timeEnd(`Done in`)
|
||||||
|
@ -62,8 +61,6 @@ async function main() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
main()
|
|
||||||
|
|
||||||
function filterChannels(channels, options) {
|
function filterChannels(channels, options) {
|
||||||
return channels.filter(channel => {
|
return channels.filter(channel => {
|
||||||
let result = true
|
let result = true
|
||||||
|
@ -73,41 +70,8 @@ function filterChannels(channels, options) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseChannels(filename) {
|
|
||||||
const xml = fs.readFileSync(path.resolve(filename), { encoding: 'utf-8' })
|
|
||||||
const result = convert.xml2js(xml)
|
|
||||||
const siteTag = result.elements.find(el => el.name === 'site')
|
|
||||||
const channelsTags = siteTag.elements.filter(el => el.name === 'channels')
|
|
||||||
|
|
||||||
let output = []
|
|
||||||
|
|
||||||
channelsTags.forEach(channelsTag => {
|
|
||||||
const channels = channelsTag.elements
|
|
||||||
.filter(el => el.name === 'channel')
|
|
||||||
.map(el => {
|
|
||||||
const channel = el.attributes
|
|
||||||
if (!el.elements) throw new Error(`Channel '${channel.xmltv_id}' has no valid name`)
|
|
||||||
channel.name = el.elements.find(el => el.type === 'text').text
|
|
||||||
channel.country = channelsTag.attributes.country
|
|
||||||
channel.site = siteTag.attributes.site
|
|
||||||
|
|
||||||
return channel
|
|
||||||
})
|
|
||||||
output = output.concat(channels)
|
|
||||||
})
|
|
||||||
|
|
||||||
return output
|
|
||||||
}
|
|
||||||
|
|
||||||
function writeToFile(filename, data) {
|
|
||||||
const dir = path.resolve(path.dirname(filename))
|
|
||||||
if (!fs.existsSync(dir)) {
|
|
||||||
fs.mkdirSync(dir, { recursive: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync(path.resolve(filename), data)
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseInteger(val) {
|
function parseInteger(val) {
|
||||||
return val ? parseInt(val) : null
|
return val ? parseInt(val) : null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue