Advertisement
alexdunlop81

history.py proxy

May 11th, 2013
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.03 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import urllib,urllib2,re,xbmcplugin,xbmcgui
  4. import os,datetime,base64,sys
  5. from BeautifulSoup import BeautifulStoneSoup
  6. from BeautifulSoup import BeautifulSoup
  7. import random
  8. import resources.lib._common as common
  9. import demjson
  10.  
  11. import binascii
  12. import time
  13. import hmac
  14. try:
  15.     import hashlib.sha1 as sha1
  16. except:
  17.     import sha as sha1
  18.  
  19. pluginhandle = int(sys.argv[1])
  20.  
  21. BASEURL = 'http://www.history.com/shows'
  22. H2URL = 'http://www.history.com/shows/h2'
  23. BASE = 'http://www.history.com'
  24.  
  25. def masterlist():
  26.     return rootlist(db=True)
  27.  
  28. def rootlist(db=False):
  29.     xbmcplugin.addSortMethod(pluginhandle, xbmcplugin.SORT_METHOD_LABEL)
  30.     db_shows = []
  31.     data = common.getURL(BASEURL)
  32.     tree=BeautifulSoup(data, convertEntities=BeautifulSoup.HTML_ENTITIES)
  33.     showpages = tree.findAll(attrs={'class':'watch more'})
  34.     for show in showpages:
  35.         url = show['href']
  36.         name = url.split('/')[2].replace('-',' ').title()
  37.         url = BASE + url
  38.         if db==True:
  39.             db_shows.append((name,'history','showcats',url))
  40.         else:
  41.             common.addShow(name, 'history', 'showcats', url)
  42.     data = common.getURL(H2URL)
  43.     tree=BeautifulSoup(data, convertEntities=BeautifulSoup.HTML_ENTITIES)
  44.     showpages = tree.findAll(attrs={'class':'watch more'})
  45.     for show in showpages:
  46.         url = show['href']
  47.         name = url.split('/')[2].replace('-',' ').title()
  48.         url = BASE + url
  49.         if db==True:
  50.             db_shows.append((name,'history','showcats',url))
  51.         else:
  52.             common.addShow(name, 'history', 'showcats', url)
  53.     if db==True:
  54.         return db_shows    
  55.     else:
  56.         common.setView('tvshows')
  57.  
  58. def showcats(url=common.args.url):
  59.     data = common.getURL(url)
  60.     tree = BeautifulSoup(data, convertEntities=BeautifulSoup.HTML_ENTITIES)
  61.     colume1 = tree.find(attrs={'class':'col col-1'})
  62.     try:
  63.         cats = colume1.find(attrs={'class':'parent videos'}).findAll(attrs={'class':'clearfix'})
  64.         for cat in cats:
  65.             link = cat.find('a')
  66.             url = link['href']
  67.             if BASE not in url:
  68.                 url = BASE + url
  69.             name = link.string
  70.             common.addDirectory(name, 'history', 'videos', url)
  71.         common.setView('seasons')
  72.     except:
  73.         videos()
  74.        
  75. def videos(url=common.args.url):
  76.     print "DEBUG VIDEOES",url
  77.     print "sart of signin"
  78.     #signed_url = sign_url(common.args.url)
  79.     #print signed_url
  80.     #link = common.getURL(signed_url)
  81.     #print "L",link
  82.     data = common.getURL(url)
  83.    # print "DARA",data
  84.     jsonData = re.compile('var playlist = (.+);').findall(data)[0];
  85.     #print "jdata",jsonData
  86.     json = demjson.decode(jsonData)
  87.     print "JSON",json
  88.     for item in json:
  89.         premium = item['premium']
  90.         if premium == 'false':
  91.            title = item['display']['title'].strip()
  92.            plot  = item['display']['description'].strip()
  93.            thumb = item['display']['thumbUrl']
  94.            #print "T",thumb
  95.            duration = item['display']['duration']
  96.            smil = item['videoURLs']['releaseURL']
  97.            #print "vidurls",item['videoURLs']
  98.            #print "SMIL",smil
  99.            u = sys.argv[0]
  100.            u += '?url="'+urllib.quote_plus(smil)+'"'
  101.            u += '&mode="history"'
  102.            u += '&sitemode="play"'
  103.            infoLabels={ "Title":title,
  104.                         #"Season":season,
  105.                         #"Episode":episode,
  106.                         "Plot":plot,
  107.                         #"premiered":airdate,
  108.                         "Duration":duration,
  109.                         #"TVShowTitle":common.args.name
  110.                         }
  111.            common.addVideo(u,title,thumb,infoLabels=infoLabels)
  112.     common.setView('episodes')
  113.    
  114. def videosHTML(url=common.args.url):
  115.     print "Using html"
  116.     data = common.getURL(url)
  117.     tree=BeautifulSoup(data,convertEntities=BeautifulSoup.HTML_ENTITIES)
  118.     items = tree.find('ul',attrs={'class':'media-thumbs media-thumbs-videos clearfix'}).findAll('li')
  119.     for item in items:
  120.         title = item.find('a').string.strip()
  121.         plot  = item.findAll('p')[1].string
  122.         thumb = item['style'].split('url(')[1].replace(')','')
  123.         duration = item.find('span').string.strip('()')
  124.         url = BASE+ item.find('a')['href']
  125.         u = sys.argv[0]
  126.         u += '?url="'+urllib.quote_plus(url)+'"'
  127.         u += '&mode="history"'
  128.         u += '&sitemode="play"'
  129.         infoLabels={ "Title":title,
  130.                      #"Season":season,
  131.                      #"Episode":episode,
  132.                      "Plot":plot,
  133.                      #"premiered":airdate,
  134.                      "Duration":duration,
  135.                      #"TVShowTitle":common.args.name
  136.                      }
  137.         common.addVideo(u,title,thumb,infoLabels=infoLabels)
  138.     common.setView('episodes')
  139.  
  140. def videosRSS(url=common.args.url):
  141.     link = common.getURL(url)
  142.     mrssData = re.compile('mrssData += +"(.+)"').findall(link)[0];
  143.     mrssData = urllib2.unquote(base64.decodestring(mrssData))
  144.     tree=BeautifulStoneSoup(mrssData,convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
  145.     print tree.prettify()
  146.     items = tree.findAll('item')
  147.     for item in items:
  148.         title = item.title.contents[0]
  149.         plot  = item.description.contents[0]
  150.         thumb = item.findAll('media:thumbnail')[0]['url']
  151.         duration = item.findAll('media:content')[0]['duration']
  152.         smil = item.findAll('media:text')[5].contents[0]
  153.         smil = smil.replace('smilUrl=','')
  154.         #episode_list.append((title, image, duration, plot, smil))
  155.         u = sys.argv[0]
  156.         u += '?url="'+urllib.quote_plus(smil)+'"'
  157.         u += '&mode="history"'
  158.         u += '&sitemode="play"'
  159.         infoLabels={ "Title":title,
  160.                      #"Season":season,
  161.                      #"Episode":episode,
  162.                      "Plot":plot,
  163.                      #"premiered":airdate,
  164.                      "Duration":duration,
  165.                      #"TVShowTitle":common.args.name
  166.                      }
  167.         common.addVideo(u,title,thumb,infoLabels=infoLabels)
  168.     common.setView('episodes')
  169.  
  170. def playOLD():
  171.     sig = common.getURL('http://www.history.com/components/get-signed-signature?url='+re.compile('/s/(.+)\?').findall(common.args.url)[0]+'&cache=889')
  172.     url = common.args.url+'&sig='+sig
  173.     link = common.getURL(url)
  174.     tree=BeautifulStoneSoup(link, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
  175.     base = tree.find('meta')['base']
  176.     videos = tree.findAll('video')
  177.     hbitrate = -1
  178.     sbitrate = int(common.settings['quality']) * 1000
  179.     for video in videos:
  180.         try:bitrate = int(video['system-bitrate'])
  181.         except:bitrate = int(video['systembitrate'])
  182.         if bitrate > hbitrate and bitrate <= sbitrate:
  183.             hbitrate = bitrate
  184.             filename = video['src'].replace('.mp4','').replace('.flv','')
  185.     swfUrl = 'http://www.history.com/flash/VideoPlayer.swf'
  186.     auth = filename.split('?')[1]
  187.     filename = filename.split('?')[0]
  188.     finalurl = base+'?'+auth+' swfurl='+swfUrl+' swfvfy=true playpath='+filename
  189.     item = xbmcgui.ListItem(path=finalurl)
  190.     return xbmcplugin.setResolvedUrl(pluginhandle, True, item)
  191.  
  192. def play():
  193.     if (common.settings['enableproxy'] == 'true'):proxy = True
  194.     else:proxy = False
  195.     signed_url = sign_url(common.args.url)
  196.     #get auth
  197.     #token=getAUTH(aifp,window,tokentype,vid,filename)
  198.     print "proxy",proxy
  199.     link = common.getURL(signed_url,proxy=proxy)
  200.    
  201.     print "**",link
  202.     tree=BeautifulStoneSoup(link, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
  203.     base = tree.find('meta')['base']
  204.     videos = tree.findAll('video')
  205.     hbitrate = -1
  206.     sbitrate = int(common.settings['quality']) * 1000
  207.     for video in videos:
  208.         try:bitrate = int(video['system-bitrate'])
  209.         except:
  210.             try:bitrate = int(video['systembitrate'])
  211.             except: bitrate = 1
  212.         if bitrate > hbitrate and bitrate <= sbitrate:
  213.             hbitrate = bitrate
  214.             filename = video['src'].replace('.mp4','').replace('.flv','')
  215.             if '.mp4' in video['src']:
  216.                 filename = 'mp4:'+filename #slices 08052013
  217.    
  218.     swfUrl = 'http://www.history.com/flash/VideoPlayer.swf'
  219.     #swfUrl='http://servicesaetn-a.akamaihd.net/video/pdk/swf/flvPlayer.swf'
  220.     auth = filename.split('?')[1]
  221.     filename = filename.split('?')[0]
  222.     finalurl = base+'?'+auth+' swfurl='+swfUrl+' swfvfy=true playpath='+filename
  223.     item = xbmcgui.ListItem(path=finalurl)
  224.     return xbmcplugin.setResolvedUrl(pluginhandle, True, item)
  225.  
  226. def sign_url(url):
  227.     #slices - changed ro use url
  228.     #http://www.tbs.com/processors/cvp/token.jsp
  229.     sig=common.getURL('http://www.history.com/components/get-signed-signature?url='+re.compile('/s/(.+)\?').findall(url)[0])
  230.     #hmac_key = 'crazyjava'
  231.     #http://link.theplatform.com/s/xc6n8B/Uk9Iewei0eId/tracker.log?type=qos&ver=2&d=1367950641769&rid0=28489795528&t0=Ancient%20Aliens%3A%20The%20Time%20Travelers&tc0=1&lp0=0&lt0=3&pb0=100&pp0=0&pr0=0&nocache=1367950646788
  232.     #http://link.theplatform.com/s/xc6n8B/Uk9Iewei0eId?mbr=true&sig=005189478ac93e8e252247688d9fe43e80a0ceabf57e46df32733363723374&metafile=true&assetTypes=medium%5Fvideo%5Fs3&switch=rtmp&format=SMIL&Tracking=true&Embedded=true
  233.     #SEC_HEX = '733363723374' #'s3cr3t'
  234.     #expiration = get_expiration()
  235.     #print expiration
  236.     #path = url.split('http://link.theplatform.com/s/')[1]
  237.     #sign_data = binascii.unhexlify('00'+expiration+binascii.hexlify(path).lower())
  238.     #print "Sign data",sign_data
  239.     #sig = hmac.new(hmac_key, sign_data, sha1)
  240.     #sigHEX = sig.hexdigest()
  241.     #signature = '00' + expiration + sigHEX + SEC_HEX
  242.     finalUrl = url+'&sig='+sig+'&format=SMIL&Tracking=true&Embedded=true&mbr=true&auth=daEbfbTdjaccacMd9aHd_ccdLbad6cjdSdg-brIOlw-cOW-ooHzv'
  243.     print "fu",finalUrl
  244.     return finalUrl
  245.  
  246. def get_expiration(auth_length = 600):
  247.     current_time = time.mktime(time.gmtime())+auth_length
  248.     expiration = ('%0.2X' % current_time).lower()
  249.     return expiration
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement