def ParseRomDetailsXml(self, romName, text): xmlDocument = minidom.parseString(text) if self.TestXmlDocumentErrorStatus(xmlDocument) == False: raise Exception("Invalid response for get rom details XML") #print "XML: " + text gameTagResultList = xmlDocument.getElementsByTagName("results") if len(gameTagResultList) == 0: raise Exception("Could not find result for rom") if len(gameTagResultList) > 1: raise Exception("Unexpected number of results for rom") gameTag = gameTagResultList[0] romDict = {} #romDict[ 'name' ] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'name' ) romDict['description'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'deck') romDict['giantBombRomId'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'id') # string is provided in ISO standard format anyway so can be stored in DB like that romDict['releaseDate'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'original_release_date') # similar games are map of { 'giantBombRomId', 'name' } romDict['similarGames'] = self.ParseSimilarGamesData( XmlHelper.FindFirstChildNodeByTagName(gameTag, 'similar_games')) romDict['developers'] = self.ParseDeveloperData( XmlHelper.FindFirstChildNodeByTagName(gameTag, 'developers'), 'company') romDict['publishers'] = self.ParseDeveloperData( XmlHelper.FindFirstChildNodeByTagName(gameTag, 'publishers'), 'publisher') romDict['genres'] = self.ParseDeveloperData( XmlHelper.FindFirstChildNodeByTagName(gameTag, 'genres'), 'genre') imageNode = XmlHelper.FindFirstChildNodeByTagName(gameTag, 'image') if imageNode is not None: self.SaveImageToRomCache( Config.config.GetRomsImageCachePath(romName), romName, imageNode) return romDict
def ParseGenreDetailsXml(self, text): xmlDocument = minidom.parseString(text) if self.TestXmlDocumentErrorStatus(xmlDocument) == False: raise Exception("Invalid response for get genre details XML") # print "XML: " + text gameTagResultList = xmlDocument.getElementsByTagName("results") if len(gameTagResultList) == 0: raise Exception("Could not find result for genre") if len(gameTagResultList) > 1: raise Exception("Unexpected number of results for genre") gameTag = gameTagResultList[0] romDict = {} romDict['name'] = XmlHelper.FindFirstDataInXmlTagList(gameTag, 'name') romDict['description'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'deck') romDict['giantBombId'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'id') imageNode = XmlHelper.FindFirstChildNodeByTagName(gameTag, 'image') if imageNode is not None: self.SaveImageToRomCache( Config.config.GetGenresImageCachePath(romDict['name']), romDict['name'], imageNode) return romDict
def ParseSearchXml(self, text, giantBombPlatformId): xmlDocument = minidom.parseString(text) if self.TestXmlDocumentErrorStatus(xmlDocument) == False: raise Exception("Invalid response for search XML") gameTagResultList = xmlDocument.getElementsByTagName("game") # print "ROM SEARCH TEXT: " + text resultDictList = [] for gameTag in gameTagResultList: romDict = {} romDict['giantBombRomId'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'id') romDict['name'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'name') romDict['aliases'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'aliases') platformList = XmlHelper.FindFirstChildNodeByTagName( gameTag, 'platforms') if platformList != None: romDict['platforms'] = FormatPlatformsData(platformList) romDict[ 'giantBombApiDetailsUrl'] = XmlHelper.FindFirstDataInXmlTagList( gameTag, 'api_detail_url') # filter by giantBombPlatformId (can't do this directly in the url search string) foundPlatformId = False if len(giantBombPlatformId) > 0: for platform in romDict['platforms']: # print "Platform: " + platform[ 'name' ] if int(platform['giantBombPlatformId']) == int( giantBombPlatformId): foundPlatformId = True break else: foundPlatformId = True if foundPlatformId == True: resultDictList.append(romDict) return resultDictList
def Init(self, resourcesPath): self.resourcesPath = resourcesPath self.configFilePath = os.path.join(resourcesPath, 'config.xml') try: if (os.path.isfile(self.configFilePath)): dom = parse(self.configFilePath) rootNode = XmlHelper.FindFirstChildNodeByTagName(dom, 'config') displayNodeList = XmlHelper.FindChildNodesByTagName( rootNode, 'display') if len(displayNodeList) > 0: displayNode = displayNodeList[0] try: self.RomItemCount = int( displayNode.getAttribute('romItemCount')) except: pass dateTimeNodeList = XmlHelper.FindChildNodesByTagName( rootNode, 'datetime') if len(dateTimeNodeList) > 0: dateTimeNode = dateTimeNodeList[0] self.dateFormatString = dateTimeNode.getAttribute('format') scraperNodeList = XmlHelper.FindChildNodesByTagName( rootNode, 'scraper') if len(scraperNodeList) > 0: scraperNode = scraperNodeList[0] self.scaperType = scraperNode.getAttribute('type') self.scaperImageQuality = scraperNode.getAttribute( 'imageQuality') self.scraperCacheDirectory = scraperNode.getAttribute( 'cacheDirectory') launcherNodeList = XmlHelper.FindChildNodesByTagName( rootNode, 'ziptool') if len(launcherNodeList) > 0: launcherNode = launcherNodeList[0] self.zipToolPath = launcherNode.getAttribute('path') self.zipToolArgs = launcherNode.getAttribute('args') # read in supported platforms emulatorNodeList = XmlHelper.FindChildNodesByTagName( rootNode, 'emulator') for emulatorNode in emulatorNodeList: name = emulatorNode.getAttribute('name') romsPath = emulatorNode.getAttribute('romsPath') romFilter = emulatorNode.getAttribute('romFilter') exe_file = emulatorNode.getAttribute('exe_file') exe_args = emulatorNode.getAttribute('exe_args') giantBombPlatformId = emulatorNode.getAttribute( 'giantBombPlatformId') emuMap = { "name": name, "romsPath": romsPath, "romFilter": romFilter, "exe_file": exe_file, "exe_args": exe_args, "giantBombPlatformId": giantBombPlatformId } self.emulatorTypeMap.append(emuMap) except: pass if len(self.scraperCacheDirectory) == 0: self.scraperCacheDirectory = os.path.join(resourcesPath, 'cache')