All pastes #900344 Raw Edit

Anonymous

public python v1 · immutable
·published 2008-02-11 21:03 UTC
rendered paste body
 # Interrogate wow armory import urllib2import xml.dom.minidomimport sysimport timeimport os#Imports realm information from config.wtf#Deprecated. Now use infromation in the WTF/Account directorydef getRealm():		f = open("../../../wtf/Config.wtf")		for line in f:				if "realmName" in line:						realm = line.split()[2]			realm = realm.replace('"','')			return realm	return "fail"		def getCharacterSheet(character,realm):	print "Character: %s \n Realm: %s" % (character, realm)	strUrl = "http://armory.worldofwarcraft.com/character-sheet.xml?r=%s&n=%s" % (realm.replace( ' ', '+'), character)	#print "strUrl: %s " % strUrl		#	# Open url.	# Need to specify firefox as user agent as this makes the server return an XML file.	# If this is not done we get html.	#	oOpener = urllib2.build_opener()	oOpener.addheaders = [	('user-agent',	'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4'),	]		#print "Requesting..."	req = urllib2.Request(strUrl)	strFile = oOpener.open(req).read()		#print "Got it..."	#print strFile	if strFile != "":		oDoc = xml.dom.minidom.parseString(strFile);		return oDoc	else:		return "fail"def getGuildName(oDoc):	element = 'character';	attribute = 'guildName';	obj = getAttributes(oDoc,element,attribute);	return obj["guildName"]def getProfessions(oDoc):	if oDoc != "fail":		element = 'skill';		attribute = '';		return getAttributes(oDoc,element,attribute);	else:		obj = {"professions":"No Information"}		return obj	def getSpec(oDoc):	if oDoc!="fail":		#sets up element and attribute to retrieve individual trees		#TODO: Find a more programmatically correct way to do this		element = "talentSpec";		att = "treeOne";		numerical = getAttributes(oDoc,element,att)[att];		if numerical != "" and numerical != "No Spec Information":			 out = numerical		else:			out = "0";						element = "talentSpec";		att = "treeTwo";		numerical = getAttributes(oDoc,element,att)[att];				if numerical != "" and numerical != "No Spec Information":			out += "/%s/" % numerical 		else:			out += "/0/";								element = "talentSpec";		att = "treeThree";		numerical = getAttributes(oDoc,element,att)[att];		if numerical != "" and numerical != "No Spec Information":			out += numerical		else:			out += "0";				#print out		obj = {"spec": "%s" % out}		#print obj		return obj		else:		print "Spec for %s failed" % character		obj = {"spec":"No Information"}def getGuildList(guild, realm):	print guild 	print realm	members = [];	strUrl = "http://armory.worldofwarcraft.com/guild-info.xml?r=%s&n=%s" % (realm.replace( ' ', '+'), guild.replace( ' ', '+'))	print "guildURL: " + strUrl		#	# Open url.	# Need to specify firefox as user agent as this makes the server return an XML file.	# If this is not done we get html.	#	oOpener = urllib2.build_opener()	oOpener.addheaders = [	('user-agent',	'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4'),	]		req = urllib2.Request( strUrl)	strFile = oOpener.open(req).read()	#print strFile		oDoc =  xml.dom.minidom.parseString(strFile)	Elements = oDoc.getElementsByTagName("character")	for i in range(0,len(Elements)):		members.append(Elements[i].getAttribute("name"))	return members;#gets the attribute of the element passed indef getAttributes(oDoc, element, attribute):	if oDoc == "":		print "oDoc is null";	strValue = "";	if element == "skill":		attribute = "professions";		try:			Elements = oDoc.getElementsByTagName("skill");		except:			print "could not get information for this character"		if (len(Elements) > 0):			for i in range(0,len(Elements)):				if (i > 0):					strValue += "|"				strValue += "%s:%s" % (Elements[i].getAttribute("name"), Elements[i].getAttribute("value"))			#print strValue		else:			strValue = "No Information"				else:		#print "Looking for %s : %s" % (element,attribute)		Elements = oDoc.getElementsByTagName(element)		if len(Elements) > 0:			oElement = oDoc.getElementsByTagName(element)[0]			strValue = oElement.getAttribute(attribute)		else:			strValue = "No Spec Information"	obj = {attribute : strValue}	return obj#parses are saved variables file into useable informationdef parseLua(filePtr):	localList = []	lineCount = 0;	for line in filePtr:		if ("guildTools_toons = {" not in line) and ("}" not in line) and lineCount !=0:			line = line.replace('\n','')			line = line.replace('\r','')			line = line.replace('\t','');			line = line.split('"')[1]			line = line.split(',')[0]			localList.append(line)		lineCount += 1	#print localList	return localList#TODO: Compound the following method into a streamlined functionserverList = []innerList = []charList = []fullList = {}currentDir = os.getcwd()#change working directory to the following to access server/character informationos.chdir('../../../wtf/Account')#list accountsaccountList = os.listdir(os.getcwd())currentDir = os.getcwd()#print currentDir#print accountList#loop through accounts foundfor account in accountList:	os.chdir("%s/%s" %(os.getcwd(),account))		#returns a list of possible servers	folderList = os.listdir(os.getcwd()) 	#weeds out non-servers from list	for folder in folderList:		if (os.path.isdir(folder) and folder != "SavedVariables"):			serverList.append("%s/%s"%(os.getcwd(),folder)) 		#attempts to retrieve characters from each server	for server in serverList:		os.chdir(server)		fileList = os.listdir(os.getcwd())		for file in fileList:			if (os.path.isdir(file)):				charList.append(file)		serverName = server.split('/')[-1]		fullList[serverName] = charList		#print serverName,fullList[serverName]#return to original addon directoryos.chdir("../../../../Interface/AddOns/FaraFrames/")#open our saved variable file for merging toonsa = open("../../../wtf/Account/ORETHLECROIX/SavedVariables/FaraFrames.lua","r");toonList = [];toonList = parseLua(a)a.close()#initialize variablesprofessions = {};specs = {};newList = {};guildList = [];fullToonList = [];#crappy menu that will be removedoption = 0menu= {};for server in fullList:	print "%s. %s" %(option,server)	menu[option] = server;	option +=1server = raw_input("which server? ")#retrieve guild information for each character on server chosenfor character in fullList[menu[int(server)]]:	characterSheet = getCharacterSheet(character,menu[int(server)])	if characterSheet != "fail":		guild = getGuildName(characterSheet)		print ("%s : %s\n" %(character,guild))		if (guild != "No Spec Information"):			guildList.append(guild)	else:		print "FAILED"	time.sleep(3)	guildList = list(set(guildList))#retrieve list of guild members for each guild retrieved in the previous blockfor guild in guildList:	print "Getting Listing for %s" % guild	guildMemberList = getGuildList(guild,menu[int(server)])	print guildMemberList	time.sleep(3)	fullToonList = list(set(fullToonList)|set(guildMemberList))fullToonList.sort()guildMemberList = fullToonListguildMemberList.sort()#print guildList#for i in range(0,len(guildMemberList)): -- removed for testing purposesfor i in range(0,10):		currentToon = guildMemberList[i]	#percent complete	print "%0.4s%%" % float((i*100.0)/len(guildMemberList))	#print "%s/%s Guildmates" % ((i+1),len(guildList))		#retrieve charactersheet for current toon	characterSheet = getCharacterSheet(currentToon,Realm)	#gets professions for current toon	professions[currentToon] = getProfessions(characterSheet)	#get spec for current toon	specs[currentToon] = getSpec(characterSheet)		time.sleep(5)	print "100.00%%"guildLen = len(guildMemberList)currentLine = 0;#print ("********************")obj={}for key in professions.keys():	#print key	newList[key] = {}	if professions.has_key(key):		if professions[key] is not None:			for innerkey in professions[key].keys():				#print innerkey				newList[key][innerkey] = professions[key][innerkey];for key in specs.keys():	if specs.has_key(key) :		if specs[key] is not None:			for innerkey in specs[key].keys():				#print innerkey				newList[key][innerkey] = specs[key][innerkey];	print newListf = open("FaraFrames.lua","w");f.write("function getD()\nreturn{")indexCount = 0;for key in newList.keys():		currentLine+=1	if newList[key].has_key("professions"):				if newList[key]["professions"] != "No Information":						#print "%s : %s" % (key,newList[key]["professions"])			spec = newList[key]["spec"]			skillString = newList[key]["professions"]			skillSets = skillString.split('|')				firstSet = skillSets[0];			print firstSet			secondSet = skillSets[1];			firstSet = firstSet.split(':')			secondSet = secondSet.split(':')			firstSkill = firstSet[0];			firstValue = firstSet[1];			secondSkill = secondSet[0];			secondValue = secondSet[1];			f.write('["%s"] = { %s = %s, %s = %s, Spec = "%s" }' % (key,firstSkill,firstValue,secondSkill,secondValue,spec))			indexCount +=1			if (currentLine < guildLen):				f.write(",")						#p.write("%s~%s~%s\n" % (key,newList[key]["professions"],spec))	else:		print "%s does not have the key"f.write('}\nend\n')print "Indexed %s toons" % indexCountc = open("base.lua");for line in c:	f.write(line)f.close()a = open("../../../wtf/Account/ORETHLECROIX/SavedVariables/FaraFrames.lua","w");a.write('\n')a.write("guildTools_toons = {\n")#print guildListfor i in range(0,len(guildMemberList)):	#print guildList[i]	a.write('\t"%s",\n' % guildMemberList[i]) a.write("}")a.close()	  ''' guildTools_toons = {	"Knikon", -- [1]	"Acidbath", -- [2]}''''''strAttributes = ( ('character','name',''),		( 'character', 'level',' Level '),                ('character','race', ' '),                ('character','class', ' '),                ( 'character', 'guildName', ' | Member of: '),                ( 'talentSpec','treeOne', ' | Spec: '),                ( 'talentSpec','treeTwo','/'),                ( 'talentSpec','treeThree','/'),		( 'skill','', ' '))'''