The branch, dharma has been updated
via b8dbf608d0f2783aa86525d1ee381512c656bbb7 (commit)
via 85ad4b11d81d27bc6901881aca285e7fe5346997 (commit)
via b906fb03b2c3d50480d1370e2bd994687fb81725 (commit)
from 69ca8b48d15ee912f5b94a11e45bf43c7c59fd2b (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=b8dbf608d0f2783aa86525d1ee381512c656bbb7
commit b8dbf608d0f2783aa86525d1ee381512c656bbb7
Author: spiff <[email protected]>
Date: Thu Mar 24 20:15:33 2011 +0100
[plugin.video.youtube] updated to version 2.0.3
diff --git a/plugin.video.youtube/YouTubeCore.py
b/plugin.video.youtube/YouTubeCore.py
index acfccc1..b416179 100755
--- a/plugin.video.youtube/YouTubeCore.py
+++ b/plugin.video.youtube/YouTubeCore.py
@@ -355,11 +355,12 @@ class YouTubeCore(object):
if link.item(i).getAttribute('rel') ==
'edit':
obj =
link.item(i).getAttribute('href')
video['editid'] =
obj[obj.rfind('/')+1:]
-
- video['next'] = next
-
+
playobjects.append(video);
+ if len(playobjects) > 0:
+ playobjects[len(playobjects) - 1]['next'] = next
+
if self.__dbg__:
print self.__plugin__ + " playlist done"
@@ -466,6 +467,7 @@ class YouTubeCore(object):
if (len(fmt_url) > 7 and
fmt_url.find(":\\/\\/") > 0):
if (fmt_url.rfind(',') >
fmt_url.rfind('\/id\/')):
final_url =
fmt_url[:fmt_url.rfind(',')]
+ final_url =
final_url.replace('\u0026','&')
if
(final_url.rfind('\/itag\/') > 0):
quality =
final_url[final_url.rfind('\/itag\/') + 8:]
else :
@@ -473,6 +475,7 @@ class YouTubeCore(object):
links[int(quality)] =
final_url.replace('\/','/')
else :
final_url = fmt_url
+ final_url =
final_url.replace('\u0026','&')
if
(final_url.rfind('\/itag\/') > 0):
quality =
final_url[final_url.rfind('\/itag\/') + 8:]
else :
@@ -486,6 +489,7 @@ class YouTubeCore(object):
if (len(fmt_url) > 7):
if (fmt_url.rfind(',') >
fmt_url.rfind('&id=')):
final_url =
fmt_url[:fmt_url.rfind(',')]
+ final_url =
final_url.replace('\u0026','&')
if
(final_url.rfind('itag=') > 0):
quality =
final_url[final_url.rfind('itag=') + 5:]
quality =
quality[:quality.find('&')]
diff --git a/plugin.video.youtube/YouTubeNavigation.py
b/plugin.video.youtube/YouTubeNavigation.py
index 917fb93..081b379 100644
--- a/plugin.video.youtube/YouTubeNavigation.py
+++ b/plugin.video.youtube/YouTubeNavigation.py
@@ -266,12 +266,13 @@ class YouTubeNavigation:
item_add_user = {'Title':self.__language__( 30024 ),
'path':get("path"), 'login':"true", 'thumbnail':"add_user",
'action':"add_contact"}
self.addFolderListItem(params, item_add_user, 1)
- if ( get('feed') == 'subscriptions' ) :
- item = {"Title":self.__language__( 30004 ),
"path":"/root/subscriptions/new", "thumbnail":"newsubscriptions",
"login":"true", "feed":"newsubscriptions"}
- if (get("contact")):
- item["contact"] = get("contact")
-
- self.addFolderListItem(params, item)
+ if ( get('feed') == 'subscriptions' ):
+ if (not get("page")):
+ item = {"Title":self.__language__( 30004 ),
"path":"/root/subscriptions/new", "thumbnail":"newsubscriptions",
"login":"true", "feed":"newsubscriptions"}
+ if (get("contact")):
+ item["contact"] = get("contact")
+
+ self.addFolderListItem(params, item)
self.parseFolderList(params, result)
@@ -409,6 +410,7 @@ class YouTubeNavigation:
def playVideo(self, params = {}):
get = params.get
(video, status) = core.construct_video_url(params);
+
if status != 200:
self.errorHandling(self.__language__(30603), video,
status)
return False
@@ -571,6 +573,7 @@ class YouTubeNavigation:
def search(self, params = {}):
get = params.get
+
if (get("search")):
query = get("search")
query = urllib.unquote_plus(query)
@@ -662,7 +665,6 @@ class YouTubeNavigation:
self.saveSearch(old_query, new_query,
"stored_disco_searches")
self.search(params)
-
def refineSearch(self, params = {}):
get = params.get
@@ -754,7 +756,8 @@ class YouTubeNavigation:
url = self.buildItemUrl(item_params, url)
if len(cm) > 0:
- listitem.addContextMenuItems( cm, replaceItems=True )
+ listitem.addContextMenuItems( cm, replaceItems=False )
+
listitem.setProperty( "Folder", "true" )
if (item("feed") == "downloads"):
url = self.__settings__.getSetting("downloadPath")
@@ -814,6 +817,8 @@ class YouTubeNavigation:
result = result_params.get
next = result("next") == "true"
+ # Make sure folder items don't have next set otherwise
they won't get context menu items attached
+ result_params["next"] = "false"
result_params["path"] = get("path")
result_params["login"] = "true"
diff --git a/plugin.video.youtube/addon.xml b/plugin.video.youtube/addon.xml
index 06e9d51..2283f05 100644
--- a/plugin.video.youtube/addon.xml
+++ b/plugin.video.youtube/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.youtube"
name="YouTube"
- version="2.0.2"
+ version="2.0.3"
provider-name="TheCollective">
<requires>
<import addon="xbmc.python" version="1.0"/>
diff --git a/plugin.video.youtube/changelog.txt
b/plugin.video.youtube/changelog.txt
index 697600a..4c0c525 100644
--- a/plugin.video.youtube/changelog.txt
+++ b/plugin.video.youtube/changelog.txt
@@ -6,6 +6,12 @@
- [YOUTUBE] Can't delete favorites (YouTube gives video id, not favorite id).
- Download of rtmpe streams not supported.
+[B]Version 2.0.3[/B]
+- Fixed Context menus were "suddenly" missing on a lot of folder items
(probably since pre v.2)
+- Fixed "New Subscriptions Videos" feed would show up on every subscriptions
page this has been corrected
+- Fixed YouTube changed character encoding of their webpage which messed up
playback in the plugin.
+- Added Portuguese (Brazil) translation courtesy of fschnack
+
[B]Version 2.0.2[/B]
- Fixed problem with "Now Playing" context menu item showing the Music
Playlist and not the Video Playlist
- Fixed Issue preventing the plugin running on XBMC builds using external
python (ie. v2.7)
diff --git a/plugin.video.youtube/default.py b/plugin.video.youtube/default.py
index cd823dc..0fa0941 100644
--- a/plugin.video.youtube/default.py
+++ b/plugin.video.youtube/default.py
@@ -19,7 +19,7 @@
import sys, xbmc, xbmcaddon
# plugin constants
-__version__ = "2.0.2"
+__version__ = "2.0.3"
__plugin__ = "YouTube-" + __version__
__author__ = "TheCollective"
__url__ = "www.xbmc.com"
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=85ad4b11d81d27bc6901881aca285e7fe5346997
commit 85ad4b11d81d27bc6901881aca285e7fe5346997
Author: spiff <[email protected]>
Date: Thu Mar 24 20:12:23 2011 +0100
[plugin.video.nz.ondemand] updated to version 1.3.3
diff --git a/plugin.video.nz.ondemand/addon.xml
b/plugin.video.nz.ondemand/addon.xml
index 4a4d7ba..e30c20f 100644
--- a/plugin.video.nz.ondemand/addon.xml
+++ b/plugin.video.nz.ondemand/addon.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.nz.ondemand"
- version="1.2.0"
+ version="1.3.3"
name="NZ OnDemand"
provider-name="Mark Honeychurch (markhoney)">
<requires>
@@ -13,7 +13,7 @@
<extension point="xbmc.addon.metadata">
<platform>all</platform>
<summary lang="en">NZ OnDemand</summary>
- <description lang="en">New Zealand TV3/C4, TVNZ and Ziln OnDemand
Videos.</description>
+ <description lang="en">New Zealand TV3/C4, TVNZ and Ziln OnDemand videos,
along with Shine and Parliament TV streaming video.</description>
<disclaimer lang="en">Some parts of this addon may not be legal in your
country of residence - please check with your local laws.</disclaimer>
</extension>
</addon>
diff --git a/plugin.video.nz.ondemand/changelog.txt
b/plugin.video.nz.ondemand/changelog.txt
index 1a3dda4..d6831f5 100644
--- a/plugin.video.nz.ondemand/changelog.txt
+++ b/plugin.video.nz.ondemand/changelog.txt
@@ -1,3 +1,22 @@
+[B]1.3.3[/B]
+- Added search for TV3 (just waiting for PS3 now)
+- Fixed HTTP (non RTMP) stream detection for TV3 (so more videos should now
play properly)
+
+[B]1.3.2[/B]
+- Added User Agent spoofing to look like IE9 for all sites except TVNZ, where
we pretend to be a PS3
+- Added Search ability to Ziln (TV3 and possibly TVNZ to follow)
+
+[B]1.3.1[/B]
+- Added the ability to hide all but the 2 core channels (TV3 and TVNZ)
+
+[B]1.3.0[/B]
+- Added Parliament TV live stream
+- Added Shine TV live stream (although the streaming service is inactive at
the moment)
+- New logo, courtesy of Freezy
+
+[B]1.2.1[/B]
+- Fixed TVNZ's All Shows Category
+
[B]1.2.0[/B]
- Fixed issues with all three providers
- Added stream quality setting for TV3 and TVNZ
diff --git a/plugin.video.nz.ondemand/default.py
b/plugin.video.nz.ondemand/default.py
index 7071a08..d5a3710 100644
--- a/plugin.video.nz.ondemand/default.py
+++ b/plugin.video.nz.ondemand/default.py
@@ -56,18 +56,26 @@ def INDEX():
channels = dict()
channels["0"] = "TV3"
channels["1"] = "TVNZ"
- channels["2"] = "Ziln"
- count = len(channels)
+ if addon.getSetting('Ziln_hide') == "false":
+ channels["2"] = "Ziln"
+ #channels["3"] = "iSKY"
+# streamingchannels = dict()
+# streamingchannels["0"] = "Shine"
+# streamingchannels["1"] = "Parliament"
+ count = len(channels) + 1 #+ len(streamingchannels)
for index in channels:
info = tools.defaultinfo(1)
info["Title"] = channels[index]
- addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
info["Thumb"] = os.path.join(addon.getAddonInfo('path'),
"resources/images/%s.png" % channels[index])
info["Count"] = int(index)
info["FileName"] = "%s?ch=%s" % (sys.argv[0], channels[index])
- tools.addlistitem(info, "resources/images/%s.jpg" % channels[index], 1,
count)
-
-
+ tools.addlistitem(int(sys.argv[1]), info, "resources/images/%s.jpg" %
channels[index], 1, count)
+ if addon.getSetting('Parliament_hide') == "false":
+ import parliament
+ parliament.RESOLVE("Parliament", count)
+ if addon.getSetting('Shine_hide') == "false":
+ import shine
+ shine.RESOLVE("Shine", count)
# Decide what to run based on the plugin URL
@@ -77,64 +85,80 @@ if params:
import tv3
if params.get("folder", "") <> "":
tv3.INDEX_FOLDER(params["folder"][0])
- tools.addsorting(["unsorted", "label"])
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "label"])
elif params.get("cat", "") <> "":
if params["cat"][0] == "tv":
tv3.SHOW_EPISODES(params["catid"][0], "tv3")
- tools.addsorting(["unsorted", "date", "label", "runtime", "episode"],
"episodes")
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label",
"runtime", "episode"], "episodes")
elif params["cat"][0] == "atoz":
tv3.SHOW_ATOZ(params["catid"][0], "tv3")
- tools.addsorting(["unsorted", "date", "label", "runtime", "episode"],
"tvshows")
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label",
"runtime", "episode"], "tvshows")
elif params["cat"][0] == "tv3":
tv3.SHOW_EPISODES(params["catid"][0], "tv3")
- tools.addsorting(["unsorted", "date", "label", "runtime", "episode"],
"episodes")
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label",
"runtime", "episode"], "episodes")
elif params["cat"][0] == "c4tv":
tv3.SHOW_EPISODES(params["catid"][0], "c4tv")
- tools.addsorting(["unsorted", "date", "label", "runtime", "episode"],
"episodes")
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label",
"runtime", "episode"], "episodes")
elif params["cat"][0] == "shows":
tv3.SHOW_SHOW(urllib.unquote(params["catid"][0]),
urllib.unquote(params["title"][0]), "tv3")
- tools.addsorting(["unsorted", "date", "label", "runtime", "episode"],
"episodes")
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "date", "label",
"runtime", "episode"], "episodes")
elif params.get("id", "") <> "":
tv3.RESOLVE(params["id"][0], eval(urllib.unquote(params["info"][0])))
else:
- if addon.getSetting('tv3_folders') == 'true':
+ if addon.getSetting('TV3_folders') == 'true':
tv3.INDEX_FOLDERS()
else:
tv3.INDEX("tv3")
- tools.addsorting(["unsorted", "label"])
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "label"])
elif params["ch"][0] == "TVNZ":
import tvnz
if params.get("type", "") <> "":
if params["type"][0] == "shows":
tvnz.EPISODE_LIST(params["id"][0])
- tools.addsorting(["label"], "episodes")
+ tools.addsorting(int(sys.argv[1]), ["label"], "episodes")
elif params["type"][0] == "singleshow":
tvnz.SHOW_EPISODES(params["id"][0])
- tools.addsorting(["date"], "episodes")
+ tools.addsorting(int(sys.argv[1]), ["date"], "episodes")
elif params["type"][0] == "alphabetical":
tvnz.SHOW_LIST(params["id"][0])
- tools.addsorting(["label"], "tvshows")
+ tools.addsorting(int(sys.argv[1]), ["label"], "tvshows")
elif params["type"][0] == "distributor":
tvnz.SHOW_DISTRIBUTORS(params["id"][0])
- tools.addsorting(["label"], "tvshows")
+ tools.addsorting(int(sys.argv[1]), ["label"], "tvshows")
elif params["type"][0] == "video":
tvnz.RESOLVE(params["id"][0], eval(urllib.unquote(params["info"][0])))
else:
tvnz.INDEX()
- tools.addsorting(["label"])
+ tools.addsorting(int(sys.argv[1]), ["label"])
elif params["ch"][0] == "Ziln":
import ziln
- if params.get("channel", "") <> "":
- ziln.INDEX("video", params["channel"][0])
- tools.addsorting(["label"])
+ if params.get("folder", "") <> "":
+ if params["folder"][0] == "channels":
+ ziln.PROGRAMMES("channel", "")
+ tools.addsorting(int(sys.argv[1]), ["label"])
+ elif params["folder"][0] == "search":
+ ziln.SEARCH()
+ tools.addsorting(int(sys.argv[1]), ["label"])
+ elif params.get("channel", "") <> "":
+ ziln.PROGRAMMES("video", params["channel"][0])
+ tools.addsorting(int(sys.argv[1]), ["label"])
elif params.get("video", "") <> "":
ziln.RESOLVE(params["video"][0]) #, eval(urllib.unquote(params["info"][0]))
- tools.addsorting(["label"])
+ tools.addsorting(int(sys.argv[1]), ["label"])
else:
- ziln.INDEX("channel", "")
- tools.addsorting(["label"])
+ ziln.INDEX()
+ tools.addsorting(int(sys.argv[1]), ["label"])
+ elif params["ch"][0] == "Shine":
+ import shine
+ shine.RESOLVE(params["ch"][0])
+# elif params["ch"][0] == "Parliament":
+# import parliament
+# parliament.RESOLVE(params["ch"][0], eval(urllib.unquote(params["info"][0])))
+# elif params["ch"][0] == "iSKY":
+# import isky
+# isky.INDEX()
else:
sys.stderr.write("Invalid Channel ID")
else:
INDEX()
- tools.addsorting(["unsorted", "label"])
\ No newline at end of file
+ tools.addsorting(int(sys.argv[1]), ["unsorted", "label"])
\ No newline at end of file
diff --git a/plugin.video.nz.ondemand/icon.png
b/plugin.video.nz.ondemand/icon.png
index 5773e48..1adfe26 100644
Binary files a/plugin.video.nz.ondemand/icon.png and
b/plugin.video.nz.ondemand/icon.png differ
diff --git a/plugin.video.nz.ondemand/resources/language/English/strings.xml
b/plugin.video.nz.ondemand/resources/language/English/strings.xml
index 55c31d3..1e5b3c4 100644
--- a/plugin.video.nz.ondemand/resources/language/English/strings.xml
+++ b/plugin.video.nz.ondemand/resources/language/English/strings.xml
@@ -7,6 +7,8 @@
<string id="30011">Low</string>
<string id="30012">Medium</string>
<string id="30013">High</string>
+ <string id="30020">Stream Type</string>
+ <string id="30021">Hide This Channel</string>
<string id="30052">Categories</string>
<string id="30053">Channels</string>
@@ -21,10 +23,13 @@
<string id="30062">Reality</string>
<string id="30063">Sports</string>
<string id="30064">All</string>
+ <string id="30065">Search</string>
<string id="30100">General</string>
<string id="30101">TV3</string>
<string id="30102">TVNZ</string>
<string id="30103">Ziln</string>
<string id="30104">iSky</string>
+ <string id="30105">Parliament</string>
+ <string id="30106">Shine</string>
</strings>
diff --git a/plugin.video.nz.ondemand/resources/settings.xml
b/plugin.video.nz.ondemand/resources/settings.xml
index 1f9b118..7eede91 100644
--- a/plugin.video.nz.ondemand/resources/settings.xml
+++ b/plugin.video.nz.ondemand/resources/settings.xml
@@ -4,17 +4,26 @@
</category>-->
<category label="30101">
<!--<setting id="tv3_showads" type="bool" label="30002" default="true" />-->
- <!--<setting id="tv3_hq" type="bool" label="30000" default="true" />-->
- <setting id="tv3_quality" type="enum" label="30010" values="Low|Medium|High"
default="High"/>
- <setting id="tv3_folders" type="bool" label="30001" default="true" />
+ <setting id="TV3_quality" type="labelenum" label="30010"
values="High|Medium|Low" default="High"/>
+ <setting id="TV3_folders" type="bool" label="30001" default="true" />
</category>
<category label="30102">
- <!--<setting id="tvnz_hq" type="bool" label="30000" default="true" />-->
- <setting id="tvnz_quality" type="enum" label="30010"
values="Low|Medium|High" default="High"/>
- <setting id="tvnz_showads" type="bool" label="30002" default="true"/>
+ <setting id="TVNZ_quality" type="labelenum" label="30010"
values="High|Medium|Low" default="High"/>
+ <setting id="TVNZ_showads" type="bool" label="30002" default="false"/>
</category>
- <!--<category label="30103">
+ <category label="30103">
+ <setting id="Ziln_hide" type="bool" label="30021" default="false"/>
</category>
- <category label="30104">
+ <!--<category label="30104">
+ <setting id="iSKY_hide" type="bool" label="30021" default="false"/>
</category>-->
+ <category label="30105">
+ <setting id="Parliament_hide" type="bool" label="30021" default="false"/>
+ <setting id="Parliament_quality" type="labelenum" label="30010"
values="High|Medium|Low" default="High"/>
+ <!--<setting id="Parliament_stream" type="labelenum" label="30020"
values="Apple Quicktime|Windows Media Player" default="Windows Media
Player"/>-->
+ </category>
+ <category label="30106">
+ <setting id="Shine_hide" type="bool" label="30021" default="false"/>
+ <setting id="Shine_quality" type="labelenum" label="30010"
values="High|Medium|Low" default="High"/>
+ </category>
</settings>
diff --git a/plugin.video.nz.ondemand/tools.py
b/plugin.video.nz.ondemand/tools.py
index 79b2f4b..b68ad31 100644
--- a/plugin.video.nz.ondemand/tools.py
+++ b/plugin.video.nz.ondemand/tools.py
@@ -13,10 +13,14 @@ def message(message, title = "Warning"): #Show an on-screen
message (useful for
else:
dialog.ok("Message", "No message text")
-def gethtmlpage(url): #Grab an HTML page
+def gethtmlpage(url, useragent = "ie9"): #Grab an HTML page
import urllib2
sys.stderr.write("Requesting page: %s" % (url))
req = urllib2.Request(url)
+ newheader = 'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)'
+ if useragent == "ps3":
+ newheader = 'Mozilla/5.0 (PLAYSTATION 3; 3.55)'
+ req.add_header('User-agent', newheader)
response = urllib2.urlopen(req)
doc = response.read()
response.close()
@@ -82,7 +86,7 @@ def constructStackURL(playlist): #Build a URL stack from
multiple URLs for the X
# XBMC Manipulation
-def addlistitems(infoarray, fanart = "fanart.jpg", folder = 0, path = ""):
+def addlistitems(id, infoarray, fanart = "fanart.jpg", folder = 0, path = ""):
total = len(infoarray)
#total = len(infoarray.viewkeys())
i = 0
@@ -90,48 +94,46 @@ def addlistitems(infoarray, fanart = "fanart.jpg", folder =
0, path = ""):
for listkey, listitem in infoarray.items():
#listitem["Count"] = i
i += 1
- addlistitem(listitem, fanart, folder, total, path)
+ addlistitem(id, listitem, fanart, folder, total, path)
-def addlistitem(info, fanart = "fanart.jpg", folder = 0, total = 0, path =
""): #Add a list item (media file or folder) to the XBMC page
+def addlistitem(id, info, fanart = "fanart.jpg", folder = 0, total = 0, path =
""): #Add a list item (media file or folder) to the XBMC page
import xbmcgui, xbmcplugin, xbmcaddon, os
- #if checkdict(info, ("Title", "Icon", "Thumb", "FileName")):
- if 1 <> 0:
- liz = xbmcgui.ListItem(info["Title"], iconImage = info["Icon"],
thumbnailImage = info["Thumb"])
- addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
- liz.setProperty('fanart_image', os.path.join(addon.getAddonInfo('path'),
fanart))
- liz.setInfo(type = "Video", infoLabels = info)
- if not folder:
- liz.setProperty("IsPlayable", "true")
- if path == "":
- if xbmcplugin.addDirectoryItem(handle = int(sys.argv[1]), url =
info["FileName"], listitem = liz, isFolder = folder, totalItems = total):
- return 1
- else:
- return 0
+ liz = xbmcgui.ListItem(info["Title"], iconImage = info["Icon"],
thumbnailImage = info["Thumb"])
+ addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
+ liz.setProperty('fanart_image', os.path.join(addon.getAddonInfo('path'),
fanart))
+ liz.setInfo(type = "Video", infoLabels = info)
+ if not folder:
+ liz.setProperty("IsPlayable", "true")
+ if path == "":
+ if xbmcplugin.addDirectoryItem(handle = id, url = info["FileName"], listitem
= liz, isFolder = folder, totalItems = total):
+ return 1
else:
- liz.setPath(path)
- try:
- xbmcplugin.setResolvedUrl(handle = int(sys.argv[1]), succeeded = True,
listitem = liz)
- except:
- message("Boo, couldn't play.")
+ return 0
+ else:
+ liz.setPath(path)
+ try:
+ xbmcplugin.setResolvedUrl(handle = id, succeeded = True, listitem = liz)
+ except:
+ message("Boo, couldn't play.")
-def addsorting(methods, mediacontent = ""):
+def addsorting(id, methods, mediacontent = ""):
import xbmcplugin
for method in methods:
if method == "unsorted":
- xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod =
xbmcplugin.SORT_METHOD_UNSORTED)
+ xbmcplugin.addSortMethod(handle = id, sortMethod =
xbmcplugin.SORT_METHOD_UNSORTED)
elif method == "count":
- xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod =
xbmcplugin.SORT_METHOD_PROGRAM_COUNT)
+ xbmcplugin.addSortMethod(handle = id, sortMethod =
xbmcplugin.SORT_METHOD_PROGRAM_COUNT)
elif method == "date":
- xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod =
xbmcplugin.SORT_METHOD_DATE)
+ xbmcplugin.addSortMethod(handle = id, sortMethod =
xbmcplugin.SORT_METHOD_DATE)
elif method == "label":
- xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod =
xbmcplugin.SORT_METHOD_LABEL)
+ xbmcplugin.addSortMethod(handle = id, sortMethod =
xbmcplugin.SORT_METHOD_LABEL)
elif method == "runtime":
- xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod =
xbmcplugin.SORT_METHOD_VIDEO_RUNTIME)
+ xbmcplugin.addSortMethod(handle = id, sortMethod =
xbmcplugin.SORT_METHOD_VIDEO_RUNTIME)
elif method == "episode":
- xbmcplugin.addSortMethod(handle = int(sys.argv[1]), sortMethod =
xbmcplugin.SORT_METHOD_EPISODE)
+ xbmcplugin.addSortMethod(handle = id, sortMethod =
xbmcplugin.SORT_METHOD_EPISODE)
if mediacontent <> "":
- xbmcplugin.setContent(handle = int(sys.argv[1]), content = mediacontent)
- xbmcplugin.endOfDirectory(int(sys.argv[1]))
+ xbmcplugin.setContent(handle = id, content = mediacontent)
+ xbmcplugin.endOfDirectory(id)
diff --git a/plugin.video.nz.ondemand/tv3.py b/plugin.video.nz.ondemand/tv3.py
index 5f2aefe..4007060 100644
--- a/plugin.video.nz.ondemand/tv3.py
+++ b/plugin.video.nz.ondemand/tv3.py
@@ -1,3 +1,7 @@
+# 3 News
+# mms://content.mediaworks.co.nz/tv/News/TOPSTORIES.300k
+
+
import tools, urllib, string, re, sys, time, xbmcaddon
from BeautifulSoup import BeautifulSoup, SoupStrainer
@@ -13,6 +17,8 @@ tv3_urls["BASE1"] = 'http://ondemand'
tv3_urls["BASE2"] = 'co.nz'
tv3_urls["RTMP1"] = 'rtmpe://nzcontent.mediaworks.co.nz'
tv3_urls["RTMP2"] = '_definst_/mp4:'
+tv3_urls["HTTP1"] = 'http://flash.mediaworks.co.nz'
+tv3_urls["HTTP2"] = 'streams/_definst_//'
tv3_urls["VIDEO1"] = 'tabid'
tv3_urls["VIDEO2"] = 'articleID'
tv3_urls["VIDEO3"] = 'MCat'
@@ -50,9 +56,9 @@ def dateduration(ad): #Search a tag for aired date and video
duration
info = dict()
aired = re.search("([0-9]{2}/[0-9]{2}/[0-9]{2})", ad.contents[1])
if aired:
- #info["Aired"] = time.strftime("%Y-%m-%d",
time.strptime(aired.group(1),"%d/%m/%y"))
- info["Aired"] = tools.xbmcdate(aired.group(1))
- info["Date"] = info["Aired"]
+ #info["Premiered"] = time.strftime("%Y-%m-%d",
time.strptime(aired.group(1),"%d/%m/%y"))
+ info["Premiered"] = tools.xbmcdate(aired.group(1))
+ info["Date"] = info["Premiered"]
#info["Year"] = int(time.strftime("%Y", info["Aired"]))
duration = re.search("\(([0-9]+:[0-9]{2})\)", ad.contents[1])
if duration:
@@ -71,6 +77,11 @@ def rtmp(provider): #Build an RTMP URL for a given site
(c4tv or tv3)
else:
return "%s/%s/%s" % (tv3_urls["RTMP1"], provider, tv3_urls["RTMP2"])
+def http(provider): #Build an RTMP URL for a given site (c4tv or tv3)
+ if provider == "c4tv":
+ return "%s/%s/%s" % (tv3_urls["HTTP1"], "c4", tv3_urls["HTTP2"])
+ else:
+ return "%s/%s/%s" % (tv3_urls["HTTP1"], provider, tv3_urls["HTTP2"])
@@ -82,13 +93,14 @@ def INDEX_FOLDERS(): #Create a list of top level folders
for the hierarchy view
folders["1"] = localize(30053) # "Channels"
folders["2"] = localize(30054) # "Genres"
#folders["3"] = localize(30055) # "Shows"
+ folders["4"] = localize(30065) # "Search"
count = len(folders)
for index in folders:
info = tools.defaultinfo(1)
info["Title"] = folders[index]
info["Count"] = int(index)
info["FileName"] = "%s?ch=TV3&folder=%s" % (sys.argv[0], folders[index])
- tools.addlistitem(info, tv3_urls["Fanart"], 1, count)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1, count)
def INDEX_FOLDER(folder): #Create second level folder for the hierarchy view,
only showing items for the selected top level folder
infopages = dict()
@@ -113,9 +125,11 @@ def INDEX_FOLDER(folder): #Create second level folder for
the hierarchy view, on
info["Title"] = infopages[index][3]
info["Count"] = int(index)
info["FileName"] = "%s?ch=TV3&cat=%s&catid=%s" % (sys.argv[0],
infopages[index][2], infopages[index][0])
- tools.addlistitem(info, tv3_urls["Fanart"], 1)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1)
if folder == "Shows":
INDEX_SHOWS("tv3")
+ elif folder == "Search":
+ INDEX_SEARCH()
def INDEX(provider): #Create a list of top level folders as scraped from TV3's
website
doc = tools.gethtmlpage("%s/tabid/56/default.aspx" % (base_url(provider)))
#Get our HTML page with a list of video categories
@@ -143,12 +157,20 @@ def INDEX(provider): #Create a list of top level folders
as scraped from TV3's w
info["Count"] = count
count += 1
info["FileName"] = "%s?ch=TV3&cat=%s&catid=%s" % (sys.argv[0], cat, catid)
- tools.addlistitem(info, tv3_urls["Fanart"], 1)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1)
else:
sys.stderr.write("Couldn't find any categories")
else:
sys.stderr.write("Couldn't get index webpage")
+def INDEX_SEARCH():
+ import xbmc
+ keyboard = xbmc.Keyboard("Away", "Search for a Video")
+ #keyboard.setHiddenInput(False)
+ keyboard.doModal()
+ if keyboard.isConfirmed():
+ SHOW_SEARCH("58", keyboard.getText())
+
def INDEX_SHOWS(provider): #Create a second level list of TV Shows from a TV3
webpage
#doc = tools.gethtmlpage("%s/Shows/tabid/64/Default.aspx" %
("http://www.tv3.co.nz")) #Get our HTML page with a list of video categories
doc = tools.gethtmlpage("%s/Shows.aspx" % ("http://www.tv3.co.nz")) #Get our
HTML page with a list of video categories
@@ -169,7 +191,7 @@ def INDEX_SHOWS(provider): #Create a second level list of
TV Shows from a TV3 we
info["FileName"] = "%s?ch=TV3&cat=%s&title=%s&catid=%s" % (sys.argv[0],
"shows", urllib.quote(info["Title"]), urllib.quote(catid))
info["Count"] = count
count += 1
- tools.addlistitem(info, tv3_urls["Fanart"], 1)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 1)
else:
sys.stderr.write("Couldn't find any videos in list")
else:
@@ -215,7 +237,7 @@ def add_item_div(soup, provider, count): #Scrape items from
a div-style HTML pag
if plot.strip() <> "":
info["Plot"] = tools.unescape(plot.strip())
info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0],
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)),
urllib.quote(str(info)))
- tools.addlistitem(info, tv3_urls["Fanart"], 0)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
def add_item_show(soup, provider, count, title): #Scrape items from a
show-style HTML page
info = tools.defaultinfo()
@@ -247,7 +269,7 @@ def add_item_show(soup, provider, count, title): #Scrape
items from a show-style
info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0],
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)),
urllib.quote(str(info)))
elif urltype == "other":
info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0],
urllib.quote(link["href"]), urllib.quote(str(info)))
- tools.addlistitem(info, tv3_urls["Fanart"], 0)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
def add_item_table(soup, provider, count, title): #Scrape items from a
table-style HTML page
info = tools.defaultinfo()
@@ -265,38 +287,60 @@ def add_item_table(soup, provider, count, title): #Scrape
items from a table-sty
href = re.search("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" %
(base_url("tv3"), tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]),
link['href'])
if href:
info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0],
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)),
urllib.quote(str(info)))
- tools.addlistitem(info, tv3_urls["Fanart"], 0)
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
def add_item_atoz(soup, provider, count): #Scrape items from an AtoZ-style
HTML page
baseurl = base_url(provider)
info = tools.defaultinfo()
info["Studio"] = provider
- link = soup.h5.find("a", attrs={"href": re.compile(baseurl)})
- if link:
- infoitems = {}
- href = re.match("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % (baseurl,
tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), link['href'])
- if href:
- if link.string:
- title = link.string.strip()
- if title <> "":
- info["TVShowTitle"] = title
- image = soup.find("img", attrs={"src": re.compile(tv3_urls["IMG_RE2"]),
"title": True})
- if image:
- info.update(tools.imageinfo(image))
- info.update(seasonepisode(soup.contents[4]))
- info["Title"] = tools.itemtitle(info["TVShowTitle"], info["PlotOutline"])
- plot = soup.find("span", attrs={"class": "lite"})
- if plot.string:
- cleanedplot = plot.string.strip()
- if cleanedplot:
- info["Plot"] = tools.unescape(cleanedplot)
- info["Count"] = count
- info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0],
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)),
urllib.quote(str(info)))
- infoitems[info["Title"]] = info
- #tools.addlistitem(info, tv3_urls["Fanart"], 0)
- tools.addlistitems(infoitems, tv3_urls["Fanart"], 0)
-
-
+ if soup.find('h5'):
+ link = soup.h5.find("a", attrs={"href": re.compile(baseurl)})
+ if link:
+ infoitems = {}
+ href = re.match("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % (baseurl,
tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), link['href'])
+ if href:
+ if link.string:
+ title = link.string.strip()
+ if title <> "":
+ info["TVShowTitle"] = title
+ image = soup.find("img", attrs={"src": re.compile(tv3_urls["IMG_RE2"]),
"title": True})
+ if image:
+ info.update(tools.imageinfo(image))
+ info.update(seasonepisode(soup.contents[4]))
+ info["Title"] = tools.itemtitle(info["TVShowTitle"], info["PlotOutline"])
+ plot = soup.find("span", attrs={"class": "lite"})
+ if plot.string:
+ cleanedplot = plot.string.strip()
+ if cleanedplot:
+ info["Plot"] = tools.unescape(cleanedplot)
+ info["Count"] = count
+ info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0],
"%s,%s,%s,%s" % (href.group(1), href.group(2), href.group(3), href.group(4)),
urllib.quote(str(info)))
+ infoitems[info["Title"]] = info
+ #tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
+ tools.addlistitems(infoitems, tv3_urls["Fanart"], 0)
+
+def add_item_search(soup, provider, count): #Scrape items from a table-style
HTML page
+ baseurl = base_url(provider)
+ info = tools.defaultinfo()
+ info["Studio"] = provider
+ title = soup.find("div", attrs={"class": 'catTitle'})
+ if title:
+ info["TVShowTitle"] = title.a.string.strip()
+ href = re.match("%s/(.*?)/%s/([0-9]+)/%s/([0-9]+)/%s/([0-9]+)/" % (baseurl,
tv3_urls["VIDEO1"], tv3_urls["VIDEO2"], tv3_urls["VIDEO3"]), title.a['href'])
+ image = soup.find("img")
+ if image:
+ info.update(tools.imageinfo(image))
+ ep = soup.find("div", attrs={"class": 'epTitle'})
+ if ep:
+ if ep.a:
+ info.update(seasonepisode(ep.a))
+ date = soup.find("div", attrs={"class": 'epDate'})
+# if date:
+# sys.stderr.write(date.span[1].string.strip())
+ info["Title"] = tools.itemtitle(info["TVShowTitle"], info["PlotOutline"])
+ info["Count"] = count
+ info["FileName"] = "%s?ch=TV3&id=%s&info=%s" % (sys.argv[0], "%s,%s,%s,%s" %
(href.group(1), href.group(2), href.group(3), href.group(4)),
urllib.quote(str(info)))
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0)
@@ -326,6 +370,23 @@ def SHOW_EPISODES(catid, provider): #Show video items from
a normal TV3 webpage
else:
sys.stderr.write("Couldn't get videos webpage")
+def SHOW_SEARCH(catid, searchterm): #Show video items from a normal TV3 webpage
+ doc = tools.gethtmlpage("%s/search/tabid/%s/Default.aspx?amq=%s" %
(base_url("tv3"), catid, searchterm.replace(" ", "+")))
+ if doc:
+ a_tag=SoupStrainer('div')
+ html_atag = BeautifulSoup(doc, parseOnlyThese = a_tag)
+ programs = html_atag.findAll(attrs={"class": "results"})
+ if len(programs) > 0:
+ count = 0
+ for soup in programs:
+ provider = "tv3"
+ add_item_search(soup, "tv3", count)
+ count += 1
+ else:
+ sys.stderr.write("Couldn't find any videos")
+ else:
+ sys.stderr.write("Couldn't get videos webpage")
+
def SHOW_SHOW(catid, title, provider): #Show video items from a TV Show style
TV3 webpage
baseurl = ""
if catid[:4] <> "http":
@@ -397,42 +458,57 @@ def RESOLVE(id, info): #Scrape a page for a given
OnDemand video and build an RT
videoplayer =
re.search('swfobject.embedSWF\("(http://static.mediaworks.co.nz/(.*?).swf)',
doc)
if videoplayer:
auth = re.search('random_num = "([0-9]+)";', doc)
- site = re.search("var pageloc='TV-(FOUR|TV3)-Video-OnDemand-", doc)
- if site.group(1) == 'TV3':
- realstudio = 'tv3'
- else:
- realstudio = 'c4'
+ realstudio = 'tv3'
+ site = re.search("var pageloc='TV-(FOUR|TV3)-Video(Extras)?-OnDemand-",
doc)
+ if site:
+ if site.group(1) <> 'TV3':
+ realstudio = 'c4'
playlist=list()
- #if addon.getSetting('tv3_showads') == 'true':
+ #if addon.getSetting('TV3_showads') == 'true':
#playlist.append(ad)
- if re.search('flashvars.fifteenHundred = "yes";', doc):
+ fifteen = re.search('flashvars.fifteenHundred = "yes";', doc)
+ seven = re.search('flashvars.sevenHundred = "yes";', doc)
+ if fifteen and seven:
LowQuality = "330K"
MediumQuality = "700K"
HighQuality = "1500K"
- elif re.search('flashvars.sevenHundred = "yes";', doc):
+ elif fifteen:
+ LowQuality = "128K"
+ MediumQuality = "330K"
+ HighQuality = "1500K"
+ elif seven:
LowQuality = "128K"
MediumQuality = "330K"
HighQuality = "700K"
- #elif re.search('flashvars.highEnd = "true";', doc):
+ else:
+ LowQuality = "128K"
+ MediumQuality = "330K"
+ HighQuality = "330K"
+ #elif re.search('flashvars.highEnd = "true";', doc):
quality = HighQuality
quality2 = MediumQuality
quality3 = LowQuality
- if addon.getSetting('tv3_quality') == "0": #Low
+ if addon.getSetting('TV3_quality') == "Low":
quality = LowQuality
quality3 = HighQuality
- elif addon.getSetting('tv3_quality') == "1": #Medium
+ elif addon.getSetting('TV3_quality') == "Medium":
quality = MediumQuality
quality2 = HighQuality
- #rtmpurl = '%s%s/%s/%s_%s' % (rtmp(info["Studio"]), videoid.group(1),
videoid.group(2), urllib.quote(videoid.group(3)), quality)
- rtmpurl = '%s%s/%s/%s_%s' % (rtmp(realstudio), videoid.group(1),
videoid.group(2), urllib.quote(videoid.group(3)), quality)
- sys.stderr.write("RTMP URL: %s" % (rtmpurl))
- #swfverify = ' swfUrl=%s swfVfy=true' % (videoplayer.group(1))
- if auth:
- swfverify = ' swfUrl=%s?rnd=%s pageUrl=%s swfVfy=true' %
(videoplayer.group(1), auth.group(1), pageUrl)
+ geo = re.search('var geo= "(no|geo)";', doc)
+ if (geo.group(1) == 'no'):
+ url = '%s%s/%s/%s_%s.%s' % (http(realstudio), videoid.group(1),
videoid.group(2), urllib.quote(videoid.group(3)), quality, "mp4")
else:
- swfverify = ' swfUrl=%s pageUrl=%s swfVfy=true' % (videoplayer.group(1),
pageUrl)
+ #swfverify = ' swfUrl=%s swfVfy=true' % (videoplayer.group(1))
+ #rtmpurl = '%s%s/%s/%s_%s' % (rtmp(info["Studio"]), videoid.group(1),
videoid.group(2), urllib.quote(videoid.group(3)), quality)
+ url = '%s%s/%s/%s_%s' % (rtmp(realstudio), videoid.group(1),
videoid.group(2), urllib.quote(videoid.group(3)), quality)
+ if auth:
+ swfverify = ' swfUrl=%s?rnd=%s pageUrl=%s swfVfy=true' %
(videoplayer.group(1), auth.group(1), pageUrl)
+ else:
+ swfverify = ' swfUrl=%s pageUrl=%s swfVfy=true' % (videoplayer.group(1),
pageUrl)
+ url += swfverify
+ sys.stderr.write("URL: %s" % (url))
#sys.stderr.write("Flash Player: %s" % (videoplayer.group(1)))
- playlist.append(rtmpurl + swfverify)
+ playlist.append(url)
if len(playlist) > 1:
uri = constructStackURL(playlist)
elif len(playlist) == 1:
@@ -442,8 +518,8 @@ def RESOLVE(id, info): #Scrape a page for a given OnDemand
video and build an RT
#liz.setProperty("IsPlayable", "true")
#liz.setPath(uri)
#xbmcplugin.setResolvedUrl(handle = int(sys.argv[1]), succeeded = True,
listitem = liz)
- info["FileName"] = rtmpurl
- tools.addlistitem(info, tv3_urls["Fanart"], 0, 1, uri)
+ info["FileName"] = url
+ tools.addlistitem(int(sys.argv[1]), info, tv3_urls["Fanart"], 0, 1, uri)
else:
sys.stderr.write("Couldn't get video player URL")
else:
diff --git a/plugin.video.nz.ondemand/tvnz.py b/plugin.video.nz.ondemand/tvnz.py
index f13394f..8509c04 100644
--- a/plugin.video.nz.ondemand/tvnz.py
+++ b/plugin.video.nz.ondemand/tvnz.py
@@ -10,7 +10,7 @@ FANART_URL = 'resources/images/TVNZ.jpg'
MIN_BITRATE = 400000
def INDEX():
- link = tools.gethtmlpage("%s/content/ps3_navigation/ps3_xml_skin.xml" %
(BASE_URL))
+ link = tools.gethtmlpage("%s/content/ps3_navigation/ps3_xml_skin.xml" %
(BASE_URL), "ps3")
count = 0
for stat in
minidom.parseString(link).documentElement.getElementsByTagName('MenuItem'):
type = stat.attributes["type"].value
@@ -22,10 +22,10 @@ def INDEX():
info["Count"] = count
count += 1
info["FileName"] = "%s?ch=TVNZ&type=%s&id=%s" % (sys.argv[0], type,
m.group(1))
- tools.addlistitem(info, FANART_URL, 1)
+ tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 1)
def SHOW_LIST(id):
- link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id))
+ link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id),
"ps3")
node = minidom.parseString(link).documentElement
urls = list()
count = 0
@@ -39,15 +39,14 @@ def SHOW_LIST(id):
info = tools.defaultinfo(1)
info["FileName"] = "%s?ch=TVNZ&type=singleshow&id=%s_episodes_group" %
(sys.argv[0], se.group(1))
info["Title"] = show.attributes["title"].value
- info["Thumb"] = show.attributes["src"].value
info["Count"] = count
count += 1
infoitems[info["Title"]] = info
- tools.addlistitems(infoitems, FANART_URL, 1)
+ tools.addlistitems(int(sys.argv[1]), infoitems, FANART_URL, 1)
def SHOW_DISTRIBUTORS(id):
- link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id))
+ link = tools.gethtmlpage("%s/content/%s/ps3_xml_skin.xml" % (BASE_URL, id),
"ps3")
node = minidom.parseString(link).documentElement
print node.toxml().encode('latin1')
urls = list()
@@ -63,18 +62,18 @@ def SHOW_EPISODES(id):
except:
pass
try:
- link = tools.gethtmlpage("%s/content/%s_extras_group/ps3_xml_skin.xml" %
(BASE_URL, id[:-15]))
+ link = tools.gethtmlpage("%s/content/%s_extras_group/ps3_xml_skin.xml" %
(BASE_URL, id[:-15]), "ps3")
node = minidom.parseString(link).documentElement
if node:
info = tools.defaultinfo(1)
info["FileName"] = "%s?ch=TVNZ&type=shows&id=%s_extras_group" %
(sys.argv[0], id[:-15])
info["Title"] = "Extras"
- tools.addlistitem(info, FANART_URL, 1)
+ tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 1)
except:
return
def getEpisodes(id, url):
- link = tools.gethtmlpage(url)
+ link = tools.gethtmlpage(url, "ps3")
node = minidom.parseString(link).documentElement
for ep in node.getElementsByTagName('Episode'):
addEpisode(ep)
@@ -122,7 +121,7 @@ def getShow(show):
# videos = 0
#channel = show.attributes["channel"].value
#url = "%s?ch=TVNZ&type=singleshow&id=%s_episodes_group" %
(sys.argv[0],show_id)
- tools.addlistitem(info, FANART_URL, 1)
+ tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 1)
def getEpisode(ep):
info = tools.defaultinfo(0)
@@ -142,7 +141,7 @@ def getEpisode(ep):
info["Season"] = 0
info["Episode"] = 1
info["Date"] = getDate(extra[1])
- info["Aired"] = extra[1]
+ info["Premiered"] = extra[1]
info["Duration"] = getDuration(extra[2])
elif len(extra) == 2:
info["Duration"] = getDuration(extra[1])
@@ -166,13 +165,13 @@ def getEpisode(ep):
def addEpisode(ep):
#url,liz = getEpisode(ep)
#xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=url,listitem=liz,isFolder=False)
- tools.addlistitem(getEpisode(ep), FANART_URL, 0)
+ tools.addlistitem(int(sys.argv[1]), getEpisode(ep), FANART_URL, 0)
def getAdvert(chapter):
advert = chapter.getElementsByTagName('ref')
if len(advert):
# fetch the link - it'll return a .asf file
- link = tools.gethtmlpage(advert[0].attributes['src'].value)
+ link = tools.gethtmlpage(advert[0].attributes['src'].value, "ps3")
node = minidom.parseString(link).documentElement
# grab out the URL to the actual flash ad
for flv in node.getElementsByTagName('FLV'):
@@ -180,12 +179,12 @@ def getAdvert(chapter):
return(flv.firstChild.wholeText)
def RESOLVE(id, info):
- link = tools.gethtmlpage("%s/content/%s/ta_ent_smil_skin.smil?platform=PS3" %
(BASE_URL, id))
+ link = tools.gethtmlpage("%s/content/%s/ta_ent_smil_skin.smil?platform=PS3" %
(BASE_URL, id), "ps3")
node = minidom.parseString(link).documentElement
urls=list()
for chapter in node.getElementsByTagName('seq'):
# grab out the advert link
- if addon.getSetting('tvnz_showads') == 'true':
+ if addon.getSetting('TVNZ_showads') == 'true':
ad = getAdvert(chapter)
if len(ad) > 0:
urls.append(ad)
@@ -198,9 +197,9 @@ def RESOLVE(id, info):
if bitrate < minbitrate:
minbitrate = bitrate
requiredbitrate = 700000 #Medium = 700000
- if addon.getSetting('tvnz_quality') == "2": #High = 1500000
+ if addon.getSetting('TVNZ_quality') == "High": #High = 1500000
requiredbitrate = maxbitrate
- elif addon.getSetting('tvnz_quality') == "0": #Low = 300000
+ elif addon.getSetting('TVNZ_quality') == "Low": #Low = 300000
requiredbitrate = minbitrate
for video in chapter.getElementsByTagName('video'):
bitrate = int(video.attributes["systemBitrate"].value)
@@ -219,9 +218,8 @@ def RESOLVE(id, info):
conn = " conn=S:-720"
urls.append(rtmp_url + playpath + flashversion + swfverify + conn)
sys.stderr.write("RTMP URL: " + rtmp_url + playpath + flashversion +
swfverify + conn)
- #tools.message("RTMP URL: " + rtmp_url + playpath + flashversion +
swfverify + conn)
if len(urls) > 1:
uri = tools.constructStackURL(urls)
elif len(urls) == 1:
uri = urls[0]
- tools.addlistitem(info, FANART_URL, 0, 1, uri)
+ tools.addlistitem(int(sys.argv[1]), info, FANART_URL, 0, 1, uri)
diff --git a/plugin.video.nz.ondemand/ziln.py b/plugin.video.nz.ondemand/ziln.py
index 23e0eee..62b375a 100644
--- a/plugin.video.nz.ondemand/ziln.py
+++ b/plugin.video.nz.ondemand/ziln.py
@@ -2,6 +2,9 @@ import tools, urllib, string, re, sys, time, xbmcaddon,
xbmcgui, xbmcplugin
from BeautifulSoup import BeautifulSoup, SoupStrainer, BeautifulStoneSoup
from xml.dom import minidom
+addon = xbmcaddon.Addon(id = sys.argv[0][9:-1])
+localize = addon.getLocalizedString
+
ziln_urls = dict()
ziln_urls["ZILN"] = 'http://www.ziln.co.nz'
ziln_urls["RTMP1"] = 'rtmp://flash1.e-cast.co.nz'
@@ -9,7 +12,21 @@ ziln_urls["RTMP2"] = 'ecast'
ziln_urls["RTMP3"] = 'mp4:/ziln'
ziln_urls["Fanart"] = 'resources/images/Ziln.jpg'
-def INDEX(type, urlext):
+def INDEX():
+ info = tools.defaultinfo(1)
+ info["Title"] = localize(30053)
+ info["Count"] = 1
+ #info["Thumb"] = "DefaultVideoPlaylists.png"
+ info["FileName"] = "%s?ch=Ziln&folder=channels" % sys.argv[0]
+ tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], 1)
+ info = tools.defaultinfo(1)
+ info["Title"] = localize(30065)
+ info["Count"] = 2
+ info["Thumb"] = "DefaultVideoPlaylists.png"
+ info["FileName"] = "%s?ch=Ziln&folder=search" % sys.argv[0]
+ tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], 1)
+
+def PROGRAMMES(type, urlext):
if type == "channel":
folder = 1
url = ziln_urls["ZILN"]
@@ -17,9 +34,12 @@ def INDEX(type, urlext):
folder = 0
#url = "%s/channel/%s" % (ziln_urls["ZILN"], urlext)
url = "%s/assets/php/slider.php?channel=%s" % (ziln_urls["ZILN"], urlext)
+ elif type == "search":
+ folder = 0
+ url = "%s/search?search_keyword=%s" % (ziln_urls["ZILN"], urlext.replace("
", "+"))
doc = tools.gethtmlpage(url)
if doc:
- if type == "channel":
+ if type == "channel" or type == "search":
div_tag = SoupStrainer('div')
html_divtag = BeautifulSoup(doc, parseOnlyThese = div_tag)
programmes = html_divtag.findAll(attrs={'class' : 'programmes'})
@@ -27,73 +47,47 @@ def INDEX(type, urlext):
div_tag = SoupStrainer('body')
html_divtag = BeautifulSoup(doc, parseOnlyThese = div_tag)
programmes = html_divtag.findAll(attrs={'class' : 'slider slider-small'})
+ if type == "search":
+ type = "video"
if len(programmes) > 0:
for programme in programmes:
list = programme.find('ul')
- listitems = list.findAll('li')
- if len(listitems) > 0:
- count = 0
- for listitem in listitems:
- link = listitem.find('a', attrs={'href' : re.compile("^/%s/" % type)})
- if link.img:
- if re.search("assets/images/%ss/" % type, link.img["src"]):
- info = tools.defaultinfo(1)
- #info["Title"] = link.img["alt"]
- if listitem.p.string:
- info["Title"] = listitem.p.string.strip()
- else:
- info["Title"] = link.img["alt"]
- info["Thumb"] = "%s/%s" % (ziln_urls["ZILN"], link.img["src"])
- info["Count"] = count
- count += 1
- #channelurl = re.search("/%s/(.*)" % type, link["href"]).group(1)
- channelurl = re.search("assets/images/%ss/([0-9]*?)-mini.jpg" % type,
link.img["src"]).group(1)
- #infourl = "&info=%s" % urllib.quote(str(info))
- info["FileName"] = "%s?ch=Ziln&%s=%s" % (sys.argv[0], type,
urllib.quote(channelurl))
- tools.addlistitem(info, ziln_urls["Fanart"], folder)
+ if list:
+ listitems = list.findAll('li')
+ if len(listitems) > 0:
+ count = 0
+ for listitem in listitems:
+ link = listitem.find('a', attrs={'href' : re.compile("^/%s/" % type)})
+ if link.img:
+ if re.search("assets/images/%ss/" % type, link.img["src"]):
+ info = tools.defaultinfo(1)
+ #info["Title"] = link.img["alt"]
+ if listitem.p.string:
+ info["Title"] = listitem.p.string.strip()
+ else:
+ info["Title"] = link.img["alt"]
+ info["Thumb"] = "%s/%s" % (ziln_urls["ZILN"], link.img["src"])
+ info["Count"] = count
+ count += 1
+ #channelurl = re.search("/%s/(.*)" % type, link["href"]).group(1)
+ channelurl = re.search("assets/images/%ss/([0-9]*?)-mini.jpg" % type,
link.img["src"]).group(1)
+ #infourl = "&info=%s" % urllib.quote(str(info))
+ info["FileName"] = "%s?ch=Ziln&%s=%s" % (sys.argv[0], type,
urllib.quote(channelurl))
+ tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], folder)
+ else:
+ sys.stderr.write("Search returned no results")
else:
sys.stderr.write("Couldn't find any programs")
else:
sys.stderr.write("Couldn't get page")
-
-def PROGRAMMES(type, urlext):
- if type == "channel":
- folder = 1
- url = ziln_urls["ZILN"]
- elif type == "video":
- folder = 0
- url = "%s/channel/%s" % (ziln_urls["ZILN"], urlext)
- doc = tools.gethtmlpage(url)
- if doc:
- div_tag = SoupStrainer('div')
- html_divtag = BeautifulSoup(doc, parseOnlyThese = div_tag)
- programmes = html_divtag.findAll(attrs={'class' : 'programmes'})
- if len(programmes) > 0:
- for programme in programmes:
- iframe = programme.find('iframe')
- url = "%s%s" % (ziln_urls["ZILN"], iframe["src"])
- doc = tools.gethtmlpage(url)
- listitems = list.findAll('li')
- if len(listitems) > 0:
- count = 0
- for listitem in listitems:
- link = listitem.find('a', attrs={'href' : re.compile("^/%s/" % type)})
- if link.img:
- if re.search("assets/images/%ss/" % type, link.img["src"]):
- info = tools.defaultinfo(1)
- #info["Title"] = link.img["alt"]
- if listitem.p.string:
- info["Title"] = listitem.p.string.strip()
- else:
- info["Title"] = link.img["alt"]
- #info["Title"] = listitem.find('p').contents[0]
- info["Thumb"] = "%s/%s" % (ziln_urls["ZILN"], link.img["src"])
- info["Count"] = count
- count += 1
- channelurl = re.search("/%s/(.*)" % type, link["href"]).group(1)
- #infourl = "&info=%s" % urllib.quote(str(info))
- info["FileName"] = "%s?ch=Ziln&%s=%s" % (sys.argv[0], type,
urllib.quote(channelurl))
- tools.addlistitem(info, ziln_urls["Fanart"], folder)
+
+def SEARCH():
+ import xbmc
+ keyboard = xbmc.Keyboard("", "Search for a Video")
+ #keyboard.setHiddenInput(False)
+ keyboard.doModal()
+ if keyboard.isConfirmed():
+ PROGRAMMES("search", keyboard.getText())
def RESOLVE(index): #, info
doc = tools.gethtmlpage("%s/playlist/null/%s" % (ziln_urls["ZILN"], index))
@@ -106,7 +100,7 @@ def RESOLVE(index): #, info
info["Thumb"] = soup.find('jwplayer:image').contents[0]
info["Plot"] = soup.find('description').contents[0]
uri = "%s%s" % (ziln_urls["ZILN"], soup.find('media:content')["url"])
- tools.addlistitem(info, ziln_urls["Fanart"], 0, 1, uri)
+ tools.addlistitem(int(sys.argv[1]), info, ziln_urls["Fanart"], 0, 1, uri)
#liz=xbmcgui.ListItem(path=uri)
#return(xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True,
listitem=liz))
#dom.getElementsByTagName("title")[0]
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=b906fb03b2c3d50480d1370e2bd994687fb81725
-----------------------------------------------------------------------
Summary of changes:
.../LICENSE.txt | 0
.../addon.xml | 40 ++--
plugin.video.hgtv/default.py | 127 +++++++++++++
plugin.video.hgtv/icon.png | Bin 0 -> 30354 bytes
plugin.video.nz.ondemand/addon.xml | 4 +-
plugin.video.nz.ondemand/changelog.txt | 19 ++
plugin.video.nz.ondemand/default.py | 76 +++++---
plugin.video.nz.ondemand/icon.png | Bin 39151 -> 56798 bytes
plugin.video.nz.ondemand/isky.py | 5 +
plugin.video.nz.ondemand/parliament.py | 23 +++
.../resources/images/Parliament.jpg | Bin 0 -> 164069 bytes
.../resources/images/Parliament.png | Bin 0 -> 11742 bytes
.../resources/images/Shine.jpg | Bin 0 -> 65604 bytes
.../resources/images/Shine.png | Bin 0 -> 9627 bytes
plugin.video.nz.ondemand/resources/images/iSKY.jpg | Bin 0 -> 87458 bytes
plugin.video.nz.ondemand/resources/images/iSKY.png | Bin 0 -> 7616 bytes
.../resources/images/icon-new.png | Bin 0 -> 34418 bytes
.../resources/language/English/strings.xml | 5 +
plugin.video.nz.ondemand/resources/settings.xml | 25 ++-
plugin.video.nz.ondemand/shine.py | 17 ++
plugin.video.nz.ondemand/tools.py | 64 ++++----
plugin.video.nz.ondemand/tv3.py | 190 ++++++++++++++------
plugin.video.nz.ondemand/tvnz.py | 36 ++--
plugin.video.nz.ondemand/ziln.py | 120 ++++++-------
plugin.video.youtube/YouTubeCore.py | 10 +-
plugin.video.youtube/YouTubeNavigation.py | 21 ++-
plugin.video.youtube/addon.xml | 2 +-
plugin.video.youtube/changelog.txt | 6 +
plugin.video.youtube/default.py | 2 +-
.../language/Portuguese (Brazil)/strings.xml | 184 +++++++++++++++++++
30 files changed, 737 insertions(+), 239 deletions(-)
copy {plugin.audio.dr.dk.netradio => plugin.video.hgtv}/LICENSE.txt (100%)
copy {plugin.video.youtube => plugin.video.hgtv}/addon.xml (60%)
create mode 100644 plugin.video.hgtv/default.py
create mode 100644 plugin.video.hgtv/icon.png
create mode 100644 plugin.video.nz.ondemand/isky.py
create mode 100644 plugin.video.nz.ondemand/parliament.py
create mode 100644 plugin.video.nz.ondemand/resources/images/Parliament.jpg
create mode 100644 plugin.video.nz.ondemand/resources/images/Parliament.png
create mode 100644 plugin.video.nz.ondemand/resources/images/Shine.jpg
create mode 100644 plugin.video.nz.ondemand/resources/images/Shine.png
create mode 100644 plugin.video.nz.ondemand/resources/images/iSKY.jpg
create mode 100644 plugin.video.nz.ondemand/resources/images/iSKY.png
create mode 100644 plugin.video.nz.ondemand/resources/images/icon-new.png
create mode 100644 plugin.video.nz.ondemand/shine.py
create mode 100644 plugin.video.youtube/resources/language/Portuguese
(Brazil)/strings.xml
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software
be a part of the solution? Download the Intel(R) Manageability Checker
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons