Added update-codes script

This commit is contained in:
freearhey 2021-03-28 02:09:46 +03:00
parent f1b17a38e7
commit aad0fc4acc
3 changed files with 76 additions and 2 deletions

70
scripts/update-codes.js Normal file
View file

@ -0,0 +1,70 @@
const fs = require('fs')
const glob = require('glob')
const path = require('path')
const convert = require('xml-js')
function main() {
let codes = {}
console.log('Starting...')
glob('sites/**/*.xml', null, function (er, files) {
files.forEach(filename => {
const channels = parseChannels(filename)
channels.forEach(channel => {
if (!codes[channel.xmltv_id + channel.name]) {
codes[channel.xmltv_id + channel.name] = {
name: channel.name,
code: channel.xmltv_id
}
}
})
})
const sorted = Object.values(codes).sort((a, b) => {
if (a.name < b.name) return -1
if (a.name > b.name) return 1
return 0
})
writeToFile('codes.csv', convertToCSV(sorted))
console.log('Done')
})
}
function writeToFile(filename, data) {
console.log(`Saving all codes to '${filename}'...`)
const dir = path.resolve(path.dirname(filename))
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true })
}
fs.writeFileSync(path.resolve(filename), data)
}
function convertToCSV(arr) {
let string = 'Channel Name,EPG Code (tvg-id)\n'
for (const item of arr) {
string += `${item.name},${item.code}\n`
}
return string
}
function parseChannels(filename) {
if (!filename) throw new Error('Path to [site].channels.xml is missing')
console.log(`Loading '${filename}'...`)
const xml = fs.readFileSync(path.resolve(filename), { encoding: 'utf-8' })
const result = convert.xml2js(xml)
const site = result.elements.find(el => el.name === 'site')
const channels = site.elements.find(el => el.name === 'channels')
return channels.elements
.filter(el => el.name === 'channel')
.map(el => {
const channel = el.attributes
channel.name = el.elements.find(el => el.type === 'text').text
return channel
})
}
main()