⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chn_rtl.py

📁 XOT: XBMC Online TV Framework
💻 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 + -