Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import _addoncompat
- import _common
- import _connection
- import _m3u8
- import os
- import re
- import simplejson
- import sys
- import time
- import mechanize
- import cookielib
- import urllib
- from PIL import Image
- import xbmc
- import xbmcgui
- import xbmcplugin
- from bs4 import BeautifulSoup, SoupStrainer
- pluginHandle = int(sys.argv[1])
- ACTION_PREVIOUS_MENU = 10
- SHOWS = 'http://api.watchabc.go.com/vp2/ws/s/contents/2015/shows/jsonp/%s/001/-1'
- VIDEOLIST = 'http://api.watchabc.go.com/vp2/ws/s/contents/2015/videos/jsonp/%s/'
- VIDEOURL = 'http://api.watchabc.go.com/vp2/ws/s/contents/2015/videos/jsonp/%s'
- PLAYLISTMOV = 'http://www.kaltura.com/p/%s/sp/%s00/playManifest/format/rtmp/entryId/'
- PLAYLISTMP4 = 'http://www.kaltura.com/p/%s/sp/%s00/playManifest/format/applehttp/entryId/'
- CLOSEDCAPTIONHOST = 'http://cdn.video.abc.com'
- GETAUTHORIZATION = 'http://api.watchabc.go.com/vp2/ws-secure/entitlement/2015/authorize/json'
- SWFURL = 'http://livepassdl.conviva.com/ver/2.61.0.65970/LivePassModuleMain.swf'
- BITRATETABLE = { 60 : 'a',
- 110 : 'b',
- 190 : 'c',
- 360 : 'd',
- 590 : 'e',
- 1010 : 'f',
- 2100 : 'g' }
- class MyClass(xbmcgui.WindowDialog):
- def __init__(self):
- self.addControl(xbmcgui.ControlImage(0,0,800,600, 'https://login.comcast.net/proxy/captcha/data/?type=GIF&lang=eng&index=0&token=2.4132.107322.1395844078.2.P8SSmxmMdp0gmIUrRdTLkg,,.11t4hEplRErAmS0Iq_jkpS_5T44f1deWNXpc3FYj07bBovV8hZ9_s1o9RyiLLXTDv0mYVNilBXZyQOpUfS5vuYhMesVAkraKaYmWN0kGqf0vfE3Uzx3jLnpxA01J6ugAkvaocwRULGnJ4inlckxVlzjzWW-gdF4SkUByRYIS_2cbtDRblfXdPNI4qg7qssmdNwWiZYxvDmro9ylIUHIAztB3FpTwhmfDXRaVf0OEt2krFXPTU2r8AsEDAC8h8VtaRfV7w0aQEYzL0tEdHGCcif2Xnfilkk-0IIwWDJnPit7SMLZFppchq0WYRdxqpmlr_2nJn5gIVaWvoi7uQ_TTfPCPmNFpCBC2jotl2HtRJsQDMWaKjU5D-UmPxGn05ywNqmj-nzRf6THsKmQGB_CAFlCq02DMyb1KMkqIudpn0tD4zaMOp5wUoR_6RxMBz8mJWh4Az_Rw28uBYxNy8codKkyDPpnIugxhBlns-f3J438,.WTJIa3ZsVmNXT1BtQm85Q21pMG1peDNyOXkwc1dRbG5MQkFqTHg5OWdmcSs1M0d6UVJES1FIOGt4elBtRUpSaFZxQVZXZzdRcUhXLzYzWE1WMUEvRFdST3pvVXJzN2lvdU4wYlRTZjhwR3pCaGhXV2F1TjVrQkRCSVJwdGh5bHRBWDZFMi9MNndNWWFjZkRvcXhQNTV5aE5hTURoOUJ3ZnB2MzNLQThYaEZ3PQ,,'))
- self.strActionInfo = xbmcgui.ControlLabel(100, 120, 200, 200, '', 'font13', '0xFFFF00FF')
- self.addControl(self.strActionInfo)
- self.strActionInfo.setLabel('Push BACK to quit')
- self.strActionInfo = xbmcgui.ControlLabel(100, 300, 200, 200, '', 'font13', '0xFFFFFFFF')
- self.addControl(self.strActionInfo)
- #keyboard = xbmc.Keyboard('mytext')
- #keyboard.doModal()
- #if (keyboard.isConfirmed()):
- # self.strActionInfo.setLabel(keyboard.getText())
- #else:
- # self.strActionInfo.setLabel('user canceled')
- def onAction(self, action):
- if action == ACTION_PREVIOUS_MENU:
- self.close()
- ACTION_MOVE_LEFT = 1
- ACTION_MOVE_RIGHT = 2
- ACTION_MOVE_UP = 3
- ACTION_MOVE_DOWN = 4
- ACTION_PAGE_UP = 5
- ACTION_PAGE_DOWN = 6
- ACTION_SELECT_ITEM = 7
- ACTION_HIGHLIGHT_ITEM = 8
- ACTION_PARENT_DIR = 9
- ACTION_PREVIOUS_MENU = 10
- ACTION_SHOW_INFO = 11
- ACTION_PAUSE = 12
- ACTION_STOP = 13
- ACTION_NEXT_ITEM = 14
- ACTION_PREV_ITEM = 15
- # NewDialog class with xbmcgui.WindowDialog as it's base class
- # note xbmcgui.WindowDialog has xbmcgui.Window as it's baseclass so we can use this
- # dialog the same as a window
- class NewDialog(xbmcgui.WindowDialog):
- def __init__(self):
- # create result variable and add some images + buttons to our dialog
- self.result = 0
- self.addControl(xbmcgui.ControlImage(0,0,406,140, os.path.join(_common.CACHEPATH,'captcha.png')))
- #self.edtE = xbmcgui.ControlEdit(700, 210, 150, 40,'')
- #self.addControl(self.edtE)
- self.buttonOK = xbmcgui.ControlButton(290, 330, 80, 32, 'OK')
- self.buttonCancel = xbmcgui.ControlButton(380, 330, 80, 32, 'Cancel')
- self.addControl(self.buttonOK)
- self.addControl(self.buttonCancel)
- # setting up navigation and focus
- self.setFocus(self.buttonOK)
- self.buttonOK.controlRight(self.buttonCancel)
- self.buttonOK.controlLeft(self.buttonCancel)
- self.buttonCancel.controlRight(self.buttonOK)
- self.buttonCancel.controlLeft(self.buttonOK)
- # labels
- self.lblHeading = xbmcgui.ControlLabel(190, 226, 200, 20, '')
- self.lblLine = []
- self.lblLine.append(xbmcgui.ControlLabel(190, 260, 200, 20, ''))
- self.lblLine.append(xbmcgui.ControlLabel(190, 280, 200, 20, ''))
- self.lblLine.append(xbmcgui.ControlLabel(190, 300, 200, 20, ''))
- self.addControl(self.lblHeading)
- self.addControl(self.lblLine[0])
- self.addControl(self.lblLine[1])
- self.addControl(self.lblLine[2])
- def setHeading(self, text):
- self.lblHeading.setLabel(text)
- def setLine(self, line, text):
- self.lblLine[line].setLabel(text)
- def onAction(self, action):
- if action == ACTION_PREVIOUS_MENU:
- # previous menu action recieved, set result to 0 (cancel / aborted) and close the window
- self.result = 0
- self.close()
- def onControl(self, control):
- if control == self.buttonOK:
- # ok butten pressed, set result to 1 and close the dialog
- self.result = 1
- self.close()
- elif control == self.buttonCancel:
- # ok butten pressed, set result to 0 and close the dialog
- self.result = 0
- self.close()
- def ask(self):
- # show this dialog and wait until it's closed
- self.show()
- keyboard = xbmc.Keyboard()
- keyboard.doModal()
- if (keyboard.isConfirmed()):
- return keyboard.getText()
- else:
- return None
- #return self.result
- def masterlist(SITE, BRANDID):
- master_db = []
- master_data = _connection.getURL(SHOWS % BRANDID)
- master_menu = simplejson.loads(master_data)['shows']['show']
- for master_item in master_menu:
- fullepisodes = 0
- clips = 0
- if (int(master_item['clips']['count']['@total']) + int(master_item['fullepisodes']['count']['@total'])) > 0:
- if int(master_item['clips']['count']['@total']) > 0:
- try:
- if int(master_item['clips']['count']['video']['@accesslevel']) == 0:
- clips = int(master_item['clips']['count']['video']['$'])
- except:
- if int(master_item['clips']['count']['video'][0]['@accesslevel']) == 0:
- clips = int(master_item['clips']['count']['video'][0]['$'])
- if int(master_item['fullepisodes']['count']['@total']) > 0:
- try:
- if int(master_item['fullepisodes']['count']['video']['@accesslevel']) == 0:
- fullepisodes = int(master_item['fullepisodes']['count']['video']['$'])
- except:
- if int(master_item['fullepisodes']['count']['video'][0]['@accesslevel']) == 0:
- fullepisodes = int(master_item['fullepisodes']['count']['video'][0]['$'])
- if (fullepisodes + clips) > 0:
- master_name = master_item['title']
- season_url = master_item['@id']
- master_db.append((master_name, SITE, 'seasons', season_url))
- print master_db
- return master_db
- def rootlist(SITE, BRANDID):
- root_data = _connection.getURL(SHOWS % BRANDID)
- root_menu = simplejson.loads(root_data)['shows']['show']
- for root_item in root_menu:
- fullepisodes = 0
- clips = 0
- if (int(root_item['clips']['count']['@total']) + int(root_item['fullepisodes']['count']['@total'])) > 0:
- if int(root_item['clips']['count']['@total']) > 0:
- try:
- if int(root_item['clips']['count']['video']['@accesslevel']) == 0:
- clips = int(root_item['clips']['count']['video']['$'])
- except:
- if int(root_item['clips']['count']['video'][0]['@accesslevel']) == 0:
- clips = int(root_item['clips']['count']['video'][0]['$'])
- if int(root_item['fullepisodes']['count']['@total']) > 0:
- try:
- if int(root_item['fullepisodes']['count']['video']['@accesslevel']) == 0:
- fullepisodes = int(root_item['fullepisodes']['count']['video']['$'])
- except:
- if int(root_item['fullepisodes']['count']['video'][0]['@accesslevel']) == 0:
- fullepisodes = int(root_item['fullepisodes']['count']['video'][0]['$'])
- if (fullepisodes + clips) > 0:
- root_name = root_item['title']
- season_url = root_item['@id']
- _common.add_show(root_name, SITE, 'seasons', season_url)
- _common.set_view('tvshows')
- def seasons(SITE, BRANDID):
- xbmcplugin.addSortMethod(pluginHandle, xbmcplugin.SORT_METHOD_LABEL)
- season_url = _common.args.url
- season_menu = []
- season_numbers = []
- clip_numbers = []
- season_url2 = VIDEOLIST % BRANDID + '001/-1/' + season_url + '/-1/-1/-1/-1'
- season_data = _connection.getURL(season_url2)
- season_data2 = simplejson.loads(season_data)['videos']
- season_count = int(season_data2['@count'])
- if season_count > 1:
- season_menu = season_data2['video']
- elif season_count == 1:
- season_menu.append(dict(season_data2['video']))
- for season_item in season_menu:
- if int(season_item['@accesslevel']) == 0:
- if season_item['@type'] == 'lf':
- try:
- if season_item['season']['@id'] not in season_numbers:
- season_numbers.append(season_item['season']['@id'])
- season_name = 'Season ' + season_item['season']['@id']
- season_url3 = VIDEOLIST % BRANDID + '001/' + season_item['@type'] + '/' + season_url + '/' + season_item['season']['@id'] + '/-1/-1/-1'
- _common.add_directory(season_name, SITE, 'episodes', season_url3)
- except:
- pass
- elif season_item['@type'] == 'sf':
- try:
- if season_item['season']['@id'] not in clip_numbers:
- clip_numbers.append(season_item['season']['@id'])
- season_name = 'Season Clips ' + season_item['season']['@id']
- season_url4 = VIDEOLIST % BRANDID + '001/' + season_item['@type'] + '/' + season_url + '/' + season_item['season']['@id'] + '/-1/-1/-1'
- _common.add_directory(season_name, SITE, 'episodes', season_url4)
- except:
- pass
- _common.set_view('seasons')
- def episodes(SITE):
- cj = cookielib.LWPCookieJar()
- br = mechanize.Browser()
- br.set_handle_robots(False)
- br.set_cookiejar(cj)
- br.addheaders = [('User-agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A405')]
- #br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0')]
- #'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
- #http://api.watchabc.go.com/vp2/ws/s/presentation/2018/distributors/jsonp/001/001/-1?callback=datg.kaltura.mvpdLoad
- loginURL = "https://sp.auth.adobe.com/adobe-services/authenticate?domain%5Fname=kaltura%2Ecom&mso%5Fid=Comcast%5FSSO&redirect%5Furl=http%3A%2F%2Fabc%2Ego%2Ecom%2Fshows%2Fonce%2Dupon%2Da%2Dtime%2Fepisode%2Dguide%2Fseason%2D03%2F314%2Dthe%2Dtower&requestor%5Fid=ABC"
- #https://sp.auth.adobe.com/adobe-services/1.0/authenticate/saml?domain_name=adobe.com&noflash=true&no_iframe=true&mso_id=Comcast_SSO&requestor_id=AdultSwim&redirect_url=adobepass%3A%2F%2Fandroid.app&client_type=android&client_version=1.7
- #data = _connection.getURL(loginURL)
- response = br.open(loginURL)
- #data = response.read()
- # print data
- #loginTree = BeautifulSoup(data)
- #comcast= loginTree.meta['content'].split('url=')[1]
- #cl = _connection.getRedirect(comcast)
- #sign_in = br.open(cl)
- #br.select_form(nr=0)
- #response = br.submit()
- #print response.read()
- cathpa= "https://login.comcast.net/proxy/captcha/data/?type=GIF&lang=eng&index=0&token=" + re.compile('"token":"(.*?)"').findall(response.read())[0]
- cathpa_data = _connection.getURL(cathpa)
- file = open(os.path.join(_common.CACHEPATH,'captcha.gif'), 'wb')
- file.write(cathpa_data)
- file.close()
- print cathpa
- im = Image.open(os.path.join(_common.CACHEPATH,'captcha.gif'))
- nx, ny = im.size
- im2 = im.resize((int(nx*5), int(ny*5)), Image.BICUBIC)
- im2.save(os.path.join(_common.CACHEPATH,'captcha.png'))
- dialog = NewDialog()
- dialog.setHeading('Python OK / Cancel Dialog')
- #dialog.setLine(0, 'line 0')
- #dialog.setLine(1, 'line 1')
- #dialog.setLine(2, 'line 2')
- #dialog.edtE.setText("Here's some text")
- answer = dialog.ask()
- print answer
- #responseTree = BeautifulSoup(response.read())
- #print responseTree.find('img', id='nucaptcha-media')
- #print responseTree
- #br.select_form("signin")
- br.form = list(br.forms())[0]
- #print br.form
- #print br["nucaptcha-media"]
- br["user"] = 'xxx'
- br["passwd"] = 'xxx'
- br["nucaptcha-answer"] = answer
- response = br.submit()
- print br.geturl()
- print response.read()
- br.form = list(br.forms())[0]
- response = br.submit()
- print br.geturl()
- print response.read()
- #br.open('http://xfinity.comcast.net/')
- #print "Loading homepage"
- #br.select_form(nr=0)
- #response = br.submit()
- #print response.read()
- #br.select_form(nr=0)
- #response = br.submit()
- #print response.read()
- #Comcast%5FSSO=id
- #ABC=site
- #https://login.comcast.net/login?r=comcast.net&s=sso-pf&continue=%2Fidp%2FVyIIU%2FresumeSAML20%2Fidp%2FSSO.ping%3Fresponse%3D1%26ref_url%3Dhttps%253A%252F%252Fsp.auth.adobe.com%252Fadobe-services%252Fauthenticate%253Fmso%25255Fid%253DComcast%25255FSSO%2526requestor%25255Fid%253DABC%2526domain%25255Fname%253Dkaltura%25252Ecom%2526redirect%25255Furl%253Dhttp%25253A%25252F%25252Fabc%25252Ego%25252Ecom%25252Fshows%25252Fonce%25252Dupon%25252Da%25252Dtime%25252Fepisode%25252Dguide%25252Fseason%25252D03%25252F313%25252Dwitch%25252Dhunt&pf_sp=https%3A%2F%2Fsaml.sp.auth.adobe.com%2Fon-behalf-of%2FABC&passive=0&forceAuthn=0
- auth_time = time.time()
- #parameters = { 'user' : 'lucxxxxs',
- # 'passwd' : 'xxxx',
- # 'passive' : 'true',
- # 'forceAuthn' : 'tue',
- # #'video_type' : video_type
- # }
- #auth_data = _connection.getURL("https://login.comcast.net/login", parameters)
- #print auth_data
- #dialog = NewDialog()
- #dialog.setHeading('Python OK / Cancel Dialog')
- #dialog.setLine(0, 'line 0')
- #dialog.setLine(1, 'line 1')
- #dialog.setLine(2, 'line 2')
- #dialog.edtE.setText("Here's some text")
- #print(dialog.ask())
- episode_menu = []
- episode_data = _connection.getURL(_common.args.url)
- episode_data2 = simplejson.loads(episode_data)['videos']
- episode_count = int(episode_data2['@count'])
- if episode_count > 1:
- episode_menu = episode_data2['video']
- elif episode_count == 1:
- episode_menu.append(dict(episode_data2['video']))
- for episode_item in episode_menu:
- if int(episode_item['@accesslevel']) == 0:
- highest_height = -1
- episode_name = episode_item['title']
- episode_duration = int(episode_item['duration']['$']) / 1000
- season_number = episode_item['season']['@id']
- episode_id = episode_item['@id']
- episode_type = episode_item['@type']
- try:
- episode_description = _common.replace_signs(episode_item['longdescription'])
- except:
- episode_description = _common.replace_signs(episode_item['description'])
- try:
- episode_airdate = episode_item['airdates']['airdate'].rsplit(' ',1)[0]
- episode_airdate = _common.format_date(episode_airdate,'%a, %d %b %Y %H:%M:%S', '%d.%m.%Y')
- except:
- try:
- episode_airdate = episode_item['airdates']['airdate'][0].rsplit(' ',1)[0]
- episode_airdate = _common.format_date(episode_airdate,'%a, %d %b %Y %H:%M:%S', '%d.%m.%Y')
- except:
- episode_airdate = -1
- try:
- episode_number = episode_item['number']
- except:
- episode_number = -1
- try:
- for episode_picture in episode_item['thumbnails']['thumbnail']:
- try:
- picture_height = int(episode_picture['@width'])
- except:
- if episode_picture['@type'] == 'source-16x9':
- picture_height = 720
- else:
- picture_height = 0
- if picture_height > highest_height:
- highest_height = picture_height
- episode_thumb = episode_picture['$']
- except:
- episode_thumb = episode_item['thumbnails']['thumbnail']['$']
- u = sys.argv[0]
- u += '?url="' + urllib.quote_plus(episode_id) + '#' + urllib.quote_plus(episode_type) + '"'
- u += '&mode="' + SITE + '"'
- u += '&sitemode="play_video"'
- infoLabels={'title' : episode_name,
- 'plot' : episode_description,
- 'premiered' : episode_airdate,
- 'durationinseconds' : episode_duration,
- 'episode' : episode_number,
- 'season' : season_number }
- _common.add_video(u, episode_name, episode_thumb, infoLabels = infoLabels)
- _common.set_view('episodes')
- def play_video(SITE, BRANDID, PARTNERID):
- video_id, video_type = _common.args.url.split('#')
- hbitrate = -1
- lbitrate = -1
- sbitrate = int(_addoncompat.get_setting('quality'))
- localhttpserver = False
- video_auth = get_authorization(BRANDID, video_id, video_type)
- if video_auth is False:
- video_url = VIDEOLIST % BRANDID + '001/-1/-1/-1/' + video_id + '/-1/-1'
- video_data = _connection.getURL(video_url)
- try:
- video_data2 = simplejson.loads(video_data)['videos']['video']
- video_format = video_data2['assets']['asset'][0]['@format']
- video_closedcaption = video_data2['closedcaption']['@enabled']
- except:
- try:
- video_data2 = simplejson.loads(video_data)['videos']['video']
- video_format = video_data2['assets']['asset']['@format']
- video_closedcaption = video_data2['closedcaption']['@enabled']
- except:
- video_format = 'MOV'
- video_closedcaption = 'false'
- video_id = video_id.replace('VDKA','')
- if video_format == 'MP4':
- video_url = PLAYLISTMP4 % (PARTNERID, PARTNERID) + video_id
- video_data = _connection.getURL(video_url)
- video_url2 = _m3u8.parse(video_data)
- for video_index in video_url2.get('playlists'):
- bitrate = int(video_index.get('stream_info')['bandwidth'])
- if bitrate > hbitrate and bitrate <= (sbitrate * 1000):
- hbitrate = bitrate
- playpath_url = video_index.get('uri')
- finalurl = playpath_url
- elif video_format == 'MOV':
- playpath_url = None
- video_url = PLAYLISTMOV % (PARTNERID, PARTNERID) + video_id
- video_data = _connection.getURL(video_url)
- video_tree = BeautifulSoup(video_data)
- base_url = video_tree('baseurl')[0].string
- video_url2 = video_tree.findAll('media')
- for video_index in video_url2:
- bitrate = int(video_index['bitrate'])
- if bitrate < lbitrate or lbitrate == -1:
- lbitrate = bitrate
- lplaypath_url = video_index['url']
- if bitrate > hbitrate and bitrate <= sbitrate:
- hbitrate = bitrate
- playpath_url = video_index['url']
- if playpath_url is None:
- playpath_url = lplaypath_url
- finalurl = base_url + ' playpath=' + playpath_url + ' swfUrl=' + SWFURL + ' swfVfy=true'
- else:
- video_url = VIDEOLIST % BRANDID + '002/-1/-1/-1/' + video_id + '/-1/-1'
- video_data = _connection.getURL(video_url)
- video_data2 = simplejson.loads(video_data)['videos']['video']
- video_closedcaption = video_data2['closedcaption']['@enabled']
- try:
- video_url2 = video_data2['assets']['asset']['$'] + video_auth
- except:
- video_url2 = video_data2['assets']['asset'][1]['$'] + video_auth
- video_data3 = _connection.getURL(video_url2.replace('m3u8','json'))
- video_url3 = simplejson.loads(video_data3)
- for video_keys in BITRATETABLE.iterkeys():
- bitrate = int(video_keys)
- if bitrate > hbitrate and bitrate <= sbitrate:
- hbitrate = bitrate
- video_url4 = video_url3['url'].replace('__ray__', BITRATETABLE[video_keys])
- video_url4 = video_url4.replace('https','http').replace('json','m3u8')
- video_data4 = re.sub(r"\#EXT-X-DISCONTINUITY\n","", _connection.getURL(video_url4))
- key_url = re.compile('URI="(.*?)"').findall(video_data4)[0]
- key_data = _connection.getURL(key_url)
- key_file = open(_common.KEYFILE, 'wb')
- key_file.write(key_data)
- key_file.close()
- localhttpserver = True
- filestring = 'XBMC.RunScript(' + os.path.join(_common.LIBPATH,'_proxy.py') + ', 12345)'
- xbmc.executebuiltin(filestring)
- time.sleep(20)
- video_data4 = video_data4.replace(key_url, 'http://127.0.0.1:12345/play.key')
- playfile = open(_common.PLAYFILE, 'w')
- playfile.write(video_data4)
- playfile.close()
- finalurl = _common.PLAYFILE
- if (video_closedcaption == 'true') and (_addoncompat.get_setting('enablesubtitles') == 'true'):
- try:
- closedcaption = CLOSEDCAPTIONHOST + video_data2['closedcaption']['src']['$'].split('.com')[1]
- convert_subtitles(closedcaption)
- except:
- video_closedcaption = 'false'
- xbmcplugin.setResolvedUrl(pluginHandle, True, xbmcgui.ListItem(path = finalurl))
- if (_addoncompat.get_setting('enablesubtitles') == 'true') and (video_closedcaption != 'false'):
- while not xbmc.Player().isPlaying():
- xbmc.sleep(100)
- xbmc.Player().setSubtitles(_common.SUBTITLE)
- if localhttpserver is True:
- time.sleep(100)
- try:
- _connection.getURL('http://localhost:12345/stop', connectiontype = 0)
- except:
- pass
- def clean_subs(data):
- br = re.compile(r'<br.*?>')
- tag = re.compile(r'<.*?>')
- space = re.compile(r'\s\s\s+')
- apos = re.compile(r'&apos;')
- sub = br.sub('\n', str(data))
- sub = tag.sub(' ', sub)
- sub = space.sub(' ', sub)
- sub = apos.sub('\'', sub)
- return sub
- def convert_subtitles(closedcaption):
- str_output = ''
- subtitle_data = _connection.getURL(closedcaption, connectiontype = 0)
- subtitle_data = BeautifulSoup(subtitle_data, 'html.parser', parse_only = SoupStrainer('div'))
- lines = subtitle_data.find_all('p')
- for i, line in enumerate(lines):
- if line is not None:
- sub = clean_subs(_common.smart_utf8(line))
- start_time_hours, start_time_rest = line['begin'].split(':', 1)
- start_time_hours = '%02d' % (int(start_time_hours) - 1)
- start_time = _common.smart_utf8(start_time_hours + ':' + start_time_rest.replace('.', ','))
- end_time_hours, end_time_rest = line['end'].split(':', 1)
- end_time_hours = '%02d' % (int(end_time_hours) - 1)
- end_time = _common.smart_utf8(end_time_hours + ':' + end_time_rest.replace('.', ','))
- str_output += str(i + 1) + '\n' + start_time + ' --> ' + end_time + '\n' + sub + '\n\n'
- file = open(_common.SUBTITLE, 'w')
- file.write(str_output)
- file.close()
- return True
- def get_authorization(brandid, video_id, video_type):
- #do login
- #mydisplay = MyClass()
- #mydisplay .doModal()
- #del mydisplay
- auth_time = time.time()
- #crack.decode(os.path.join(_common.CACHEPATH,'download.gif'),_common.CACHEPATH)
- parameters = { 'video_id' : video_id,
- '__rnd' : auth_time,
- 'device' : '001',
- 'brand' : brandid,
- 'video_type' : video_type }
- auth_data = _connection.getURL(GETAUTHORIZATION, parameters)
- try:
- auth_sig = '?' + simplejson.loads(auth_data)['entitlement']['uplynk']['sessionKey']
- except:
- auth_sig = False
- return auth_sig
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement