summaryrefslogtreecommitdiff
path: root/plugin.video.mediacorp/resources/lib/scraper.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.mediacorp/resources/lib/scraper.py')
-rw-r--r--plugin.video.mediacorp/resources/lib/scraper.py137
1 files changed, 137 insertions, 0 deletions
diff --git a/plugin.video.mediacorp/resources/lib/scraper.py b/plugin.video.mediacorp/resources/lib/scraper.py
new file mode 100644
index 0000000..1e1fa6b
--- /dev/null
+++ b/plugin.video.mediacorp/resources/lib/scraper.py
@@ -0,0 +1,137 @@
+# -*- coding: utf-8 -*-
+# Kodi Addon for Mediacorp
+#
+from t1mlib import t1mAddon
+import json
+import re
+import urllib
+import urllib2
+import cookielib
+import xbmcplugin
+import xbmcgui
+import datetime
+import HTMLParser
+import xbmc
+import os
+import sys
+
+h = HTMLParser.HTMLParser()
+uqp = urllib.unquote_plus
+UTF8 = 'utf-8'
+
+
+class myAddon(t1mAddon):
+
+ def getAddonMenu(self,url,ilist):
+ html = self.getRequest('http://video.toggle.sg/en/catchup-listing')
+ cats = re.compile('<div class="megaslider-holder tgtabs.+?href=".+?">(.+?)<.+?data-ajax-url="(.+?)".+?<div id="preloader">',re.DOTALL).findall(html)
+
+ infoList = {}
+ for name,url in cats:
+ name = name.strip()
+ if not url.startswith('http'):
+ url = 'https://video.toggle.sg'+url
+ else:
+ continue
+ infoList['Title'] = name
+ infoList['Plot'] = name
+ infoList['mediatype'] = 'file'
+ ilist = self.addMenuItem(name,'GS', ilist, url, self.addonIcon, self.addonFanart, infoList, isFolder=True)
+ return(ilist)
+
+ def getAddonShows(self,url,ilist):
+ url = uqp(url)
+ html = self.getRequest(url)
+ blob = re.compile('bandData =(.+?)toggle.functions',re.DOTALL).search(html)
+ if blob is not None:
+ blob = blob.group(1)
+ blob = blob.replace('JSON.stringify({})',"''")
+ blob = blob.strip()
+ blob = blob.replace('}',',').replace('{','')
+ kpairs = re.compile('(.+?)\:(.+?),').findall(blob)
+ u = ''
+ for kkey,kval in kpairs:
+ kkey=kkey.strip()
+ kval=kval.strip()
+ u = u+'&%s=%s' % (kkey,kval.replace('"','').replace("'",''))
+ u = re.sub(r'pageSize=[0-9]*', 'pageSize=300', u)
+ url = 'http://video.toggle.sg/en/blueprint/servlet/toggle/bandlist?%s' % u
+ html = self.getRequest(url)
+ shows = re.compile('<div class="tg-teaser-item".+?href="(.+?)".+?src="(.+?)".+?<h6 class.+?href=.+?">(.+?)<.+?</div',re.DOTALL).findall(html)
+ else:
+ shows = re.compile('<div class="tg-teaser-item".+?href="(.+?)".+?srcset="(.+?)".+?<h6 class.+?href=.+?">(.+?)<.+?</div',re.DOTALL).findall(html)
+ for (url,thumb,name) in shows:
+ name = name.decode(UTF8)
+ infoList = {}
+ if not (thumb.startswith('http')):
+ thumb = 'http://video.toggle.sg'+thumb
+ name = name.strip()
+ name = h.unescape(name)
+ infoList['Title'] = name
+ infoList['Plot'] = name
+ infoList['TVShowTitle'] = name
+ infoList['mediatype'] = 'tvshow'
+ if ('/movies/' in url) or ('/extras' in url):
+ ilist = self.addMenuItem(name,'GV', ilist, url, thumb, self.addonFanart, infoList, isFolder=False)
+ else:
+ ilist = self.addMenuItem(name,'GE', ilist, url, thumb, self.addonFanart, infoList, isFolder=True)
+ return(ilist)
+
+
+ def getAddonEpisodes(self,url,ilist):
+ url = uqp(url)
+ showName = xbmc.getInfoLabel('ListItem.TVShowTitle')
+ html = self.getRequest(url)
+ url = re.compile('<div class="tg-microsite-link card ">.+?href="(.+?)"', re.DOTALL).search(html).group(1)
+ url += '/episodes'
+ html = self.getRequest(url)
+ parms = re.compile('toggle.functions.ajaxEpisodeListingPage\((.+?)\)', re.DOTALL).search(html).group(1)
+ parms = parms.split(',')
+ url = 'http://tv.toggle.sg/en/blueprint/servlet/toggle/paginate?pageSize=200&pageIndex=0&contentId=%s&navigationId=%s&isCatchup=1' % (parms[3].strip(), parms[4].strip())
+ html = self.getRequest(url)
+ epis = re.compile('<div class="img-holder">.+?src="(.+?)".+?ref="(.+?)">(.+?)<.+?<p>(.+?)</p', re.DOTALL).findall(html)
+ for (thumb,url,name,plot) in epis:
+ infoList={}
+ name = name.replace('\n','').strip()
+ vid = url.rsplit('/',1)[1]
+ if not (thumb.startswith('http')): thumb = 'http://video.toggle.sg'+thumb
+ infoList['Plot'] = h.unescape(plot.decode(UTF8))
+ infoList['Title'] = h.unescape(name)
+ infoList['TVShowTitle'] = showName
+ infoList['mediatype'] = 'episode'
+ fanart = thumb
+ ilist = self.addMenuItem(name,'GV', ilist, vid, thumb, fanart, infoList, isFolder=False)
+ return(ilist)
+
+
+ def getAddonVideo(self,url):
+ vid = url
+ vurl = 'http://toggleplayer-1410100339.ap-southeast-1.elb.amazonaws.com/v0.30/mwEmbed/mwEmbedFrame.php?&wid=_27017&uiconf_id=8413350&entry_id='+vid+'&flashvars[ks]=0&flashvars[logo]=undefined&flashvars[toggle.sgPlus]=false&flashvars[vast]=%7B%22htmlCompanions%22%3A%22video-companion-ad-320-100-in-flash%3A320%3A100%22%7D&flashvars[multiDrm]=%7B%22plugin%22%3Atrue%2C%22isClear%22%3Atrue%7D&flashvars[localizationCode]=en&flashvars[autoPlay]=true&flashvars[proxyData]=%7B%22initObj%22%3A%7B%22Locale%22%3A%7B%22LocaleLanguage%22%3A%22%22%2C%22LocaleCountry%22%3A%22%22%2C%22LocaleDevice%22%3A%22%22%2C%22LocaleUserState%22%3A0%7D%2C%22Platform%22%3A0%2C%22SiteGuid%22%3A0%2C%22DomainID%22%3A%220%22%2C%22UDID%22%3A%22%22%2C%22ApiUser%22%3A%22tvpapi_147%22%2C%22ApiPass%22%3A%2211111%22%7D%2C%22MediaID%22%3A%22'+vid+'%22%2C%22iMediaID%22%3A%22'+vid+'%22%2C%22picSize%22%3A%22640X360%22%7D&playerId=SilverlightContainer&forceMobileHTML5=true&urid=2.29.1.10&callback='
+ html = self.getRequest(vurl)
+ m = re.compile('kalturaIframePackageData = (.+?)};',re.DOTALL).search(html)
+ x = html[m.start(1):m.end(1)+1].replace('\\','')
+ x = re.compile('"Files"\:(.+?),"Tags"', re.DOTALL).search(x).group(1)
+ a = json.loads(x)
+ u = None
+ for c in ['STB Main','Main','HLS_Web','HLS_Tablet','iPad Main']:
+ for b in a:
+ if b['Format'] == c:
+ u = b['URL']
+ break
+ if not (u is None):
+ break
+ if ( u is None or u.endswith('.wvm')):
+ xbmcgui.Dialog().notification(self.addonName, 'No Video Found', self.addonIcon, 5000)
+ return
+ liz = xbmcgui.ListItem(path = u)
+ html = self.getRequest('https://sub.toggle.sg/toggle_api/v1.0/apiService/getSubtitleFilesForMedia?mediaId=%s' % vid)
+ subfile = json.loads(html)
+ subfiles = []
+ for a in subfile.get('subtitleFiles'):
+ subfiles.append(a['subtitleFileUrl'])
+ liz.setSubtitles(subfiles)
+ liz.setProperty('inputstreamaddon','inputstream.adaptive')
+ liz.setProperty('inputstream.adaptive.manifest_type','hls')
+ liz.setMimeType('application/x-mpegURL')
+ xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
+