fHDHR_NewsON/fHDHR/origin/origin_channels.py
deathbybandaid fc7c1c3889 test
2020-11-27 17:10:23 -05:00

57 lines
2.0 KiB
Python

import m3u8
class OriginChannels():
def __init__(self, fhdhr, origin):
self.fhdhr = fhdhr
self.origin = origin
self.base_api = 'http://watchnewson.com/api/linear/channels'
def get_channels(self):
channel_list = []
channels_json = self.fhdhr.web.session.get(self.base_api).json()
for channel_dict in channels_json:
if not channel_dict["disabled"]:
clean_station_item = {
"name": channel_dict["config"]["affiliation"] or channel_dict["config"]["callsign"],
"callsign": channel_dict["config"]["callsign"],
"id": channel_dict["identifier"],
}
channel_list.append(clean_station_item)
return channel_list
def get_channel_stream(self, chandict):
channels_json = self.fhdhr.web.session.get(self.base_api).json()
origin_chandict = self.get_channel_dict(channels_json, "identifier", chandict["origin_id"])
streamdict = self.get_channel_dict(origin_chandict["streams"], "StreamType", 'website')
streamurl = streamdict['Url']
if self.fhdhr.config.dict["origin"]["force_best"]:
streamurl = self.m3u8_beststream(streamurl)
return streamurl
def get_channel_dict(self, chanlist, keyfind, valfind):
return next(item for item in chanlist if item[keyfind] == valfind)
def m3u8_beststream(self, m3u8_url):
bestStream = None
videoUrlM3u = m3u8.load(m3u8_url)
if not videoUrlM3u.is_variant:
return m3u8_url
for videoStream in videoUrlM3u.playlists:
if not bestStream:
bestStream = videoStream
elif videoStream.stream_info.bandwidth > bestStream.stream_info.bandwidth:
bestStream = videoStream
if not bestStream:
return bestStream.absolute_uri
else:
return m3u8_url