def getVideoUrl(self, videoId): """Get video URL for videoId""" try: doc = xml.loadXml("http://www.fancast.com/player.widget?videoId=%s" % videoId) root = xml.validateDocument(doc, 'entity') mediaUrl = xml.getChildData(root, None, 'mediaUrl') doc.unlink() doc = xml.loadXml(mediaUrl) root = xml.validateDocument(doc, 'playlist') # We may have multiple urls in playlist, look for rtmp # This may pick the wrong video urls = root.getElementsByTagName('url') for url in urls: rtmpUrl = url.firstChild.wholeText if (rtmpUrl.startswith("rtmp:")): break huluBreak = rtmpUrl.find('<break>') if (huluBreak >= 0): # Hulu style rtmp URL return rtmpUrl[0:huluBreak] else: # Fancast style rtmp URL # Need to split application and filename out of rtmp url: # rtmp://cp40359.edgefcs.net/ondemand/fancast/Comcast_CIM_Prod_Fancast_Partner/836/252/COMEDYCENTRAL_COLBERTREPORT_4125.flv # Changes to: # rtmp://cp40359.edgefcs.net/ondemand?slist=fancast/Comcast_CIM_Prod_Fancast_Partner/836/252/COMEDYCENTRAL_COLBERTREPORT_4125 match = re.compile('^(.*ondemand)/(.*).flv$').match(rtmpUrl) return "%s?slist=%s" % (match.group(1), match.group(2)) finally: if (doc): doc.unlink()
def __init__(self, seriesFeedUrl=favorites.FAVORITES_PATH): # All movies url = sys.argv[0] + "?" + urllib.urlencode({'module': 'episodelist', 'title': 'All Movies', 'filter': 'movies', 'episodeFeedUrl': 'http://fb1.fancast.com/rss/allvideos.xml'}) item = xbmcgui.ListItem("All Movies...", iconImage="DefaultFolder.png") ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True) # Add initial item to display master "feed of feeds" url = sys.argv[0] + "?" + urllib.urlencode({'module': 'serieslist', 'seriesFeedUrl': 'http://fb1.fancast.com/rss/video-index.xml'}) item = xbmcgui.ListItem("All Series...", iconImage="DefaultFolder.png") ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True) try: # Add individual feeds rssXml = xml.loadXml(seriesFeedUrl) ok = self.parseRss(rssXml) except: print "No feeds found for %s" % seriesFeedUrl xbmcplugin.endOfDirectory(int(sys.argv[1]), succeeded=ok)
def __init__(self, title, episodeFeedUrl, filter=None): try: if (not filter): self.manageFavorites(title, episodeFeedUrl) rssXml = xml.loadXml(episodeFeedUrl) ok = self.parseRss(rssXml, filter) except: ok = False print "ERROR: %s::%s (%d) - %s" % (self.__class__.__name__, sys.exc_info()[2].tb_frame.f_code.co_name, sys.exc_info()[2].tb_lineno, sys.exc_info()[1]) xbmcplugin.endOfDirectory(int(sys.argv[1]), succeeded=ok)
def __init__(self, title, episodeFeedUrl, filter=None): try: if (not filter): self.manageFavorites(title, episodeFeedUrl) rssXml = xml.loadXml(episodeFeedUrl) ok = self.parseRss(rssXml, filter) except: ok = False print "ERROR: %s::%s (%d) - %s" % ( self.__class__.__name__, sys.exc_info()[2].tb_frame.f_code.co_name, sys.exc_info()[2].tb_lineno, sys.exc_info()[1]) xbmcplugin.endOfDirectory(int(sys.argv[1]), succeeded=ok)
def loadFavorites(self): self.favorites = [] try: doc = None doc = xml.loadXml(FAVORITES_PATH) root = xml.validateDocument(doc, 'rss') items = root.getElementsByTagName('item') for item in items: self.favorites.append(Favorite(xml.getChildData(item, None, 'title'), xml.getChildData(item, None, 'link'))) except: print "ERROR: %s::%s (%d) - %s" % (self.__class__.__name__, sys.exc_info()[2].tb_frame.f_code.co_name, sys.exc_info()[2].tb_lineno, sys.exc_info()[1]) if (doc): doc.unlink()
def loadFavorites(self): self.favorites = [] try: doc = None doc = xml.loadXml(FAVORITES_PATH) root = xml.validateDocument(doc, 'rss') items = root.getElementsByTagName('item') for item in items: self.favorites.append( Favorite(xml.getChildData(item, None, 'title'), xml.getChildData(item, None, 'link'))) except: print "ERROR: %s::%s (%d) - %s" % ( self.__class__.__name__, sys.exc_info()[2].tb_frame.f_code.co_name, sys.exc_info()[2].tb_lineno, sys.exc_info()[1]) if (doc): doc.unlink()
def getVideoUrl(self, videoId, title): """Get video URL for videoId""" try: doc = xml.loadXml("http://www.fancast.com/player.widget?videoId=%s" % videoId) root = xml.validateDocument(doc, 'entity') mediaUrl = xml.getChildData(root, None, 'mediaUrl') doc.unlink() doc = xml.loadXml(mediaUrl) root = xml.validateDocument(doc, 'playlist') # We may have multiple urls in playlist, look for rtmp # This may pick the wrong video urls = root.getElementsByTagName('url') for url in urls: rtmpUrl = url.firstChild.wholeText if (rtmpUrl.startswith("rtmp:")): break huluBreak = rtmpUrl.find('<break>') if (huluBreak >= 0): # Hulu style rtmp URL #code to determine proper streaming url from #http://code.google.com/p/xbmc-addons/source/browse/trunk/plugins/video/Hulu/resources/lib/stream_hulu.py#75 rtmpUrl=rtmpUrl.replace('&','&').replace('<','<').replace('>','>') mainParts = rtmpUrl.split("?") queryStringParts = mainParts[1].split("&") v9 = queryStringParts[0] v6 = queryStringParts[1] if "<break>" in queryStringParts[2]: breakParts = queryStringParts[2].split("<break>") v3 = breakParts[0]; fileName = breakParts[1] else: v3 = queryStringParts[2] breakFilenameURL = mainParts[0].split("://"); breakFilenamedir = breakFilenameURL[1].split("/"); breakFilenames = breakFilenameURL[1].split(breakFilenamedir[1] + "/") fileName = breakFilenames[1] newQueryString = v9 + "&" + v6 + "&" + v3 protocolSplit = rtmpUrl.split("://") pathSplit = protocolSplit[1].split("/"); serverPath = pathSplit[0] + "/" + pathSplit[1]; server = pathSplit[0]; appName = pathSplit[1]; videoIdentIp = server protocol = "rtmp"; port = "1935"; newUrl = protocol + "://" + videoIdentIp + ":" + port + "/" + appName + "?_fcs_vhost=" + server if newQueryString <> "": newUrl += "&" + newQueryString SWFPlayer = 'http://www.hulu.com/player.swf' item = xbmcgui.ListItem(title) item.setProperty("SWFPlayer", SWFPlayer) item.setProperty("PlayPath", fileName) item.setProperty("PageURL", "http://www.fancast.com/player.widget?videoId=%s" % videoId) playlist = xbmc.PlayList(1) playlist.clear() playlist.add(newUrl, item) play=xbmc.Player().play(playlist) xbmc.executebuiltin('XBMC.ActivateWindow(fullscreenvideo)') else: # Fancast style rtmp URL # Need to split application and filename out of rtmp url: # rtmp://cp40359.edgefcs.net/ondemand/fancast/Comcast_CIM_Prod_Fancast_Partner/836/252/COMEDYCENTRAL_COLBERTREPORT_4125.flv # Changes to: # rtmp://cp40359.edgefcs.net/ondemand?slist=fancast/Comcast_CIM_Prod_Fancast_Partner/836/252/COMEDYCENTRAL_COLBERTREPORT_4125 match = re.compile('^(.*ondemand)/(.*).flv$').match(rtmpUrl) videoUrl = "%s?slist=%s" % (match.group(1), match.group(2)) item = xbmcgui.ListItem(title) item.setProperty("SWFPlayer", "http://www.hulu.com/player.swf") # play won't accept unicode strings, so convert xbmc.Player(xbmc.PLAYER_CORE_DVDPLAYER).play(str(videoUrl), item) finally: if (doc): doc.unlink()
def getVideoUrl(self, videoId, title): """Get video URL for videoId""" try: doc = xml.loadXml("http://www.fancast.com/player.widget?videoId=%s" % videoId) root = xml.validateDocument(doc, "entity") mediaUrl = xml.getChildData(root, None, "mediaUrl") doc.unlink() doc = xml.loadXml(mediaUrl) root = xml.validateDocument(doc, "playlist") # We may have multiple urls in playlist, look for rtmp # This may pick the wrong video urls = root.getElementsByTagName("url") for url in urls: rtmpUrl = url.firstChild.wholeText if rtmpUrl.startswith("rtmp:"): break huluBreak = rtmpUrl.find("<break>") if huluBreak >= 0: # Hulu style rtmp URL # code to determine proper streaming url from # http://code.google.com/p/xbmc-addons/source/browse/trunk/plugins/video/Hulu/resources/lib/stream_hulu.py#75 rtmpUrl = rtmpUrl.replace("&", "&").replace("<", "<").replace(">", ">") mainParts = rtmpUrl.split("?") queryStringParts = mainParts[1].split("&") v9 = queryStringParts[0] v6 = queryStringParts[1] if "<break>" in queryStringParts[2]: breakParts = queryStringParts[2].split("<break>") v3 = breakParts[0] fileName = breakParts[1] else: v3 = queryStringParts[2] breakFilenameURL = mainParts[0].split("://") breakFilenamedir = breakFilenameURL[1].split("/") breakFilenames = breakFilenameURL[1].split(breakFilenamedir[1] + "/") fileName = breakFilenames[1] newQueryString = v9 + "&" + v6 + "&" + v3 protocolSplit = rtmpUrl.split("://") pathSplit = protocolSplit[1].split("/") serverPath = pathSplit[0] + "/" + pathSplit[1] server = pathSplit[0] appName = pathSplit[1] videoIdentIp = server protocol = "rtmp" port = "1935" newUrl = protocol + "://" + videoIdentIp + ":" + port + "/" + appName + "?_fcs_vhost=" + server if newQueryString <> "": newUrl += "&" + newQueryString SWFPlayer = "http://www.hulu.com/player.swf" item = xbmcgui.ListItem(title) item.setProperty("SWFPlayer", SWFPlayer) item.setProperty("PlayPath", fileName) item.setProperty("PageURL", "http://www.fancast.com/player.widget?videoId=%s" % videoId) playlist = xbmc.PlayList(1) playlist.clear() playlist.add(newUrl, item) play = xbmc.Player().play(playlist) xbmc.executebuiltin("XBMC.ActivateWindow(fullscreenvideo)") else: # Fancast style rtmp URL # Need to split application and filename out of rtmp url: # rtmp://cp40359.edgefcs.net/ondemand/fancast/Comcast_CIM_Prod_Fancast_Partner/836/252/COMEDYCENTRAL_COLBERTREPORT_4125.flv # Changes to: # rtmp://cp40359.edgefcs.net/ondemand?slist=fancast/Comcast_CIM_Prod_Fancast_Partner/836/252/COMEDYCENTRAL_COLBERTREPORT_4125 match = re.compile("^(.*ondemand)/(.*).flv$").match(rtmpUrl) videoUrl = "%s?slist=%s" % (match.group(1), match.group(2)) item = xbmcgui.ListItem(title) item.setProperty("SWFPlayer", "http://www.hulu.com/player.swf") # play won't accept unicode strings, so convert xbmc.Player(xbmc.PLAYER_CORE_DVDPLAYER).play(str(videoUrl), item) finally: if doc: doc.unlink()