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