All pastes #285546 Raw Edit

NBA TV Script for XB

public python v1 · immutable
#285546 ·published 2006-12-19 22:09 UTC
rendered paste body
#NBA TV Version 0.1 based on dl.tv.py Version 0.1#by Shane Andrusiak - Emerica - http://www.pxn.ca/forum - http://projectxnetwork.com#Modder MJ#Original Author Greg Chrystall greg@chrystall.co.nzimport xml.dom.minidom, urllib, os, os.path, xbmc, xbmcgui, string, traceback, timeACTION_MOVE_LEFT        = 1	ACTION_MOVE_RIGHT       = 2ACTION_MOVE_UP          = 3ACTION_MOVE_DOWN        = 4ACTION_PAGE_UP          = 5ACTION_PAGE_DOWN        = 6ACTION_SELECT_ITEM      = 7ACTION_HIGHLIGHT_ITEM   = 8ACTION_PARENT_DIR       = 9ACTION_PREVIOUS_MENU    = 10ACTION_SHOW_INFO        = 11ACTION_PAUSE            = 12ACTION_STOP             = 13ACTION_NEXT_ITEM        = 14ACTION_PREV_ITEM        = 15# dialog object for the whole appdialog = xbmcgui.DialogProgress()# Setup logging routinesROOT_DIR = os.getcwd()[:-1]+'\\'IMAGE_DIR = ROOT_DIR+'images\\'DO_LOGGING = TrueLOG_FILE_NAME = ROOT_DIR + "nbatvlog.txt"if DO_LOGGING:	LOG_FILE = open(LOG_FILE_NAME, 'w')def LOG(message):	if DO_LOGGING:		LOG_FILE.write(str(message)+"\n")		LOG_FILE.flush()def LOGCLOSE():	if DO_LOGGING:		LOG_FILE.close()itemElements = ['title','link','pubDate', 'description']rssFeeds = {'NBA TV' : 'http://broadband.nba.com/cc/video_rss.php', 			}class nbatvViewer(xbmcgui.Window):	def __init__(self):		dialog.create("Getting RSS Feeds")		self.feeds = {}		self.urlsInOrder = []		W = self.getWidth()		H = self.getHeight()		LOG("Image: " + IMAGE_DIR + 'background.png')		self.ctrlBackGround = xbmcgui.ControlImage(0, 0, W, H, IMAGE_DIR + 'background.png')		self.addControl(self.ctrlBackGround)		self.ctrlLogo = xbmcgui.ControlImage(50, 30, 255, 90, IMAGE_DIR + 'logo.gif')		self.addControl(self.ctrlLogo)		self.shows		= xbmcgui.ControlList(40,150,160,365)		self.itemList		= xbmcgui.ControlList(210,150,450,365,'font13','0xFFFFFFFF')		self.addControl(self.shows)		self.addControl(self.itemList)		self.shows.controlRight(self.itemList)		self.shows.controlLeft(self.itemList)		self.itemList.controlRight(self.shows)		self.itemList.controlLeft(self.shows)		count = 1.0		for name, url in sorted(rssFeeds.iteritems()):			progress = int(((count / float(len(rssFeeds))) * 100.0))			dialog.update(progress, "Getting " + name + " RSS Feed.")			self.shows.addItem(name)			count = count + 1.0		dialog.close()		self.setFocus(self.shows)			def onAction(self, action):		if action == ACTION_PREVIOUS_MENU:			if DO_LOGGING:				LOGCLOSE()			self.close()		def onControl(self, control):		if(control == self.itemList):			try:				LOG("Item list clicked...")				LOG(self.itemList.getSelectedPosition())				position = self.itemList.getSelectedPosition()				filename = self.urlsInOrder[position]				LOG("Playing: " + filename)				if filename:					LOG("Before Player Call")					try:						xbmc.Player().play(str(filename))					except:						LOG("Player Exception")					LOG("After Player Call")				else:					xbmcgui.Dialog().ok('ERROR', 'Most likely video unavailable for download.')			except:				xbmc.output('ERROR: playing %s' % ( filename) )					if(control == self.shows):			print "Clicked: "			self.changeShow(self.shows.getSelectedItem().getLabel())		def changeShow(self, show):		dialog.create("Getting " + show + " RSS Feed.")		self.updateItems(show)		dialog.close()		def updateItems(self, show):		LOG("rssFeeds Keys:")		for key in rssFeeds.keys():			LOG(key)		if(rssFeeds.has_key("nbatv")):			LOG("HAS nbatv!")			LOG(str(rssFeeds["nbatv"]))		if(not self.feeds.has_key(show)):			try:				self.feeds[show] = FeedItems(rssFeeds[show]).getData()			except:				xbmcgui.Dialog().ok("Error", "Could not get rss feed: '" + show + "'")				return		self.itemList.reset()		self.urlsInOrder = None		self.urlsInOrder = []		for item in self.feeds[show]:			self.itemList.addItem(item.getElement("title"))			self.urlsInOrder.append(item.getElement("mediaUrl"))		def cancelOpen():		if DO_LOGGING:			LOGCLOSE()		self.close()class FeedItems:	def __init__(self, url):		self.dom = None		f = urllib.urlopen(url)		xmlDocument = f.read()		f.close()		self.dom = xml.dom.minidom.parseString(xmlDocument)		self.data = []		self.extractURLNameDictionary()				def extractURLNameDictionary(self):		items = self.dom.getElementsByTagName("item")		for item in items:			elements = {}			for itemElement in itemElements:				try:					elements[itemElement] = item.getElementsByTagName(itemElement)[0].childNodes[0].data.strip()					#print itemElement, " = ", item.getElementsByTagName(itemElement)[0].childNodes[0].data				except:					pass			try:				elements["mediaUrl"] = item.getElementsByTagName("enclosure")[0].getAttribute("url").strip()			except:				try:					elements["mediaUrl"] = item.getElementsByTagName("link")[0].childNodes[0].data.strip()				except: 					xbmcgui.Dialog().ok("Error", "Problem building feed.")			self.data.append(RSSItem(elements))			def getData(self):		return self.dataclass RSSItem:	def __init__(self, elements):		# list that includes required item elements		self.elements = elements			def getElement(self, element):		return self.elements[element]			def getElementNames(self):		return self.elements.keys()			def hasElement(self, element):		return self.elements.has_key(element)	w = nbatvViewer()w.doModal()del w