Guest User

Untitled

a guest
May 17th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.01 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. # KodiAddon (CBC News)
  3. #
  4. from t1mlib import t1mAddon
  5. import datetime
  6. import json
  7. import re
  8. import urllib
  9. import urllib2
  10. import xbmcplugin
  11. import xbmcgui
  12. import HTMLParser
  13. import sys
  14. import xbmc
  15.  
  16. h = HTMLParser.HTMLParser()
  17. UTF8 = 'utf-8'
  18.  
  19. class myAddon(t1mAddon):
  20.  
  21.  def getAddonMenu(self,url,ilist):
  22.    html  = self.getRequest('http://www.cbc.ca/player')
  23.    shows = re.compile('<h2 class="section-title"[^>]*><a[^>]* href="(.+?)">(.+?)</a>', re.DOTALL).findall(html)
  24.    shows.append(('/player/news/TV%20Shows/MarketPlace', self.addon.getLocalizedString(30001)))
  25.    shows.append(('/player/news/TV%20Shows/Power%20&%20Politics', self.addon.getLocalizedString(30003)))
  26.    shows.append(('/player/news/TV%20Shows/The%20Fifth%20Estate', self.addon.getLocalizedString(30004)))
  27.    shows.append(('/player/news/TV%20Shows/The%20National/Latest%20Broadcast', self.addon.getLocalizedString(30005)))
  28.    shows.append(('/player/news/TV%20Shows/The%20Weekly', self.addon.getLocalizedString(30006)))
  29.    for url, name in shows:
  30.       infoList = {}
  31.       infoList['mediatype'] = 'tvshow'
  32.       infoList['Title'] = name
  33.       infoList['TVShowTitle'] = name
  34.       ilist = self.addMenuItem(name, 'GS', ilist, url, self.addonIcon, self.addonFanart, infoList, isFolder=True)
  35.       print("From getAddonMenu function", ilist)
  36.    return(ilist)
  37.  
  38.  def getAddonCats(self,url,ilist):
  39.    html  = self.getRequest('http://www.cbc.ca')
  40.    html  = re.compile('<!-- -->My Local Settings(.+?)href="/news">Top Stories', re.DOTALL).search(html).group(1)
  41.    shows = re.compile('<li class="regionsListItem"><.+?data-path="(.+?)".+?value="(.+?)".+?</li>', re.DOTALL).findall(html)
  42.    print("shows from getAddonCats", shows)
  43.    for url, name in shows:
  44.        infoList = {}
  45.        infoList['mediatype'] = 'tvshow'
  46.        infoList['Title'] = name
  47.        infoList['TVShowTitle'] = name
  48.        lurl = "/player/"+url
  49.        # Manual fixes for multi-word locations
  50.        if lurl == '/player/news/canada/british-columbia':
  51.           lurl = '/player/news/canada/bc'
  52.        if lurl == '/player/news/canada/thunder-bay':
  53.           lurl = '/player/news/canada/thunder%20bay'
  54.        if lurl == '/player/news/canada/new-brunswick':
  55.           lurl = '/player/news/canada/nb'
  56.        if lurl == '/player/news/canada/prince-edward-island':
  57.           lurl = '/player/news/canada/pei'
  58.        if lurl == '/player/news/canada/nova-scotia':
  59.           lurl = '/player/news/canada/ns'
  60.        if lurl == '/player/news/canada/newfoundland-labrador':
  61.           lurl = '/player/news/canada/nl'
  62.        ilist = self.addMenuItem(name, 'GE', ilist, lurl, self.addonIcon, self.addonFanart, infoList, isFolder=True)
  63.        if lurl == '/player/news/canada/toronto':
  64.           ilist = self.addMenuItem('Ottawa', 'GE', ilist, '/player/news/canada/ottawa', self.addonIcon, self.addonFanart, infoList, isFolder=True)
  65.        print("getAddonCats", ilist)
  66.    return(ilist)
  67.  
  68.  def getAddonShows(self,url,ilist):
  69.    html  = self.getRequest('http://www.cbc.ca%s' % url)
  70.    shows = re.compile('<h2 class="section-title"[^>]*><a[^>]* href="(.+?)">(.+?)</a>', re.DOTALL).findall(html)
  71.    count = 0
  72.    for lurl, name in shows:
  73.        count+=1
  74.    if (count <= 0) or (url.find('TV%20Shows') > 0):
  75.        self.getAddonEpisodes(url, ilist)
  76.    else:
  77.        for lurl, name in shows:
  78.            infoList = {}
  79.            infoList['mediatype'] = 'tvshow'
  80.            infoList['Title'] = name
  81.            infoList['TVShowTitle'] = name
  82.            if lurl == '/player/news/canada':
  83.               ilist = self.addMenuItem(name, 'GC', ilist, lurl, self.addonIcon, self.addonFanart, infoList, isFolder=True)
  84.            else:
  85.               ilist = self.addMenuItem(name, 'GS', ilist, lurl, self.addonIcon, self.addonFanart, infoList, isFolder=True)
  86.    print("getAddonShows", ilist)
  87.    return(ilist)
  88.  
  89.  def getAddonEpisodes(self,url,ilist):
  90.    self.defaultVidStream['width']  = 1280
  91.    self.defaultVidStream['height'] = 720
  92.    cat = re.compile('/([^/]+?)$', re.DOTALL).search(url).group(1).replace('%20', ' ')
  93.    html = self.getRequest('http://www.cbc.ca%s' % url)
  94.    html = re.compile('window.__INITIAL_STATE__ = (.+?);</script>', re.DOTALL).search(html).group(1)
  95.    a = json.loads(html)
  96.    # Locate exact category name
  97.    for b in a['video']['clipsByCategory']:
  98.        if re.search(cat+"$", b, re.IGNORECASE):  # category must be at end of string
  99.           idxcat = b
  100.    for b in a['video']['clipsByCategory'][idxcat]['items']:
  101.       name = b['title'].replace(u"\u2018", "'").replace(u"\u2019", "'").encode('ascii', 'xmlcharrefreplace')
  102.       plot = b['description'].replace(u"\u2018", "'").replace(u"\u2019", "'").encode('ascii', 'xmlcharrefreplace')
  103.       vurl = str(b['id'])  # mediaID
  104.       thumb = b['thumbnail']
  105.       fanart = thumb
  106.       if b['captions']:
  107.          captions = b['captions']['src']
  108.       else:
  109.          captions = 'N0NE'
  110.       vurl = str(vurl)+'|'+str(captions)
  111.       infoList = {}
  112.       infoList['mediatype'] = 'tvshow'
  113.       infoList['Title'] = name
  114.       infoList['TVShowTitle'] = name
  115.       infoList['Plot'] = plot
  116.       infoList['Duration'] = b['duration']
  117.       infoList['Aired'] = datetime.datetime.fromtimestamp(b['airDate']/1000).strftime('%Y-%m-%d')
  118.       ilist = self.addMenuItem(name, 'GV', ilist, vurl, thumb, fanart, infoList, isFolder=False)
  119.    print("getAddonEpisodes", ilist)
  120.    return(ilist)
  121.  
  122.  def getAddonVideo(self,url):
  123.       url = url.split('|',1)
  124.       captions = url[1]
  125.       url = url[0]
  126.       u = 'https://link.theplatform.com/s/ExhSPC/media/guid/2655402169/' + url
  127.       u = u + '/meta.smil'
  128.       u = u + '?mbr=true&manifest=m3u&feed=Player%20Selector%20-%20Prod'
  129.       html = self.getRequest(u)
  130.       u = re.compile('RESOLUTION=1280x720.+?\n(http.+?)\?', re.DOTALL).search(html).group(1)
  131.       if u is None:
  132.            return
  133.       liz = xbmcgui.ListItem(path = u.strip())
  134.       if captions != 'N0NE':
  135.           liz.setSubtitles([captions])
  136.       print("getAddonVideo", sys.argv[1], liz)
  137.       xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
Add Comment
Please, Sign In to add comment