fHDHR_IPTVorg-US/origin/origin_channels.py
deathbybandaid f2399e8d35 test
2020-12-09 11:05:52 -05:00

96 lines
4.0 KiB
Python

class OriginChannels():
def __init__(self, fhdhr, origin):
self.fhdhr = fhdhr
self.origin = origin
"""
{
'name': '23 ABC (KERO)',
'logo': 'https://scripps.com/wp-content/uploads/2019/01/local_media_23_abc.png',
'url': 'https://content.uplynk.com/channel/ff809e6d9ec34109abfb333f0d4444b5.m3u8',
'category': 'Local',
'language': [{'code': 'eng', 'name': 'English'}],
'country': {'code': 'us', 'name': 'United States'},
'tvg': {'id': None, 'name': None, 'url': None}}
"""
def get_channels(self):
channel_list = []
self.fhdhr.logger.info("Pulling Unfiltered Channels: %s" % self.origin.channels_json_url)
urlopn = self.fhdhr.web.session.get(self.origin.channels_json_url)
unfiltered_chan_json = urlopn.json()
self.fhdhr.logger.info("Found %s Total Channels" % len(unfiltered_chan_json))
filtered_chan_list = self.filterlist(unfiltered_chan_json)
self.fhdhr.logger.info("Found %s Channels after applying filters." % len(filtered_chan_list))
for channel_dict in filtered_chan_list:
clean_station_item = {
"name": channel_dict["name"],
"id": channel_dict["name"],
"thumbnail": channel_dict["logo"],
}
channel_list.append(clean_station_item)
return channel_list
def filterlist(self, unfiltered_chan_json):
filtered_chan_list = []
for channels_item in unfiltered_chan_json:
filters_passed = []
for filter_key in list(self.origin.filter_dict.keys()):
if not len(self.origin.filter_dict[filter_key]):
filters_passed.append(True)
else:
if filter_key in ["country", "language"]:
if isinstance(channels_item[filter_key], list):
if len(channels_item[filter_key]):
chan_values = []
chan_values.extend([x["name"] for x in channels_item[filter_key]])
chan_values.extend([x["code"] for x in channels_item[filter_key]])
else:
chan_values = []
else:
chan_values = []
chan_values.append(channels_item[filter_key]["name"])
chan_values.append(channels_item[filter_key]["code"])
elif filter_key in ["category"]:
chan_values = [channels_item[filter_key]]
if not len(chan_values):
filter_passed = False
else:
values_passed = []
for chan_value in chan_values:
if str(chan_value).lower() in [x.lower() for x in self.origin.filter_dict[filter_key]]:
values_passed.append(True)
else:
values_passed.append(False)
if True in values_passed:
filter_passed = True
else:
filter_passed = False
filters_passed.append(filter_passed)
if False not in filters_passed:
filtered_chan_list.append(channels_item)
return filtered_chan_list
def get_channel_stream(self, chandict):
urlopn = self.fhdhr.web.session.get(self.origin.channels_json_url)
chan_json = urlopn.json()
streamdict = self.get_channel_dict(chan_json, "name", chandict["origin_name"])
streamurl = streamdict["url"]
return streamurl
def get_channel_dict(self, chanlist, keyfind, valfind):
return next(item for item in chanlist if item[keyfind] == valfind) or None