📄 chn_rtl.py
字号:
import xbmc, xbmcgui
import sys, re, urllib, os.path, math
#===============================================================================
# Make global object available
#===============================================================================
import common
import config
import controls
import contextmenu
import chn_class
logFile = sys.modules['__main__'].globalLogFile
uriHandler = sys.modules['__main__'].globalUriHandler
#===============================================================================
# register the channels
#===============================================================================
if (sys.modules.has_key('progwindow')):
register = sys.modules['progwindow']
elif (sys.modules.has_key('plugin')):
register = sys.modules['plugin']
#register.channelButtonRegister.append(105)
register.channelRegister.append('chn_rtl.Channel("uzg-channelwindow.xml", config.rootDir, config.skinFolder)')
#===============================================================================
# main Channel Class
#===============================================================================
class Channel(chn_class.Channel):
#===============================================================================
# define class variables
#===============================================================================
def InitialiseVariables(self):
"""
Used for the initialisation of user defined parameters. All should be
present, but can be adjusted
"""
# call base function first to ensure all variables are there
chn_class.Channel.InitialiseVariables(self)
self.mainListUri = "http://www.rtl.nl//system/video/menu/videomenu.xml"
self.icon = "rtlthumb.png"
self.iconLarge = "rtllarge.png"
self.noImage = "rtlimage.png"
self.channelName = "RTL 4,5&7"
self.channelDescription = "Uitzendingen van de zenders RTL 4,5,7 & 8."
self.moduleName = "chn_rtl.py"
self.maxXotVersion = "3.0.0"
self.backgroundImage = "background-rtl.png"
self.backgroundImage16x9 = "background-rtl-16x9.png"
self.requiresLogon = False
self.sortOrder = 5
self.episodeItemRegex = '<li class="folder" rel="([^"]+)videomenu.xml">([^<]+)</li>'
self.videoItemRegex = '<li class="video" rel="([^"]*/)([^"]+)">([^<]+)</li>'
self.folderItemRegex = '<li class="folder" rel="([^"]*/)([^"]+)">([^<]+)</li>'
#self.mediaUrlRegex = '<item target="web">[^<]*<file>([^>]*)</file>\W*<description>[^>]*>\W*<bandwidth>(\d+)</bandwidth>'
self.mediaUrlRegex = '<item>\W*<file>\W*([^>]*)\W*</file>\W*<bandwidth>(\d+)</bandwidth>'
#==============================================================================
# non standard items
self.PreProcessRegex = '<ul title="([^"]*)" rel="([^"]*)videomenu.xml"'
self.progTitle = ""
self.videoMenu = ""
return True
#==============================================================================
def ParseMainList(self):
# call the main list
items = chn_class.Channel.ParseMainList(self)
# then add GTST
gtstItem = common.clistItem('Goede Tijden, Slechte Tijden (Oud)', 'http://www.rtl.nl//system/video/menu/soaps/gtst/videomenu.xml', 'folder')
gtstItem.icon = self.folderIcon
gtstItem.thumb = self.noImage
items.append(gtstItem)
gtstItem = common.clistItem('Goede Tijden, Slechte Tijden', 'http://www.rtl.nl/system/video/menu/soaps/gtst/home/videomenu.xml', 'folder')
gtstItem.icon = self.folderIcon
gtstItem.thumb = self.noImage
items.append(gtstItem)
# sort by name
if self.episodeSort:
items.sort(lambda x, y: cmp(x.name.lower(),y.name.lower()))
return items
#==============================================================================
def CreateEpisodeItem(self, resultSet):
"""
Accepts an arraylist of results. It returns an item.
"""
#logFile.info('starting CreateEpisodeItem for %s', self.channelName)
item = common.clistItem(resultSet[1], "http://www.rtl.nl/(vm="+ resultSet[0] + ")/system/video/menu" + resultSet[0] + "videomenu.xml")
item.icon = self.folderIcon
return item
#==============================================================================
def PreProcessFolderList(self, data):
"""
Accepts an data from the ProcessFolderList Methode, BEFORE the items are
processed. Allows setting of parameters (like title etc). No return value!
"""
_items = []
if len(self.folderHistory)==1:
# The first folder to be processed
matches = common.DoRegexFindAll('<ul title="([^"]*)" rel="([^"]*)videomenu.xml"', data)
self.progTitle = matches[0][0]
self.videoMenu = matches[0][1]
return (data, _items)
#==============================================================================
def CreateFolderItem(self, resultSet):
"""
Accepts an arraylist of results. It returns an item.
"""
logFile.debug('starting CreateFolderItem for %s', self.channelName)
item = common.clistItem(resultSet[2], self.RtlFolderUri(resultSet[0],resultSet[1]))
if len(self.folderHistory)==1:
item.description = "%s \n%s \n" %(self.progTitle ,item.name)
else:
item.description = "%s \n%s \n" %(self.folderHistory[-1].description ,item.name)
item.icon = self.folderIcon
item.type = 'folder'
item.thumb = self.noImage
item.complete = True
return item
#=============================================================================
def CreateVideoItem(self, resultSet):
"""
Accepts an arraylist of results. It returns an item.
"""
logFile.debug('starting FormatVideoItem for %s', self.channelName)
item = common.clistItem(resultSet[2], self.RtlVideoUri(self.videoMenu, resultSet[0] + resultSet[1]))
if len(self.folderHistory)>1:
item.description = self.folderHistory[-1].description + item.name
else:
item.description = item.name
item.icon = self.icon
item.thumb = self.noImage
item.type = 'video'
item.complete = False
return item
#=============================================================================
def UpdateVideoItem(self, item):
"""
Accepts an item. It returns an updated item.
"""
logFile.debug('starting UpdateVideoItem for %s (%s)',item.name, self.channelName)
_data = uriHandler.Open(item.url, pb=False)
#mediaurl -> get highest quality
_matches = common.DoRegexFindAll(self.mediaUrlRegex, _data)
logFile.debug("Possible Matches: %s",_matches)
_maxBandwidth = 0
for _match in _matches:
if int(_match[1])>int(_maxBandwidth):
_maxBandwidth = _match[1]
item.mediaurl = _match[0]
logFile.info('finishing UpdateVideoItem. Media url = '+ item.mediaurl)
item.thumb = self.noImage
item.complete = True
return item
#===============================================================================
def RtlFolderUri(self, folder, filename):
return 'http://www.rtl.nl/(vm'+ folder + ')/system/video/menu' + folder + filename
#===============================================================================
def RtlVideoUri(self, videoMenu, videoURL):
return 'http://www.rtl.nl/(vm'+ videoMenu + ')' + videoURL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -