tvheadend/support/sat_xml_scan.py
2014-05-26 16:53:26 +02:00

106 lines
2.3 KiB
Python
Executable file

#!/usr/bin/env python
#
# Convert XML files from http://satellites-xml.eu/ to scanfile format
#
import os
import sys
import xml.etree.ElementTree as ET
import re, unicodedata
FLAG_NETWORK_SCAN = 1
FLAG_USE_BAT = 2
FLAG_USE_ONOT = 4
FLAG_SKIP_NIT = 8
POLARIZATION = {
'0': 'H',
'1': 'V',
'2': 'L',
'3': 'R'
}
FEC = {
'0': 'AUTO',
'1': '1/2',
'2': '2/3',
'3': '3/4',
'4': '5/6',
'5': '7/8',
'6': '8/9',
'7': '3/5',
'8': '4/5',
'9': '9/10',
'15': 'NONE'
}
MODULATION = {
'0': 'AUTO',
'1': 'QPSK',
'2': '8PSK'
}
SYSTEM = {
'0': 'S',
'1': 'S2'
}
def inspect(node):
print(' tag=%s attrib=%s' % (repr(node.tag), repr(node.attrib)))
def asciize(str):
if type(str) != type(u''):
str = unicode(str, 'UTF-8')
str = unicodedata.normalize('NFKD', str).encode('ascii', 'ignore')
str = re.sub('\s\s+', ' ', str)
str = str.strip().replace(' ', '-')
return str
def parse_sat(node):
position = node.attrib['position']
flags = node.attrib['flags']
name = node.attrib['name']
assert(flags == '0')
filename = name.replace('(', '').replace(')', '').replace('/', '+')
filename = DIR + '/' + asciize(filename)
fp = open(filename, "w+")
fp.write('# Generated by tvheadend from satellites.xml\n')
for child in node:
if child.tag == 'transponder':
polarization = POLARIZATION[child.attrib['polarization']]
fec = FEC[child.attrib['fec_inner']]
freq = child.attrib['frequency']
rate = child.attrib['symbol_rate']
modulation = MODULATION[child.attrib['modulation']]
system = SYSTEM[child.attrib['system']]
if system == 'S' and modulation == 'QPSK':
fp.write('%s %s %s %s %s\n' %
(system, freq, polarization, rate, fec))
else:
fp.write('%s %s %s %s %s %s %s\n' %
(system, freq, polarization, rate, fec, 'AUTO', modulation))
fp.close()
if len(sys.argv) < 3:
if len(sys.argv) != 1:
usage = 'python sat_xml_scan.py'
else:
usage = sys.argv[0]
print('Usage: %s satellite.xml /output/directory/path' % usage)
sys.exit(0)
DIR = sys.argv[2]
if not os.path.isdir(DIR):
raise ValueError, "Second argument must be the output directory"
tree = ET.parse(sys.argv[1])
root = tree.getroot()
if root.tag == 'satellites':
for child in root:
if child.tag == 'sat':
parse_sat(child)