summaryrefslogtreecommitdiff
path: root/plugin.video.tvo/resources/lib/scraper.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.tvo/resources/lib/scraper.py')
-rw-r--r--plugin.video.tvo/resources/lib/scraper.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/plugin.video.tvo/resources/lib/scraper.py b/plugin.video.tvo/resources/lib/scraper.py
new file mode 100644
index 0000000..9c653bb
--- /dev/null
+++ b/plugin.video.tvo/resources/lib/scraper.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+# TV Ontario Kodi Video Addon
+#
+from t1mlib import t1mAddon
+import json
+import re
+import os
+import urllib
+import xbmc
+import xbmcplugin
+import xbmcgui
+import HTMLParser
+import sys
+
+h = HTMLParser.HTMLParser()
+qp = urllib.quote_plus
+uqp = urllib.unquote_plus
+UTF8 = 'utf-8'
+
+
+class myAddon(t1mAddon):
+
+ def getAddonMenu(self,url,ilist):
+ azurl = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1'
+ for a in azurl:
+ name = a
+ plot = ''
+ url = a
+ infoList = {}
+ infoList['mediatype'] = 'tvshow'
+ ilist = self.addMenuItem(name,'GS', ilist, url, self.addonIcon, self.addonFanart, infoList, isFolder=True)
+ return(ilist)
+
+ def getAddonShows(self,url,ilist):
+ html = self.getRequest("https://tvo.org/programs/%s/filter-ajax" % url)
+ a = re.compile('href="(.+?)">(.+?)<',re.DOTALL).findall(html)
+ for url,name in a:
+ infoList = {}
+ infoList['mediatype'] = 'tvshow'
+ ilist = self.addMenuItem(name,'GE', ilist, url, self.addonIcon, self.addonFanart, infoList, isFolder=True)
+ return(ilist)
+
+ def getAddonEpisodes(self,url,ilist):
+ self.defaultVidStream['width'] = 640
+ self.defaultVidStream['height'] = 480
+ html = self.getRequest('https://tvo.org%s' % url)
+ vids = re.compile('<div class="content-list__first.+?href="(.+?)".+?src="(.+?)".+?href=.+?>(.+?)<.+?field-summary"><div class="field-content">(.+?)<',re.DOTALL).findall(html)
+ if vids == []:
+ vids = re.compile('"og:url" content="(.+?)".+?content="(.+?)".+?content="(.+?)".+?".+?content="(.+?)"',re.DOTALL).search(html).groups()
+ vids = [(vids[0],vids[2],vids[1],vids[3])]
+ TVShowTitle = re.compile('property="dc:title" content="(.+?)"', re.DOTALL).search(html).group(1)
+ for (url, thumb, name, plot) in vids:
+ if not url.startswith('http'):
+ url = 'https://tvo.org' + url
+ fanart = thumb
+ infoList = {}
+ infoList['Title'] = h.unescape(name)
+ infoList['Studio'] = 'TV Ontario'
+ infoList['Plot'] = h.unescape(plot)
+ infoList['TVShowTitle'] = TVShowTitle
+ infoList['mediatype'] = 'episode'
+ ilist = self.addMenuItem(name,'GV', ilist, url, thumb, fanart, infoList, isFolder=False)
+ return(ilist)
+
+
+ def getAddonVideo(self,url):
+ html = self.getRequest(url)
+ vid = re.compile('data-video-id="(.+?)"',re.DOTALL).search(html).group(1)
+ url = 'https://secure.brightcove.com/services/viewer/htmlFederated?&width=1280&height=720&flashID=BrightcoveExperience&bgcolor=%23FFFFFF&playerID=756015080001&playerKey=AQ~~,AAAABDk7A3E~,xYAUE9lVY9-LlLNVmcdybcRZ8v_nIl00&isVid=true&isUI=true&dynamicStreaming=true&%40videoPlayer='+vid+'&secureConnections=true&secureHTMLConnections=true'
+ html = self.getRequest(url)
+ m = re.compile('experienceJSON = (.+?)\};',re.DOTALL).search(html)
+ a = json.loads(html[m.start(1):m.end(1)+1])
+ b = a['data']['programmedContent']['videoPlayer']['mediaDTO']['IOSRenditions']
+ u =''
+ rate = 0
+ suburl = a['data']['programmedContent']['videoPlayer']['mediaDTO'].get('captions')
+ if suburl is not None:
+ suburl = suburl[0].get('URL')
+ for c in b:
+ if c['encodingRate'] > rate:
+ rate = c['encodingRate']
+ u = c['defaultURL']
+ b = a['data']['programmedContent']['videoPlayer']['mediaDTO']['renditions']
+ for c in b:
+ if c['encodingRate'] > rate:
+ rate = c['encodingRate']
+ u = c['defaultURL']
+ if rate == 0:
+ u = a['data']['programmedContent']['videoPlayer']['mediaDTO'].get('FLVFullLengthURL')
+ liz = xbmcgui.ListItem(path = u)
+ if suburl is not None :
+ subfile = self.procConvertSubtitles(suburl)
+ liz.setSubtitles([(subfile)])
+ xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)