72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
|
from servicebase import ServiceBase
|
||
|
import re
|
||
|
import requests
|
||
|
import json
|
||
|
|
||
|
class ServiceDelegate(ServiceBase) :
|
||
|
|
||
|
def get_arguments(cls) :
|
||
|
"""Returns an array of information used to construct an argumentparser argument."""
|
||
|
return [ '-cms','--channel', 'store_true', "Return CMS channel info about the subject (cms)" ]
|
||
|
|
||
|
def startup(self) :
|
||
|
pass
|
||
|
|
||
|
def lookup(self,subject) :
|
||
|
self.debug('Checking channel...',1)
|
||
|
guid = list(re.match('([0-9a-fA-F]*)', subject).groups())
|
||
|
if len(guid) > 0 and len(guid[0]) == 32 :
|
||
|
guid = guid[0]
|
||
|
self.debug('Channel appears to be a valid guid',3)
|
||
|
else :
|
||
|
guid = None
|
||
|
self.debug('Channel does not appear to be a valid guid',3)
|
||
|
if guid :
|
||
|
channels = self.get_channel(guid)
|
||
|
if channels :
|
||
|
channels = {'channels':[channels]}
|
||
|
channels['channels'][0].update({'self_url':'https://cbd46b77.cdn.cms.movetv.com/cms/api/channels/' + guid + '/schedule/now/playback_info.qvt'})
|
||
|
try :
|
||
|
asset = self.get_asset(channels['channels'][0]['asset']['guid'])
|
||
|
channels.update({'assets':[asset]})
|
||
|
channels['assets'][0].update({'self_url':'https://cbd46b77.cms.movetv.com/cms/publish3/asset/info/' + channels['channels'][0]['asset']['guid'] + '.json'})
|
||
|
except :
|
||
|
pass
|
||
|
return channels
|
||
|
else :
|
||
|
assets = self.get_asset(guid)
|
||
|
if assets :
|
||
|
assets = {'assets':[assets]}
|
||
|
assets['assets'][0].update({'self_url':'https://cbd46b77.cms.movetv.com/cms/publish3/asset/info/' + guid + '.json'})
|
||
|
# Gets the channels that the asset was played on.
|
||
|
# Since this isn't always accurate for finished live assets, we'll leave it out
|
||
|
# try :
|
||
|
# channels = [x['channel_guid'] for x in [y['schedules'] for y in assets['assets']][0]]
|
||
|
# channels = {'channels':[self.get_channel(x) for x in channels]}
|
||
|
# assets.update(channels)
|
||
|
# except Exception as e:
|
||
|
# print(e)
|
||
|
return assets
|
||
|
|
||
|
def get_channel(self,guid) :
|
||
|
self.debug('Trying channel info request...',2)
|
||
|
channel_req = requests.get('https://cbd46b77.cdn.cms.movetv.com/cms/api/channels/' + guid + '/schedule/now/playback_info.qvt')
|
||
|
if channel_req.status_code == 200 :
|
||
|
self.debug('Channel appears to be a valid channel',3)
|
||
|
payload = json.loads(channel_req.text)
|
||
|
return_dict = payload['playback_info']
|
||
|
return return_dict
|
||
|
else :
|
||
|
self.debug('Got ' + str(channel_req.status_code) + ' for channel info request from CMS',1)
|
||
|
|
||
|
def get_asset(self,guid) :
|
||
|
self.debug('Trying asset info request...',2)
|
||
|
asset_req = requests.get('https://cbd46b77.cms.movetv.com/cms/publish3/asset/info/' + guid + '.json')
|
||
|
if asset_req.status_code == 200 :
|
||
|
self.debug('Channel appears to be a asset',3)
|
||
|
payload = json.loads(asset_req.text)
|
||
|
return_dict = payload
|
||
|
return return_dict
|
||
|
else :
|
||
|
self.debug('Got ' + str(asset_req.status_code) + ' for asset info request from CMS',1)
|