summaryrefslogtreecommitdiff
path: root/plugin.video.rtpplay/resources/lib/plugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.rtpplay/resources/lib/plugin.py')
-rw-r--r--plugin.video.rtpplay/resources/lib/plugin.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/plugin.video.rtpplay/resources/lib/plugin.py b/plugin.video.rtpplay/resources/lib/plugin.py
new file mode 100644
index 0000000..9ba05fe
--- /dev/null
+++ b/plugin.video.rtpplay/resources/lib/plugin.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+
+import routing
+import logging
+import requests
+import re
+import xbmcaddon
+from sys import exit, version_info
+from resources.lib import kodiutils
+from resources.lib import kodilogging
+from xbmcgui import ListItem
+from xbmcplugin import addDirectoryItem, endOfDirectory, setResolvedUrl
+
+
+ADDON = xbmcaddon.Addon()
+logger = logging.getLogger(ADDON.getAddonInfo('id'))
+kodilogging.config()
+plugin = routing.Plugin()
+
+__headers__ = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"}
+__base_url__ = "http://www.rtp.pt"
+__session__ = requests.Session()
+
+if version_info >= (3, 0):
+ from html.parser import HTMLParser
+else:
+ from HTMLParser import HTMLParser
+html_parser = HTMLParser()
+
+
+@plugin.route('/')
+def index():
+ try:
+ req = __session__.get("http://www.rtp.pt/play/", headers=__headers__).text
+ except:
+ kodiutils.ok(kodiutils.get_string(32000),kodiutils.get_string(32001))
+ exit(0)
+
+ match=re.compile('<a title=".+?direto (.+?)" href="(.+?)" class="mask-live "><img alt=".+?" src="(.+?)" class="img-responsive">.+?<span class="small"><b>(.+?)</b>').findall(req)
+ if match:
+ for channel,rel_url, img, prog in match:
+ liz = ListItem("[B][COLOR blue]{}[/B][/COLOR] ({})".format(kodiutils.smart_str(channel), kodiutils.smart_str(prog)))
+ if img.startswith("/"):
+ img = "http:{}".format(img)
+
+ liz.setArt({"thumb": img, "icon": img, "fanart": kodiutils.FANART})
+ liz.setProperty('IsPlayable', 'true')
+ liz.setInfo("Video", infoLabels={"plot": html_parser.unescape(kodiutils.smart_str(prog))})
+
+ addDirectoryItem(plugin.handle, plugin.url_for(play, rel_url=kodiutils.smart_str(rel_url), channel=kodiutils.smart_str(channel), img=kodiutils.smart_str(img), prog=kodiutils.smart_str(prog) ), liz, False)
+
+ endOfDirectory(plugin.handle)
+
+
+@plugin.route('/play')
+def play():
+ rel_url = plugin.args["rel_url"][0]
+ channel = plugin.args["channel"][0]
+ prog = plugin.args["prog"][0]
+ icon = plugin.args["img"][0]
+ try:
+ req = __session__.get("{}{}".format(__base_url__, rel_url)).text
+ except:
+ kodiutils.ok(kodiutils.get_string(32000),kodiutils.get_string(32002))
+ exit(0)
+
+ is_pseudo_aes = bool(re.findall("var aes = true", req))
+
+ streams = re.compile('new RTPPlayer\(.*file\:.+?"(.+?)"', re.DOTALL).findall(req)
+
+ if streams:
+ final_stream_url = None
+ for stream in streams:
+ if ".m3u8" in stream.split('/')[-1]:
+ final_stream_url = stream
+ break
+
+ if is_pseudo_aes:
+ try:
+ req = __session__.post("http://www.rtp.pt/services/playRequest.php", headers={"RTPPlayUrl": final_stream_url})
+ final_stream_url = req.headers["RTPPlayWW"]
+ except:
+ kodiutils.ok(kodiutils.get_string(32000),kodiutils.get_string(32002))
+ exit(0)
+
+ if final_stream_url:
+ liz = ListItem("[B][COLOR blue]{}[/B][/COLOR] ({})".format(kodiutils.smart_str(channel), kodiutils.smart_str(prog)))
+ liz.setArt({"thumb": icon, "icon": icon})
+ liz.setProperty('IsPlayable', 'true')
+ liz.setPath("{}|User-Agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36&Referer=http://www.rtp.pt/play/".format(final_stream_url))
+ setResolvedUrl(plugin.handle, True, liz)
+ else:
+ kodiutils.ok(kodiutils.get_string(32000),kodiutils.get_string(32002))
+ exit(0)
+
+def run():
+ plugin.run()