Files
forge/res/setInfoScript.py
jendave f0a074a66e - SetInfo Script will now skip .svn file it will also only overwrite data files that it has grabbed Set Info for.
- Pump and Draw can now handle variable Amounts for attack/defense boost or cards drawn.
- Removed Braingeyser from AI Decks until AF_Draw can learn how to play it better. (The Code block was forcing the Human to draw anyway)
- Added Targeted to AF.calculateAmount()
- Added Surge of Strength
2011-08-06 12:05:02 +00:00

255 lines
6.4 KiB
Python

# This python script is designed to handle the following: individual cards located in /res/cardsfolder
# Insert of SetInfo data into data files from magiccards.info
from httplib import HTTP
from urlparse import urlparse
from urllib import urlopen
import os
def getURL(url):
return urlopen(url).read()
class SetInfo:
def __init__(self, set, rarity, image):
self.set = set
self.rarity = rarity
self.image = image
class Card:
def __init__(self, name, cleanName):
self.name = name
self.cleanName = cleanName
self.hasSet = False
self.sets = {}
def initSets():
# Base Sets
allSets['Limited Edition Beta'] = 'LEB'
allSets['Unlimited Edition'] = '2ED'
allSets['Revised Edition'] = '3ED'
allSets['Fourth Edition'] = '4ED'
allSets['Fifth Edition'] = '5ED'
allSets['Classic Sixth Edition'] = '6ED'
allSets['Seventh Edition'] = '7ED'
allSets['Eighth Edition'] = '8ED'
allSets['Ninth Edition'] = '9ED'
allSets['Tenth Edition'] = '10E'
allSets['Magic 2010'] = 'M10'
allSets['Magic 2011'] = 'M11'
# Portal
allSets['Portal'] = 'POR'
allSets['Portal Second Age'] = 'P02'
allSets['Portal Three Kingdoms'] = 'PTK'
# Starter
allSets['Starter 1999'] = 'S99'
allSets['Starter 2000'] = 'S00'
# Early Sets
allSets['Arabian Nights'] = 'ARN'
allSets['Antiquities'] = 'ATQ'
allSets['Legends'] = 'LEG'
allSets['The Dark'] = 'DRK'
allSets['Fallen Empires'] = 'FEM'
allSets['Homelands'] = 'HML'
# Ice Age
allSets['Ice Age'] = 'ICE'
allSets['Alliances'] = 'ALL'
allSets['Coldsnap'] = 'CSP'
# Mirage
allSets['Mirage'] = 'MIR'
allSets['Visions'] = 'VIS'
allSets['Weatherlight'] = 'WTH'
# Rath Cycle
allSets['Tempest'] = 'TMP'
allSets['Stronghold'] = 'STH'
allSets['Exodus'] = 'EXO'
# Artifacts Cycle
allSets['Urza\'s Saga'] = 'USG'
allSets['Urza\'s Legacy'] = 'ULG'
allSets['Urza\'s Destiny'] = 'UDS'
# Masques
allSets['Mercadian Masques'] = 'MMQ'
allSets['Nemesis'] = 'NMS'
allSets['Prophecy'] = 'PCY'
# Invasion
allSets['Invasion'] = 'INV'
allSets['Planeshift'] = 'PLS'
allSets['Apocalypse'] = 'APC'
# Odyssey
allSets['Odyssey'] = 'ODY'
allSets['Torment'] = 'TOR'
allSets['Judgment'] = 'JUD'
# Onslaught
allSets['Onslaught'] = 'ONS'
allSets['Legions'] = 'LGN'
allSets['Scourge'] = 'SCG'
# Mirrodin
allSets['Mirrodin'] = 'MRD'
allSets['Darksteel'] = 'DST'
allSets['Fifth Dawn'] = '5DN'
# Kamigawa
allSets['Champions of Kamigawa'] = 'CHK'
allSets['Betrayers of Kamigawa'] = 'BOK'
allSets['Saviors of Kamigawa'] = 'SOK'
# Ravnica
allSets['Ravnica: City of Guilds'] = 'RAV'
allSets['Guildpact'] = 'GPT'
allSets['Dissension'] = 'DIS'
# Time Spiral
allSets['Time Spiral'] = 'TSP'
allSets['Time Spiral "Timeshifted"'] = 'TSB'
allSets['Planar Chaos'] = 'PLC'
allSets['Future Sight'] = 'FUT'
# Lorwyn
allSets['Lorwyn'] = 'LRW'
allSets['Morningtide'] = 'MOR'
# Shadowmoor
allSets['Shadowmoor'] = 'SHM'
allSets['Eventide'] = 'EVE'
# Alara
allSets['Shards of Alara'] = 'ALA'
allSets['Conflux'] = 'CON'
allSets['Alara Reborn'] = 'ARB'
# Zendikar
allSets['Zendikar'] = 'ZEN'
allSets['Worldwake'] = 'WWK'
allSets['Rise of the Eldrazi'] = 'ROE'
# Scars of Mirrodin
allSets['Scars of Mirrodin'] = 'SOM'
allSets['Mirrodin Beseiged'] = 'MBS'
#allSets['Unknown Mirrodin Set']
def addSets(card):
html = getURL('http://magiccards.info/query?q=!'+card.name)
start = html.find('<br><u><b>Editions:</b></u><br>')
end = html.find('<br><u><b>Languages:</b></u><br>', start)
block = html[start:end]
print card.name
for edition in allSets.keys():
edIndex = block.find('>'+edition+'<') # Portal/Mirrodin issue
if edIndex == -1:
edIndex = block.find('>'+edition+' (') # Single set issue
if edIndex == -1:
continue
# Scrape rarity
rarityIndex = block.find('(',edIndex)
rarity = block[rarityIndex+1:block.find(')',rarityIndex)]
raritySpace = rarity.find(' ')
if raritySpace != -1:
rarity = rarity[0:raritySpace] # For older cards
# What to do with TimeShifted cards?
if rarity == 'Special' and edition != 'Time Spiral "Timeshifted"':
continue
# Get setAbbreviation and setNumber
dataIndex = block.rfind('"/',0,edIndex)
data = block[dataIndex+2:edIndex-1] # 1 instead of 2 because of Portal/Mirrodin Issue
splitData = data.split('/')
setAbbr = splitData[0]
setNum = splitData[2].replace('.html', '')
if len(setNum) > 4:
# Setnum not available here for most recent set. Switch to the .jpg used on page
jpgIndex = html.find('.jpg')
data = html[html.rfind('scans/en/', 0, jpgIndex):jpgIndex]
# data = scans/en/[set]/[num]
splitData = data.split('/')
setAbbr = splitData[2]
setNum = splitData[3]
image = 'http://magiccards.info/scans/en/' + setAbbr + '/' + setNum + '.jpg'
card.sets[allSets[edition]] = SetInfo(allSets[edition], rarity, image)
return
#get master card list and drop into a dictionary
folder = "cardsfolder"
err = open('setInfoScript.log','w')
allSets = {}
initSets()
cardDict = {}
setStr = 'SetInfo:'
for fileName in os.listdir(folder):
if fileName.startswith('.'):
continue
# parse cardsfolder for Card Lines and Rarity/Picture SVars. Filling in any gaps
file = open(folder + '\\' + fileName)
cleanName = fileName.replace('.txt', '')
line = file.readline().strip()
# Handle name and creation
name = line.replace('Name:','')
card = Card(name, cleanName)
cardDict[cleanName] = card
card.lines = line + '\n'
# Start parsing the rest of the data file
line = file.readline().strip()
while line != 'End':
# Skip empty lines
if line == '':
line = file.readline().strip()
continue
# We really shouldn
if line == 'End':
break
if line.find(setStr) != -1:
info = line.replace('SetInfo:','')
parts = info.split('|')
card.hasSet = True
card.sets[parts[0]] = SetInfo(parts[0], parts[1], parts[2])
else:
card.lines += line +'\n'
line = file.readline().strip()
if not card.hasSet:
addSets(card)
card.hasSet = True
file = open(folder + "/" + fileName, 'w')
file.write(card.lines)
if card.hasSet:
for s in card.sets.values():
file.write('SetInfo:'+ s.set + '|' + s.rarity + '|' + s.image + '\n')
file.write('End')
file.close()
err.write(card.name + '... Updated\n')
err.close()