The branch, frodo has been updated
via 63a805a42e427fd4fd07e5452be9191a7a130c3f (commit)
via 93e8e93d3d3bf4efdd65846c392b3b442264ce09 (commit)
from 80536b68e2ef134ab089abf650a3a9f87eef39ee (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=63a805a42e427fd4fd07e5452be9191a7a130c3f
commit 63a805a42e427fd4fd07e5452be9191a7a130c3f
Author: beenje <[email protected]>
Date: Sat Nov 23 11:27:51 2013 +0100
[plugin.video.roosterteeth] updated to version 0.0.6
diff --git a/plugin.video.roosterteeth/addon.xml
b/plugin.video.roosterteeth/addon.xml
index a9ef203..a12a132 100644
--- a/plugin.video.roosterteeth/addon.xml
+++ b/plugin.video.roosterteeth/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.roosterteeth"
name="Rooster Teeth"
- version="0.0.4"
+ version="0.0.6"
provider-name="divingmule">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
@@ -23,5 +23,6 @@
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
<source>https://github.com/divingmule/plugin.video.roosterteeth</source>
<forum>http://forum.xbmc.org/showthread.php?tid=134588</forum>
+ <website>http://roosterteeth.com</website>
</extension>
</addon>
diff --git a/plugin.video.roosterteeth/changelog.txt
b/plugin.video.roosterteeth/changelog.txt
index 1dcf85e..4ec1a01 100644
--- a/plugin.video.roosterteeth/changelog.txt
+++ b/plugin.video.roosterteeth/changelog.txt
@@ -1,3 +1,13 @@
+Version 0.0.6
+release to xbmc.org repository
+
+Version 0.0.5
+beta/testing release
+added initial support for sponsor only videos
+added more media information where available
+set content to tv shows/episodes, enabling more view modes
+added setting 'Default view mode for episodes'
+
Version 0.0.4
bug fixes
added podcasts
diff --git a/plugin.video.roosterteeth/default.py
b/plugin.video.roosterteeth/default.py
index 396eb5a..a0c6e9f 100644
--- a/plugin.video.roosterteeth/default.py
+++ b/plugin.video.roosterteeth/default.py
@@ -1,7 +1,11 @@
import urllib
import urllib2
+import cookielib
import re
+import os
import json
+import time
+from datetime import datetime
from urlparse import urlparse, parse_qs
from traceback import format_exc
@@ -12,16 +16,20 @@ from bs4 import BeautifulSoup
import xbmcplugin
import xbmcgui
import xbmcaddon
+import xbmcvfs
-cache = StorageServer.StorageServer("roosterteeth", 24)
+cache = StorageServer.StorageServer("roosterteeth", 6)
addon = xbmcaddon.Addon()
+addon_profile = xbmc.translatePath(addon.getAddonInfo('profile'))
addon_version = addon.getAddonInfo('version')
addon_id = addon.getAddonInfo('id')
home = addon.getAddonInfo('path')
icon = addon.getAddonInfo('icon')
fanart = addon.getAddonInfo('fanart')
-base = 'http://roosterteeth.com'
language = addon.getLocalizedString
+cookie_file = os.path.join(addon_profile, 'cookie_file')
+cookie_jar = cookielib.LWPCookieJar(cookie_file)
+base = 'http://roosterteeth.com'
def addon_log(string):
@@ -32,17 +40,27 @@ def addon_log(string):
xbmc.log("[%s-%s]: %s" %(addon_id, addon_version,
log_message),level=xbmc.LOGDEBUG)
-def make_request(url, location=False):
+def notify(message):
+ xbmc.executebuiltin("XBMC.Notification(%s, %s, 10000, %s)"
%(language(30001), message, icon))
+
+
+def make_request(url, data=None, location=False):
+ if not xbmcvfs.exists(cookie_file):
+ cookie_jar.save()
+ cookie_jar.load(cookie_file, ignore_discard=True, ignore_expires=True)
+ opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
+ urllib2.install_opener(opener)
addon_log('Request URL: %s' %url)
+ headers = {
+ 'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0)
Gecko/20100101 Firefox/24.0',
+ 'Referer': 'http://roosterteeth.com'
+ }
try:
- headers = {
- 'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0)
Gecko/20100101 Firefox/24.0',
- 'Referer': 'http://roosterteeth.com'
- }
- req = urllib2.Request(url, None, headers)
+ req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
response_url = urllib.unquote_plus(response.geturl())
data = response.read()
+ cookie_jar.save(cookie_file, ignore_discard=False,
ignore_expires=False)
response.close()
if location:
return (response_url, data)
@@ -61,7 +79,7 @@ def get_soup(data):
if data:
if data.startswith('http'):
data = make_request(data)
- return BeautifulSoup(data)
+ return BeautifulSoup(data, 'html.parser')
def cache_shows():
@@ -70,7 +88,8 @@ def cache_shows():
parsed = []
for i in item_list:
try:
- show = (i.b.string, i.a['href'], i.img['src'])
+ show = (i.b.string, i.a['href'], i.img['src'],
+ i('a')[2].b.string.split()[0], i.span.string)
if not show in parsed:
parsed.append(show)
except:
@@ -93,7 +112,10 @@ def get_shows(shows):
for i in shows:
if 'v=trending' in i[1]:
i[1] = i[1].replace('v=trending','v=more')
- add_dir(i[0], base+i[1], 1, i[2])
+ plot = ''
+ if i[4]:
+ plot = i[4]
+ add_dir(i[0], base+i[1], 1, i[2], {'Episode': int(i[3]), 'Plot': plot})
def get_seasons(soup, iconimage):
@@ -105,11 +127,18 @@ def get_seasons(soup, iconimage):
addon_log('Seasons Exception: %s' %format_exc())
return False
for i in items:
- add_dir(i.string, base+i['href'], 2, iconimage, '', True)
+ name = i.string.encode('utf-8')
+ try:
+ meta = {'Season': int(name.split(':')[0].split()[1])}
+ except:
+ meta = {}
+ add_dir(name, base+i['href'], 2, iconimage, meta, True)
return True
def index(soup, season=True):
+ episode_patterns = [re.compile('Episode (.+?):'), re.compile('Episode
(.+?) -'),
+ re.compile('Volume (.+?):'), re.compile('#(.+?):')]
if season:
items = soup('div', attrs={'id' :
"profileAjaxContent"})[0]('table')[1]('a')
else:
@@ -129,18 +158,26 @@ def index(soup, season=True):
name += ': ' + i('span')[1].string
except:
pass
+ name = name.encode('utf-8', 'ignore')
+ meta = {}
duration = i.td.string
- if duration is None:
- diration = ''
- add_dir(name.encode('utf-8', 'ignore'), item_id, 3, thumb, duration,
False, False)
+ if duration:
+ meta['Duration'] = get_duration(duration)
+ for i in episode_patterns:
+ try:
+ meta['Episode'] = int(i.findall(name)[0])
+ break
+ except:
+ pass
+ add_dir(name, item_id, 3, thumb, meta, False, False)
try:
next_page = soup('a', attrs={'id' : "streamLoadMore"})[0]['href']
- add_dir(language(30002), base + next_page, 2, icon, '', season)
+ add_dir(language(30002), base + next_page, 2, icon, {}, season)
except:
addon_log("Didn't find next page!")
-def resolve_url(item_id):
+def resolve_url(item_id, retry=False):
url = 'http://roosterteeth.com/archive/new/_loadEpisode.php?id=%s&v=morev'
%item_id
data = json.loads(make_request(url))
soup = get_soup(data['embed']['html'])
@@ -149,27 +186,46 @@ def resolve_url(item_id):
if filetype == 'youtube':
youtube_id = soup.iframe['src'].split('/')[-1].split('?')[0]
addon_log('youtube id:' + youtube_id)
- path =
'plugin://plugin.video.youtube/?action=play_video&videoid='+youtube_id
+ path =
'plugin://plugin.video.youtube/?action=play_video&videoid=%s' %youtube_id
elif filetype == 'blip':
blip_url = soup.iframe['src']
addon_log('blip_url: ' + blip_url)
path = get_blip_location(blip_url)
addon_log('path: %s' %path)
+ return path
except:
- sorry = "Sorry, you must be a Sponsor to see this video."
- if sorry in str(soup):
- xbmc.executebuiltin("XBMC.Notification(%s,%s,5000,%s)"
- %(language(30000), language(30003), icon))
- addon_log(sorry)
- return
+ if retry:
+ addon_log('retryException: %s' %format_exc())
+ sorry = check_sorry(soup)
+ elif addon.getSetting('is_sponsor') == 'true':
+ logged_in = check_login()
+ if not logged_in:
+ logged_in = login()
+ if logged_in:
+ return resolve_url(item_id, True)
+ notify(language(30025))
+ xbmc.sleep(5000)
+ sorry = check_sorry(soup)
else:
- addon_log('addonException: %s' %format_exc())
- return
- return path
+ sorry = check_sorry(soup)
+ if not sorry:
+ notify(language(30024))
+ addon_log('addonException: resolve_url')
+
+
+def check_sorry(soup):
+ sorry = ['Video recordings and live broadcasts of the podcast are only
available for Sponsors.',
+ 'Sorry, you must be a Sponsor to see this video.']
+ for i in sorry:
+ pattern = re.compile(i)
+ if pattern.findall(str(soup)):
+ notify(language(30003))
+ addon_log(i)
+ return True
def get_blip_location(blip_url):
- blip_data = make_request(blip_url, True)
+ blip_data = make_request(blip_url, location=True)
pattern = re.compile('http://blip.tv/rss/flash/(.+?)&')
try:
feed_id = pattern.findall(blip_data[0])[0]
@@ -192,6 +248,7 @@ def get_blip_location(blip_url):
try:
blip_dict = xmltodict.parse(make_request(blip_xml))
items =
blip_dict['rss']['channel']['item']['media:group'][u'media:content']
+ # if only one result items will be a dict
if isinstance(items, dict):
try:
return items['@url']
@@ -264,21 +321,45 @@ def get_podcasts_episodes(url, iconimage):
pod_dict = xmltodict.parse(data)
items = pod_dict['rss']['channel']['item']
for i in items:
- add_dir('%s : %s' %(i['title'], i['description']),
- i['link'], 6, iconimage, i['itunes:duration'], False, False)
+ title = i['title'].encode('utf-8')
+ date_time = datetime(*(time.strptime(i['pubDate'], '%a, %d %b %Y
%H:%M:%S GMT')[0:6]))
+ meta = {'Duration': get_duration(i['itunes:duration']),
+ 'Date': date_time.strftime('%d.%m.%Y'),
+ 'Premiered': date_time.strftime('%d-%m-%Y'),
+ 'Episode': title.split('#')[1]}
+ add_dir('%s : %s' %(title, i['description']),
+ i['link'], 6, iconimage, meta, False, False)
-def resolve_podcast_url(episode_url):
+def resolve_podcast_url(episode_url, retry=False):
soup = get_soup(episode_url)
is_video = soup('embed')
- blip_id = None
if is_video:
- if 'swf#' in soup.embed['src']:
- blip_id = soup.embed['src'].split('swf#')[1]
- if blip_id:
- resolved = get_blip_location('http://blip.tv/play/' + blip_id)
- if resolved:
- return resolved
+ try:
+ if 'swf#' in soup.embed['src']:
+ blip_id = soup.embed['src'].split('swf#')[1]
+ resolved = get_blip_location('http://blip.tv/play/' + blip_id)
+ return resolved
+ except:
+ addon_log('addonException resolve_podcast_url: %s' %format_exc())
+ elif retry:
+ addon_log('No video embed found')
+ sorry = check_sorry(soup)
+ if not sorry:
+ notify(language(30024))
+ elif addon.getSetting('is_sponsor') == 'true':
+ logged_in = check_login()
+ if not logged_in:
+ logged_in = login()
+ if logged_in:
+ return resolve_podcast_url(episode_url, True)
+ notify(language(30025))
+ xbmc.sleep(3000)
+ sorry = check_sorry(soup)
+ else:
+ sorry = check_sorry(soup)
+ if sorry:
+ xbmc.sleep(5000)
downloads = []
items = soup.find('div', class_="titleLine",
text="DOWNLOAD").findNext('div')('a')
@@ -324,20 +405,64 @@ def get_params():
return p
-def add_dir(name, url, mode, iconimage, duration=None, season=False,
isfolder=True):
+def add_dir(name, url, mode, iconimage, meta={}, season=False, isfolder=True):
params = {'name': name, 'url': url, 'mode': mode, 'iconimage': iconimage,
'season': season}
url = '%s?%s' %(sys.argv[0], urllib.urlencode(params))
listitem = xbmcgui.ListItem(name, iconImage="DefaultFolder.png",
thumbnailImage=iconimage)
listitem.setProperty( "Fanart_Image", fanart )
- infolabels = {"Title": name}
+ meta["Title"] = name
+ meta['Genre'] = language(30026)
if not isfolder:
listitem.setProperty('IsPlayable', 'true')
- if duration:
- infolabels['Duration'] = get_duration(duration)
- listitem.setInfo(type="Video", infoLabels=infolabels)
+ listitem.setInfo(type="Video", infoLabels=meta)
xbmcplugin.addDirectoryItem(int(sys.argv[1]), url, listitem, isfolder)
+def check_login():
+ logged_in = False
+ cookies = {}
+ cookie_jar.load(cookie_file, ignore_discard=False, ignore_expires=False)
+ for i in cookie_jar:
+ cookies[i.name] = i.value
+ if cookies.has_key('rtusername') and cookies['rtusername'] ==
addon.getSetting('username'):
+ logged_in = True
+ addon_log('Already logged in')
+ return logged_in
+
+
+def login():
+ url = 'https://roosterteeth.com/members/signinPost.php'
+ username = addon.getSetting('username')
+ login_data = {'pass': addon.getSetting('password'),
+ 'user': username,
+ 'return': '/sponsor/'}
+ data = make_request(url, urllib.urlencode(login_data))
+ soup = BeautifulSoup(data, 'html.parser')
+ logged_in_tag = soup.find('span', attrs={'id': 'signedInName'})
+ if logged_in_tag and username in str(logged_in_tag):
+ addon_log('Logged in successfully')
+ return True
+
+
+def set_view_mode():
+ view_modes = {
+ '0': '502',
+ '1': '51',
+ '2': '3',
+ '3': '504',
+ '4': '503',
+ '5': '515'
+ }
+ view_mode = addon.getSetting('view_mode')
+ if view_mode == '6':
+ return
+ xbmc.executebuiltin('Container.SetViewMode(%s)' %view_modes[view_mode])
+
+
+# check if dir exists, needed to save cookies to file
+if not xbmcvfs.exists(addon_profile):
+ xbmcvfs.mkdir(addon_profile)
+
params = get_params()
try:
@@ -348,45 +473,67 @@ except:
addon_log(repr(params))
if mode == None:
+ # display main plugin dir
add_dir(language(30008), 'get_latest', 8, icon)
add_dir(language(30005), 'get_podcasts', 4, icon)
shows = eval(cache.cacheFunction(cache_shows))
get_shows(shows['active'])
add_dir(language(30007), 'get_retired_shows', 7, icon)
+ xbmcplugin.setContent(int(sys.argv[1]), 'tvshows')
xbmcplugin.endOfDirectory(int(sys.argv[1]))
elif mode == 1:
+ # display show, if seasons, else episodes
soup = get_soup(params['url'])
seasons = get_seasons(soup, params['iconimage'])
- if not seasons:
+ if seasons:
+ xbmcplugin.setContent(int(sys.argv[1]), 'tvshows')
+ else:
index(soup, False)
+ set_view_mode()
+ xbmcplugin.setContent(int(sys.argv[1]), 'episodes')
xbmcplugin.endOfDirectory(int(sys.argv[1]))
elif mode == 2:
+ # display show episodes
soup = get_soup(params['url'])
index(soup, params['season'])
+ xbmcplugin.setContent(int(sys.argv[1]), 'episodes')
+ set_view_mode()
xbmcplugin.endOfDirectory(int(sys.argv[1]))
elif mode == 3:
+ # resolve show episode
set_resolved_url(resolve_url(params['url']))
elif mode == 4:
+ # display podcast dir
get_podcasts()
+ xbmcplugin.setContent(int(sys.argv[1]), 'tvshows')
xbmcplugin.endOfDirectory(int(sys.argv[1]))
elif mode == 5:
+ # display podcast episodes
get_podcasts_episodes(params['url'], params['iconimage'])
+ xbmcplugin.setContent(int(sys.argv[1]), 'episodes')
+ set_view_mode()
xbmcplugin.endOfDirectory(int(sys.argv[1]))
elif mode == 6:
+ # resolve podcast episode
set_resolved_url(resolve_podcast_url(params['url']))
elif mode == 7:
+ # display retired shows
shows = eval(cache.cacheFunction(cache_shows))
get_shows(shows['retired'])
+ xbmcplugin.setContent(int(sys.argv[1]), 'tvshows')
xbmcplugin.endOfDirectory(int(sys.argv[1]))
elif mode == 8:
+ # display latest episodes
soup = get_soup('http://roosterteeth.com/archive/?sid=rvb&v=newest')
index(soup, False)
- xbmcplugin.endOfDirectory(int(sys.argv[1]))
+ xbmcplugin.setContent(int(sys.argv[1]), 'episodes')
+ set_view_mode()
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
\ No newline at end of file
diff --git a/plugin.video.roosterteeth/resources/language/English/strings.xml
b/plugin.video.roosterteeth/resources/language/English/strings.xml
index a1f4bae..bbe7266 100644
--- a/plugin.video.roosterteeth/resources/language/English/strings.xml
+++ b/plugin.video.roosterteeth/resources/language/English/strings.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30000">RoosterTeeth</string>
- <string id="30001"></string>
+ <string id="30001">Add-on Notification</string>
<string id="30002">Next Page</string>
- <string id="30003">Sorry Sponsor only videos are not supported.</string>
+ <string id="30003">Sorry, you must be a Sponsor to see this video.</string>
<string id="30004">Only audio is avaliable</string>
<string id="30005">Podcasts</string>
<string id="30006">Choose a stream</string>
@@ -14,4 +14,20 @@
<string id="30011">Medium</string>
<string id="30012">Low</string>
<string id="30013">Ask</string>
+ <string id="30014">Rooster Teeth Sponsor</string>
+ <string id="30015">User Name</string>
+ <string id="30016">Password</string>
+ <string id="30017">Default view mode for episodes</string>
+ <string id="30018">List</string>
+ <string id="30019">Big list</string>
+ <string id="30020">Thumbnail</string>
+ <string id="30021">Media info</string>
+ <string id="30022">Media info 2</string>
+ <string id="30023">Media info 3</string>
+ <string id="30024">Unknown Error</string>
+ <string id="30025">Login Failed</string>
+ <string id="30026">Comedy, Gaming</string>
+ <string id="30027"></string>
+ <string id="30028"></string>
+ <string id="30029"></string>
</strings>
\ No newline at end of file
diff --git a/plugin.video.roosterteeth/resources/settings.xml
b/plugin.video.roosterteeth/resources/settings.xml
index 1c9ba77..0ab3a1c 100644
--- a/plugin.video.roosterteeth/resources/settings.xml
+++ b/plugin.video.roosterteeth/resources/settings.xml
@@ -1,5 +1,9 @@
<settings>
<category label="General">
<setting id="quality" type="enum" label="30009"
lvalues="30010|30011|30012|30013" default="1"/>
+ <setting id="view_mode" type="enum" label="30017"
lvalues="30018|30019|30020|30021|30022|30023|30024" default="4"/>
+ <setting id="is_sponsor" type="bool" label="30014" default="false"/>
+ <setting id="username" type="text" label="30015" default=""
enable="eq(-1,true)"/>
+ <setting id="password" type="text" label="30016" default=""
option="hidden" enable="eq(-2,true)"/>
</category>
</settings>
\ No newline at end of file
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=93e8e93d3d3bf4efdd65846c392b3b442264ce09
commit 93e8e93d3d3bf4efdd65846c392b3b442264ce09
Author: beenje <[email protected]>
Date: Sat Nov 23 11:27:49 2013 +0100
[plugin.video.sarpur] updated to version 3.0.2
diff --git a/plugin.video.sarpur/addon.xml b/plugin.video.sarpur/addon.xml
index e937243..101746f 100755
--- a/plugin.video.sarpur/addon.xml
+++ b/plugin.video.sarpur/addon.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.sarpur"
name="Sarpur"
- version="2.0.1"
+ version="3.0.2"
provider-name="Dagur">
<requires>
- <import addon="xbmc.python" version="2.0"/>
+ <import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.beautifulsoup" version="3.0.8"/>
<import addon="script.module.simplejson" version="2.0.10"/>
</requires>
@@ -17,5 +17,10 @@
<description lang="en">An Iceland IP-Address is required to use this
because of geoblocking</description>
<platform>all</platform>
<language>is</language>
+ <license>GNU GENERAL PUBLIC LICENSE. Version 3, June 2007</license>
+ <forum>http://spjall.vaktin.is/viewtopic.php?p=538688</forum>
+ <website>https://code.google.com/p/xbmc-ruv-plugin/</website>
+ <source>https://code.google.com/p/xbmc-ruv-plugin/svn</source>
+ <email></email>
</extension>
</addon>
diff --git a/plugin.video.sarpur/changelog.txt
b/plugin.video.sarpur/changelog.txt
index 9a9a1ba..855dfc4 100644
--- a/plugin.video.sarpur/changelog.txt
+++ b/plugin.video.sarpur/changelog.txt
@@ -1,3 +1,9 @@
+[B]Version 3.0.2[/B]
+- Updated for Frodo
+
+[B]Version 2.0.2[/B]
+- Changed scraper because of changed urls
+
[B]Version 2.0.1[/B]
- Changed ip-address for live feed
diff --git a/plugin.video.sarpur/default.py b/plugin.video.sarpur/default.py
index ed5b3fa..ada83e3 100755
--- a/plugin.video.sarpur/default.py
+++ b/plugin.video.sarpur/default.py
@@ -64,26 +64,26 @@ def spila(url):
#rtmp_url = "rtmp://178.19.48.74/ruvvod?key=93292"
item = xbmcgui.ListItem("RTL")
item.setProperty("PlayPath", stream_info['playpath'])
- item.setProperty("SWFPlayer", "http://www.ruv.is/files/spilari/player.swf")
+ item.setProperty("SWFPlayer", stream_info['swfplayer'])
#"http://www.ruv.is/files/spilari/player.swf")
item.setProperty("PageURL", url)
- xbmc.Player(xbmc.PLAYER_CORE_DVDPLAYER).play(stream_info['rtmp_url'], item)
+ xbmc.Player().play(stream_info['rtmp_url'], item)
def spila_hladvarp(url):
- xbmc.Player(xbmc.PLAYER_CORE_DVDPLAYER).play(url)
+ xbmc.Player().play(url)
def spila_live(stod):
stream_info = {}
#if stod == 'ruv':
- #stream_info['playpath'] =
'http://194.144.162.36:1935/ruv/beint-2/playlist.m3u8?key=%d' %
int(math.floor(random.random() * 9999))
+ stream_info['rtmp_url'] =
'http://sip-live.hds.adaptive.level3.net/hls-live/ruv-ruv/_definst_/live/stream1.m3u8'
stream_info['playpath'] = 'beint-2'
- stream_info['rtmp_url'] = 'rtmp://212.30.206.129/ruv?key=%d' %
int(math.floor(random.random() * 9999))
+ #stream_info['rtmp_url'] = 'rtmp://212.30.206.129/ruv?key=%d' %
int(math.floor(random.random() * 9999))
stream_info['page_url'] = 'http://ruv.is/ruv'
item = xbmcgui.ListItem("RTL")
item.setProperty("PlayPath", stream_info['playpath'])
item.setProperty("SWFPlayer", "http://www.ruv.is/files/spilari/player.swf")
item.setProperty("PageURL", stream_info['page_url'])
- xbmc.Player(xbmc.PLAYER_CORE_DVDPLAYER).play(stream_info['rtmp_url'], item)
+ xbmc.Player().play(stream_info['rtmp_url'], item)
diff --git a/plugin.video.sarpur/scraper.py b/plugin.video.sarpur/scraper.py
index c0f9890..55c2216 100755
--- a/plugin.video.sarpur/scraper.py
+++ b/plugin.video.sarpur/scraper.py
@@ -92,15 +92,24 @@ def get_latest_episodes(url):
def get_stream_info(page_url):
"Get a page url and finds the url of the rtmp stream"
html = fetch_page(page_url)
+ soup = BeautifulSoup(html)
+
+ params = soup.findAll('param', limit=2 )
+ swfplayer = 'http://ruv.is%s' % params[0]['value']
+ details = params[1]['value']
+
+ playpath = re.search('streamer=(.*?)&(file=.*?)&stre', details).group(2)
+ rtmp_url = re.search('http.*?m3u8', html).group()
- access_point_hyperlink = re.search('"http://load.cache.is.*?"',
html).group()[1:-1]
- javascript = fetch_page(access_point_hyperlink)
- access_point = re.search('"(.*?)"', javascript).group(1)
- path = re.search('ruv(vod)?\?key=\d+', html).group()
- rtmp_url = "rtmp://%s/%s" % (access_point, path)
- playpath = re.findall("\'file\': \'(.*?)\'", html)[-1] #.group(1)
+ if 'tengipunktur' in rtmp_url:
+ access_point_hyperlink = re.search('"http://load.cache.is.*?"',
html).group()[1:-1]
+ javascript = fetch_page(access_point_hyperlink)
+ access_point = re.search('"(.*?)"', javascript).group(1)
+ print access_point
+ rtmp_url = rtmp_url.replace("' + tengipunktur + '", access_point)
- return {'playpath': playpath, 'rtmp_url': rtmp_url}
+ print rtmp_url
+ return {'playpath': playpath, 'rtmp_url': rtmp_url, 'swfplayer': swfplayer}
def update_index():
"Update the data file with the show list"
-----------------------------------------------------------------------
Summary of changes:
plugin.video.roosterteeth/addon.xml | 3 +-
plugin.video.roosterteeth/changelog.txt | 10 +
plugin.video.roosterteeth/default.py | 237 ++++++++++++++++----
.../resources/language/English/strings.xml | 20 ++-
plugin.video.roosterteeth/resources/settings.xml | 4 +
plugin.video.sarpur/addon.xml | 9 +-
plugin.video.sarpur/changelog.txt | 6 +
plugin.video.sarpur/default.py | 12 +-
plugin.video.sarpur/scraper.py | 23 ++-
9 files changed, 261 insertions(+), 63 deletions(-)
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons