#!/usr/bin/python3 # -*- coding: UTF-8 -*- import sys import config import unicodedata def join(n1, n2): if n2: return n1+" "+n2 return n1 def fixurl(url): return url.replace("rtp://", "udp://").replace("@", "") def udpxy(url): return url.replace("@", "").replace("rtp://", "http://192.168.7.1:4022/udp/") def toascii(text): output = '' for c in unicodedata.normalize('NFKD', text): if not unicodedata.combining(c): output += c return output def fixlogo(logo): return toascii(logo).lower( ).replace(" ", "").replace(":", "").replace("/", "")+".png" class extinf(): def __init__(self, guide, group, flags, channel_name, url): self.guide = guide self.group = group self.flags = flags self.channel_name = channel_name self.url = url self.multicast = self.url.startswith("udp://") \ or self.url.startswith("rtp://") def prnt(self, cast="U"): yield ('#EXTINF:-1 %s group-title="%s"%s,%s' % (self.guide, self.group.replace("()", "("+cast+")"), self.flags, self.channel_name)) if cast=="U": yield udpxy(self.url) else: yield fixurl(self.url) def __call__(self): if MULTICAST: for y in self.prnt("M"): yield y if UNICAST and self.multicast: for y in self.prnt("U"): yield y def priority_hd(name): if name=="HD": return 0 return None def priority_sd(name): return None def process_channels(channels, flags=""): if flags: flags = ' %s="true"' % flags for channel in channels: if channel.source=="multi": guide = channel.find_guide() if guide: name_fixed = guide.name.replace(" ", "_") logo = fixlogo(guide.logo) shift = guide.shift guide = 'tvg-name="%s" tvg-id="%s" tvg-logo="%s"%s' \ % (name_fixed, guide.name, logo, flags) if shift: guide += " tvg-shift=%d" % shift else: name_fixed = channel.name.replace(" ", "_") logo = fixlogo(channel.name) guide = 'tvg-name="%s" tvg-logo="%s"%s' % (name_fixed, logo, flags) chans = [] for source in channel.urls: if source.url and source.source!="Archive": if source.url.startswith("dvb://") or source.url.startswith("v4l"): continue name = join(channel.name, source.name) if priority(source.name) is not None: # prefer this channel chans.insert( priority(source.name), [name, source.name, guide, source.url] ) else: chans.append([name, source.name, guide, source.url]) n = 0 for name, source, guide, url in chans: n += 1 if flags: group = "Radio" elif n==1: group = "Basic()" else: group = "Other()" if group in EXCLUDED_GROUPS: continue for y in extinf(guide, group, flags, name, url)(): yield y else: if channel.url.startswith("dvb://") or channel.url.startswith("v4l"): continue guide = 'tvg-name="%s" tvg-logo="%s"' \ % (channel.name, fixlogo(channel.name)) if flags: group = "Radio" else: group = "Basic()" if group in EXCLUDED_GROUPS: continue for y in extinf(guide, group, flags, channel.name, channel.url)(): yield y #MULTICAST = False #UNICAST = False #if '-m' in sys.argv: # MULTICAST = True #elif '-u' in sys.argv: # UNICAST = True #if not MULTICAST and not UNICAST: # MULTICAST = True # UNICAST = True #MULTICAST = True #UNICAST = True #EXCLUDED_GROUPS = [] #priority = priority_hd #f = open("../public_html/tv/channels.m3u", "w") #f.write('#EXTM3U\n') #for y in process_channels(config.BASIC + config.CHILDREN): # f.write(y+"\n") #for y in process_channels(config.RADIO, "radio"): # f.write(y+"\n") #f.close() #MULTICAST = True #UNICAST = False #EXCLUDED_GROUPS = ["Other()"] #priority = priority_hd #f = open("../public_html/tv/hdtv.m3u", "w") #f.write('#EXTM3U\n') #for y in process_channels(config.BASIC + config.CHILDREN): # f.write(y+"\n") #for y in process_channels(config.RADIO, "radio"): # f.write(y+"\n") #f.close() f = open("../public_html/tv/antik.m3u", "w") f.write('#EXTM3U\n') EXCLUDED_GROUPS = ["Other()"] MULTICAST = True UNICAST = False priority = priority_hd for y in process_channels(config.BASIC + config.CHILDREN): f.write(y+"\n") for y in process_channels(config.RADIO, "radio"): f.write(y+"\n") MULTICAST = False UNICAST = True for y in process_channels(config.BASIC + config.CHILDREN): f.write(y+"\n") for y in process_channels(config.RADIO, "radio"): f.write(y+"\n") f.close() #f = open("../public_html/tv/sdtv2.m3u", "w") #f.write('#EXTM3U\n') #EXCLUDED_GROUPS = ["Other()"] #MULTICAST = True #UNICAST = False #priority = priority_sd #for y in process_channels(config.BASIC + config.CHILDREN): # f.write(y+"\n") #for y in process_channels(config.RADIO, "radio"): # f.write(y+"\n") #MULTICAST = False #UNICAST = True #for y in process_channels(config.BASIC + config.CHILDREN): # f.write(y+"\n") #for y in process_channels(config.RADIO, "radio"): # f.write(y+"\n") #f.close() #MULTICAST = True #UNICAST = False #EXCLUDED_GROUPS = [] #priority = priority_hd #f = open("../public_html/tv/multicast.m3u", "w") #f.write('#EXTM3U\n') #for y in process_channels(config.BASIC + config.CHILDREN): # f.write(y+"\n") #for y in process_channels(config.RADIO, "radio"): # f.write(y+"\n") #f.close() #MULTICAST = False #UNICAST = True #EXCLUDED_GROUPS = [] #priority = priority_hd #f = open("../public_html/tv/unicast.m3u", "w") #f.write('#EXTM3U\n') #for y in process_channels(config.BASIC + config.CHILDREN): # f.write(y+"\n") #for y in process_channels(config.RADIO, "radio"): # f.write(y+"\n") #f.close()