Advertisement
alexdunlop81

history.py

May 9th, 2013
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.91 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.     signed_url = sign_url(common.args.url)
  194.     #get auth
  195.     #token=getAUTH(aifp,window,tokentype,vid,filename)
  196.     link = common.getURL(signed_url)
  197.     print "**",link
  198.     tree=BeautifulStoneSoup(link, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)
  199.     base = tree.find('meta')['base']
  200.     videos = tree.findAll('video')
  201.     hbitrate = -1
  202.     sbitrate = int(common.settings['quality']) * 1000
  203.     for video in videos:
  204.         try:bitrate = int(video['system-bitrate'])
  205.         except:
  206.             try:bitrate = int(video['systembitrate'])
  207.             except: bitrate = 1
  208.         if bitrate > hbitrate and bitrate <= sbitrate:
  209.             hbitrate = bitrate
  210.             filename = video['src'].replace('.mp4','').replace('.flv','')
  211.             if '.mp4' in video['src']:
  212.                 filename = 'mp4:'+filename #slices 08052013
  213.    
  214.     swfUrl = 'http://www.history.com/flash/VideoPlayer.swf'
  215.     #swfUrl='http://servicesaetn-a.akamaihd.net/video/pdk/swf/flvPlayer.swf'
  216.     auth = filename.split('?')[1]
  217.     filename = filename.split('?')[0]
  218.     finalurl = base+'?'+auth+' swfurl='+swfUrl+' swfvfy=true playpath='+filename
  219.     item = xbmcgui.ListItem(path=finalurl)
  220.     return xbmcplugin.setResolvedUrl(pluginhandle, True, item)
  221.  
  222. def sign_url(url):
  223.     #slices - changed ro use url
  224.     #http://www.tbs.com/processors/cvp/token.jsp
  225.     sig=common.getURL('http://www.history.com/components/get-signed-signature?url='+re.compile('/s/(.+)\?').findall(url)[0])
  226.     #hmac_key = 'crazyjava'
  227.     #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
  228.     #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
  229.     #SEC_HEX = '733363723374' #'s3cr3t'
  230.     #expiration = get_expiration()
  231.     #print expiration
  232.     #path = url.split('http://link.theplatform.com/s/')[1]
  233.     #sign_data = binascii.unhexlify('00'+expiration+binascii.hexlify(path).lower())
  234.     #print "Sign data",sign_data
  235.     #sig = hmac.new(hmac_key, sign_data, sha1)
  236.     #sigHEX = sig.hexdigest()
  237.     #signature = '00' + expiration + sigHEX + SEC_HEX
  238.     finalUrl = url+'&sig='+sig+'&format=SMIL&Tracking=true&Embedded=true&mbr=true&auth=daEbfbTdjaccacMd9aHd_ccdLbad6cjdSdg-brIOlw-cOW-ooHzv'
  239.     print "fu",finalUrl
  240.     return finalUrl
  241.  
  242. def get_expiration(auth_length = 600):
  243.     current_time = time.mktime(time.gmtime())+auth_length
  244.     expiration = ('%0.2X' % current_time).lower()
  245.     return expiration
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement