Title: [Python] Bloc Dossier Script
Author: heidi666
Pastebin link: http://pastebin.com/EPfPNwW1
First Edit: Monday 20th of April 2015 08:30:36 AM CDT
Last Edit: Monday 20th of April 2015 08:30:36 AM CDT
import mechanize
import cookielib
from bs4 import BeautifulSoup as BS
import datetime
import sys
from operator import itemgetter
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:24.0) Gecko/20140610 Firefox/24.0 PaleMoon/24.6.2')]
def techlevels(alliance):
advanced = persian = almost = vietnam = korean = second = first = finest = stone = 0
for i in alliance:
if i['equipment'].rstrip() == 'Advanced':
advanced += 1
elif i['equipment'].rstrip() == 'Persian Gulf War surplus':
persian += 1
elif i['equipment'].rstrip() == 'Almost Modern':
almost += 1
elif i['equipment'].rstrip() == 'Vietnam War surplus':
vietnam += 1
elif i['equipment'].rstrip() == 'Korean War surplus':
korean += 1
elif i['equipment'].rstrip() == 'Second World War surplus':
second += 1
elif i['equipment'].rstrip() == 'First World War surplus':
first += 1
elif i['equipment'].rstrip() == 'Finest of the 19th century':
finest += 1
else:
stone += 1
return advanced, persian, almost, vietnam, korean, second, first, finest, stone
def airforcelevels(alliance):
vpowerful = powerful = large = somelarge = mediocre = meagre = small = none = 0
for i in alliance:
if i['airforce'].rstrip() == 'Very Powerful':
vpowerful += 1
elif i['airforce'].rstrip() == 'Powerful':
powerful += 1
elif i['airforce'].rstrip() == 'Large':
large += 1
elif i['airforce'].rstrip() == 'Somewhat Large':
somelarge += 1
elif i['airforce'].rstrip() == 'Mediocre':
mediocre += 1
elif i['airforce'].rstrip() == 'Meagre':
meagre += 1
elif i['airforce'].rstrip() == 'Small':
small += 1
else:
none += 1
return vpowerful, powerful, large, somelarge, mediocre, meagre, small, none
def traininglevels(alliance):
elite = good = standard = poor = rabble = 0
for i in alliance:
if i['training'].rstrip() == 'Elite':
elite += 1
elif i['training'].rstrip() == 'Good':
good += 1
elif i['training'].rstrip() == 'Standard':
standard += 1
elif i['training'].rstrip() == 'Poor':
poor += 1
else:
rabble += 1
return elite, good, standard, poor, rabble
def regionlevels(alliance):
mam = car = gra = ama = sco = saf = con = eaf = gui = waf = atl = egy = ara = mpo = per = sub = chi = ind = ein = pac = 0
for i in alliance:
if i['region'].rstrip() == 'Mesoamerica':
mam += 1
elif i['region'].rstrip() == 'Caribbean':
car += 1
elif i['region'].rstrip() == 'Gran Colombia':
gra += 1
elif i['region'].rstrip() == 'Amazonia':
ama += 1
elif i['region'].rstrip() == 'Southern Cone':
sco += 1
elif i['region'].rstrip() == 'Southern Africa':
saf += 1
elif i['region'].rstrip() == 'Congo':
con += 1
elif i['region'].rstrip() == 'East Africa':
eaf += 1
elif i['region'].rstrip() == 'Guinea':
gui += 1
elif i['region'].rstrip() == 'West Africa':
waf += 1
elif i['region'].rstrip() == 'Atlas':
atl += 1
elif i['region'].rstrip() == 'Egypt':
egy += 1
elif i['region'].rstrip() == 'Arabia':
ara += 1
elif i['region'].rstrip() == 'Mesopotamia':
mpo += 1
elif i['region'].rstrip() == 'Persia':
per += 1
elif i['region'].rstrip() == 'The Subcontinent':
sub += 1
elif i['region'].rstrip() == 'China':
chi += 1
elif i['region'].rstrip() == 'Indochina':
ind += 1
elif i['region'].rstrip() == 'East Indies':
ein += 1
elif i['region'].rstrip() == 'Pacific Rim':
pac += 1
return mam, car, gra, ama, sco, saf, con, eaf, gui, waf, atl, egy, ara, mpo, per, sub, chi, ind, ein, pac
def manpowerlevels(alliance):
untapped = plentiful = halved = low = neardep = depleted = 0
for i in alliance:
if i['manpower'].rstrip() == 'Untapped':
untapped += 1
elif i['manpower'].rstrip() == 'Plentiful':
plentiful += 1
elif i['manpower'].rstrip() == 'Halved':
halved += 1
elif i['manpower'].rstrip() == 'Low':
low += 1
elif i['manpower'].rstrip() == 'Near Depletion':
neardep += 1
elif i['manpower'].rstrip() == 'Depleted':
depleted += 1
return untapped, plentiful, halved, low, neardep, depleted
def approvallevels(alliance):
waag = adored = loved = liked = decent = middling = disliked = hated = despised = eop = 0
for i in alliance:
if i['approval'].rstrip() == 'Worshiped as a God':
waag += 1
elif i['approval'].rstrip() == 'Adored':
adored += 1
elif i['approval'].rstrip() == 'Loved':
loved += 1
elif i['approval'].rstrip() == 'Liked':
liked += 1
elif i['approval'].rstrip() == 'Decent':
decent += 1
elif i['approval'].rstrip() == 'Middling':
middling += 1
elif i['approval'].rstrip() == 'Disliked':
disliked += 1
elif i['approval'].rstrip() == 'Hated':
hated += 1
elif i['approval'].rstrip() == 'Utterly Despised':
despised += 1
elif i['approval'].rstrip() == 'Enemy of the People':
eop += 1
return waag, adored, loved, liked, decent, middling, disliked, hated, despised, eop
def polsystemlevels(alliance):
libdem = authdem = opr = junta = dictat = 0
for i in alliance:
if i['polsystem'].rstrip() == 'Liberal Democracy':
libdem += 1
elif i['polsystem'].rstrip() == 'Authoritarian Democracy':
authdem += 1
elif i['polsystem'].rstrip() == 'One Party Rule':
opr += 1
elif i['polsystem'].rstrip() == 'Military Junta':
junta += 1
elif i['polsystem'].rstrip() == 'Dictatorship':
dictat += 1
return libdem, authdem, opr, junta, dictat
def stabilitylevels(alliance):
unsink = entrenched = vstable = quiet = calm = tensions = chaotic = rioting = protests = collapse = 0
for i in alliance:
if i['stability'].rstrip() == 'Unsinkable':
unsink += 1
elif i['stability'].rstrip() == 'Entrenched':
entrenched += 1
elif i['stability'].rstrip() == 'Very Stable':
vstable += 1
elif i['stability'].rstrip() == 'Quiet':
quiet += 1
elif i['stability'].rstrip() == 'Seemingly Calm':
calm += 1
elif i['stability'].rstrip() == 'Growing Tensions':
tensions += 1
elif i['stability'].rstrip() == 'Chaotic':
chaotic += 1
elif i['stability'].rstrip() == 'Rioting':
rioting += 1
elif i['stability'].rstrip() == 'Mass Protests':
protests += 1
elif i['stability'].rstrip() == 'Brink of Collapse':
collapse += 1
return unsink, entrenched, vstable, quiet, calm, tensions, chaotic, rioting, protests, collapse
def rebelslevels(alliance):
norebels = terror = guerrilla = rebellion = civil = 0
for i in alliance:
if i['rebels'].rstrip() == 'None':
norebels += 1
elif i['rebels'].rstrip() == 'Scattered terrorists':
terror += 1
elif i['rebels'].rstrip() == 'Guerrillas':
guerrilla += 1
elif i['rebels'].rstrip() == 'Open Rebellion':
rebellion += 1
elif i['rebels'].rstrip() == 'Civil War':
civil += 1
return norebels, terror, guerrilla, rebellion, civil
def econsystemlevels(alliance):
free = mixed = command = 0
for i in alliance:
if i['econsystem'].rstrip() == 'Free Market':
free += 1
elif i['econsystem'].rstrip() == 'Mixed Economy':
mixed += 1
elif i['econsystem'].rstrip() == 'Central Planning':
command += 1
return free, mixed, command
def qollevels(alliance):
developed = good = decent = above = average = poor = impov = desp = disast = crisis = 0
for i in alliance:
if i['qol'].rstrip() == 'Developed':
developed += 1
elif i['qol'].rstrip() == 'Good':
good += 1
elif i['qol'].rstrip() == 'Decent':
decent += 1
elif i['qol'].rstrip() == 'Above Average':
above += 1
elif i['qol'].rstrip() == 'Average':
average += 1
elif i['qol'].rstrip() == 'Poor':
poor += 1
elif i['qol'].rstrip() == 'Impoverished':
impov += 1
elif i['qol'].rstrip() == 'Desperate':
desp += 1
elif i['qol'].rstrip() == 'Disastrous':
disast += 1
else:
crisis += 1
return developed, good, decent, above, average, poor, impov, desp, disast, crisis
def alignlevels(alliance):
west = non = east = 0
for i in alliance:
if i['alignment'].rstrip() == 'United States':
west += 1
elif i['alignment'].rstrip() == 'Neutral':
non += 1
elif i['alignment'].rstrip() == 'Soviet Union':
east += 1
return west, non, east
def replevels(alliance):
gandhi = angelic = nice = good = normal = quest = isolated = pariah = maddog = aoe = 0
for i in alliance:
if i['reputation'].rstrip() == 'Gandhi-like':
gandhi += 1
elif i['reputation'].rstrip() == 'Angelic':
angelic += 1
elif i['reputation'].rstrip() == 'Nice':
nice += 1
elif i['reputation'].rstrip() == 'Good':
good += 1
elif i['reputation'].rstrip() == 'Normal':
normal += 1
elif i['reputation'].rstrip() == 'Questionable':
quest += 1
elif i['reputation'].rstrip() == 'Isolated':
isolated += 1
elif i['reputation'].rstrip() == 'Pariah':
pariah += 1
elif i['reputation'].rstrip() == 'Mad Dog':
maddog += 1
elif i['reputation'].rstrip() == 'Axis of Evil':
aoe += 1
return gandhi, angelic, nice, good, normal, quest, isolated, pariah, maddog, aoe
def regiontroops(alliance):
mam = car = gra = ama = sco = saf = con = eaf = gui = waf = atl = egy = ara = mpo = per = sub = chi = ind = ein = pac = 0
for i in alliance:
if i['region'].rstrip() == 'Mesoamerica':
mam += i['troops']
elif i['region'].rstrip() == 'Caribbean':
car += i['troops']
elif i['region'].rstrip() == 'Gran Colombia':
gra += i['troops']
elif i['region'].rstrip() == 'Amazonia':
ama += i['troops']
elif i['region'].rstrip() == 'Southern Cone':
sco += i['troops']
elif i['region'].rstrip() == 'Southern Africa':
saf += i['troops']
elif i['region'].rstrip() == 'Congo':
con += i['troops']
elif i['region'].rstrip() == 'East Africa':
eaf += i['troops']
elif i['region'].rstrip() == 'Guinea':
gui += i['troops']
elif i['region'].rstrip() == 'West Africa':
waf += i['troops']
elif i['region'].rstrip() == 'Atlas':
atl += i['troops']
elif i['region'].rstrip() == 'Egypt':
egy += i['troops']
elif i['region'].rstrip() == 'Arabia':
ara += i['troops']
elif i['region'].rstrip() == 'Mesopotamia':
mpo += i['troops']
elif i['region'].rstrip() == 'Persia':
per += i['troops']
elif i['region'].rstrip() == 'The Subcontinent':
sub += i['troops']
elif i['region'].rstrip() == 'China':
chi += i['troops']
elif i['region'].rstrip() == 'Indochina':
ind += i['troops']
elif i['region'].rstrip() == 'East Indies':
ein += i['troops']
elif i['region'].rstrip() == 'Pacific Rim':
pac += i['troops']
return mam, car, gra, ama, sco, saf, con, eaf, gui, waf, atl, egy, ara, mpo, per, sub, chi, ind, ein, pac
def getsoup(url):
while True:
try:
temp = br.open(url)
except:
print "Timeout, requesting again."
else:
break
html = temp.read()
soup = BS(html)
# print soup.prettify()
return soup
def getdata(soup):
data = {}
if soup.find(size="2").string == 'online now':
data['online'] = 0
else:
data['online'] = int(soup.find(size="2").string[12:-10])
data['name'] = soup.find(id="nationtitle").string
data['approval'] = soup.find(text='Approval:').parent.next_sibling.next_sibling.contents[0].string
data['polsystem'] = soup.find(text='Political System:').parent.next_sibling.next_sibling.contents[0].string
data['stability'] = soup.find(text='Stability:').parent.next_sibling.next_sibling.contents[0].string
data['qol'] = soup.find(text='Quality of Life:').parent.next_sibling.next_sibling.contents[0].string
data['territory'] = int(str(soup.find(text='Territory:').parent.next_sibling.next_sibling.contents)[4:-20])
data['rebels'] = soup.find(text='Rebel Threat:').parent.next_sibling.next_sibling.contents[0].string
data['econsystem'] = soup.find(text='Economic System:').parent.next_sibling.next_sibling.contents[0].string
if soup.find(text='Industry:').parent.next_sibling.next_sibling.contents[0].string == 'None':
data['factories'] = 0
elif soup.find(text='Industry:').parent.next_sibling.next_sibling.contents[0].string == '1 factory':
data['factories'] = 1
else:
data['factories'] = int(soup.find(text='Industry:').parent.next_sibling.next_sibling.contents[0].string[:-10])
data['gdp'] = int(soup.find(text='Gross Domestic Product:').parent.next_sibling.next_sibling.contents[0].string[1:-8])
data['growth'] = int(soup.find(text='Growth:').parent.next_sibling.next_sibling.contents[0].string[1:-18])
if soup.find(text='Discovered Oil Reserves:').parent.next_sibling.next_sibling.contents[0].string == 'None':
data['oilres'] = 0
else:
data['oilres'] = int(soup.find(text='Discovered Oil Reserves:').parent.next_sibling.next_sibling.contents[0].string[:-5])
if soup.find(text='Oil Production:').parent.next_sibling.next_sibling.contents[0].string == 'None':
data['oilprod'] = 0
else:
data['oilprod'] = int(soup.find(text='Oil Production:').parent.next_sibling.next_sibling.contents[0].string[:-15])
try:
data['rmprod'] = int(soup.find(text='Raw Material Production:').parent.next_sibling.next_sibling.contents[0].string[:-23])
except:
print "rm" + soup.find(text='Raw Material Production:').parent.next_sibling.next_sibling.contents[0].string
data['alignment'] = soup.find(text='Official Alignment:').parent.next_sibling.next_sibling.contents[0].string
data['region'] = soup.find(text='Region:').parent.next_sibling.next_sibling.contents[0].string
data['reputation'] = soup.find(text='Reputation:').parent.next_sibling.next_sibling.contents[0].string
try:
data['troops'] = int(soup.find(text='Army Size:').parent.next_sibling.next_sibling.contents[0].string[:-18])
except:
print 'tr' + soup.find(text='Army Size:').parent.next_sibling.next_sibling.contents[0].string
data['manpower'] = soup.find(text='Manpower:').parent.next_sibling.next_sibling.contents[0].string
data['equipment'] = soup.find(text='Equipment:').parent.next_sibling.next_sibling.contents[0].string
data['training'] = soup.find(text='Training:').parent.next_sibling.next_sibling.contents[0].string
data['airforce'] = soup.find(text='Airforce:').parent.next_sibling.next_sibling.contents[0].string
if soup.find(text='Wars:').parent.next_sibling.next_sibling.contents[0].string == 'At peace.':
data['wars'] = 'peace'
else:
data['wars'] = 'war'
if soup.find(text='Uranium:') == None:
data['uranium'] = 0
else:
data['uranium'] = int(soup.find(text='Uranium:').parent.next_sibling.next_sibling.contents[0].string[:-5])
return data
def process(data):
generaldata = []
troopdata = []
for alliance in data:
datad = {}
troopd = {}
gdp = growth = troops = factories = territory = rmprod = oilprod = oilres = uranium = inactive = 0
for nation in alliance:
gdp += nation['gdp']
growth += nation['growth']
troops += nation['troops']
factories += nation['factories']
territory += nation['territory']
rmprod += nation['rmprod']
oilprod += nation['oilprod']
oilres += nation['oilres']
uranium += nation['uranium']
inactive += nation['online']
datad['size'] = len(alliance)
datad['gdp'] = gdp
datad['avggdp'] = round(gdp/float(len(alliance)), 1)
datad['growth'] = growth
datad['avggrowth'] = round(growth/float(len(alliance)), 1)
datad['factories'] = factories
datad['avgfactories'] = round(factories/float(len(alliance)), 1)
datad['territory'] = territory
datad['avgterritory'] = round(territory/float(len(alliance)), 1)
datad['rmprod'] = rmprod
datad['avgrmprod'] = round(rmprod/float(len(alliance)), 1)
datad['oilprod'] = oilprod
datad['avgoilprod'] = round(oilprod/float(len(alliance)), 1)
datad['oilres'] = oilres
datad['avgoilres'] = round(oilres/float(len(alliance)), 1)
datad['inactive'] = inactive
datad['avginactive'] = round(inactive/float(len(alliance)), 1)
datad['uranium'] = uranium
datad['advanced'], datad['persian'], datad['almost'], datad['vietnam'], datad['korean'], datad['second'], \
datad['first'], datad['finest'], datad['stone'] = techlevels(alliance)
datad['vpowerful'], datad['powerful'], datad['large'], datad['somelarge'], datad['mediocre'], datad['meagre'], \
datad['small'], datad['noair'] = airforcelevels(alliance)
datad['elite'], datad['good'], datad['standard'], datad['poortr'], datad['rabble'] = traininglevels(alliance)
datad['mam'], datad['car'], datad['gra'], datad['ama'], datad['sco'], datad['saf'], datad['con'], datad['eaf'], \
datad['gui'], datad['waf'], datad['atl'], datad['egy'], datad['ara'], datad['mpo'], datad['per'], datad['sub'], \
datad['chi'], datad['ind'], datad['ein'], datad['pac'] = regionlevels(alliance)
datad['untapped'], datad['plentiful'], datad['halved'], datad['low'], datad['neardep'], datad['depleted'] = manpowerlevels(alliance)
datad['waag'], datad['adored'], datad['loved'], datad['liked'], datad['decent'], datad['middling'], datad['disliked'], \
datad['hated'], datad['despised'], datad['eop'] = approvallevels(alliance)
datad['libdem'], datad['authdem'], datad['opr'], datad['junta'], datad['dictat'] = polsystemlevels(alliance)
datad['unsink'], datad['entren'], datad['vstable'], datad['quiet'], datad['calm'], datad['tensions'], datad['chaotic'], \
datad['rioting'], datad['protests'], datad['collapse'] = stabilitylevels(alliance)
datad['norebels'], datad['terror'], datad['guerrilla'], datad['rebellion'], datad['civil'] = rebelslevels(alliance)
datad['free'], datad['mixed'], datad['command'] = econsystemlevels(alliance)
datad['developed'], datad['good'], datad['decent'], datad['above'], datad['average'], datad['poorqol'], datad['impov'], \
datad['desp'], datad['disast'], datad['crisis'] = qollevels(alliance)
datad['west'], datad['non'], datad['east'] = alignlevels(alliance)
datad['gandhi'], datad['angelic'], datad['nice'], datad['good'], datad['normal'], datad['quest'], datad['isolated'], \
datad['pariah'], datad['maddog'], datad['aoe'] = replevels(alliance)
troopd['troops'] = troops
troopd['avgtroops'] = round(troops/float(len(alliance)), 1)
troopd['mam'], troopd['car'], troopd['gra'], troopd['ama'], troopd['sco'], troopd['saf'], troopd['con'], troopd['eaf'], \
troopd['gui'], troopd['waf'], troopd['atl'], troopd['egy'], troopd['ara'], troopd['mpo'], troopd['per'], troopd['sub'], \
troopd['chi'], troopd['ind'], troopd['ein'], troopd['pac'] = regiontroops(alliance)
generaldata.append(datad)
troopdata.append(troopd)
return generaldata, troopdata, uraniumlist
def difference(newdata, newtroopdata, prevdata, prevtroopdata):
datad = {}
troopd = {}
datad['size'] = newdata['size'] - prevdata['size']
datad['gdp'] = newdata['gdp'] - prevdata['gdp']
datad['avggdp'] = newdata['avggdp'] - prevdata['avggdp']
datad['growth'] = newdata['growth'] - prevdata['growth']
datad['avggrowth'] = newdata['avggrowth'] - prevdata['avggrowth']
datad['factories'] = newdata['factories'] - prevdata['factories']
datad['avgfactories'] = newdata['avgfactories'] - prevdata['avgfactories']
datad['territory'] = newdata['territory'] - prevdata['territory']
datad['avgterritory'] = newdata['avgterritory'] - prevdata['avgterritory']
datad['rmprod'] = newdata['rmprod'] - prevdata['rmprod']
datad['avgrmprod'] = newdata['avgrmprod'] - prevdata['avgrmprod']
datad['oilprod'] = newdata['oilprod'] - prevdata['oilprod']
datad['avgoilprod'] = newdata['avgoilprod'] - prevdata['avgoilprod']
datad['oilres'] = newdata['oilres'] - prevdata['oilres']
datad['avgoilres'] = newdata['avgoilres'] - prevdata['avgoilres']
datad['inactive'] = newdata['inactive'] - prevdata['inactive']
datad['avginactive'] = newdata['avginactive'] - prevdata['avginactive']
datad['uranium'] = newdata['uranium'] - prevdata['uranium']
datad['advanced'] = newdata['advanced'] - prevdata['advanced']
datad['persian'] = newdata['persian'] - prevdata['persian']
datad['almost'] = newdata['almost'] - prevdata['almost']
datad['vietnam'] = newdata['vietnam'] - prevdata['vietnam']
datad['korean'] = newdata['korean'] - prevdata['korean']
datad['second'] = newdata['second'] - prevdata['second']
datad['first'] = newdata['first'] - prevdata['first']
datad['finest'] = newdata['finest'] - prevdata['finest']
datad['stone'] = newdata['stone'] - prevdata['stone']
datad['vpowerful'] = newdata['vpowerful'] - prevdata['vpowerful']
datad['powerful'] = newdata['powerful'] - prevdata['powerful']
datad['large'] = newdata['large'] - prevdata['large']
datad['somelarge'] = newdata['somelarge'] - prevdata['somelarge']
datad['mediocre'] = newdata['mediocre'] - prevdata['mediocre']
datad['meagre'] = newdata['meagre'] - prevdata['meagre']
datad['small'] = newdata['small'] - prevdata['small']
datad['noair'] = newdata['noair'] - prevdata['noair']
datad['elite'] = newdata['elite'] - prevdata['elite']
datad['good'] = newdata['good'] - prevdata['good']
datad['standard'] = newdata['standard'] - prevdata['standard']
datad['poortr'] = newdata['poortr'] - prevdata['poortr']
datad['rabble'] = newdata['rabble'] - prevdata['rabble']
datad['mam'] = newdata['mam'] - prevdata['mam']
datad['car'] = newdata['car'] - prevdata['car']
datad['gra'] = newdata['gra'] - prevdata['gra']
datad['ama'] = newdata['ama'] - prevdata['ama']
datad['sco'] = newdata['sco'] - prevdata['sco']
datad['saf'] = newdata['saf'] - prevdata['saf']
datad['con'] = newdata['con'] - prevdata['con']
datad['eaf'] = newdata['eaf'] - prevdata['eaf']
datad['gui'] = newdata['gui'] - prevdata['gui']
datad['waf'] = newdata['waf'] - prevdata['waf']
datad['atl'] = newdata['atl'] - prevdata['atl']
datad['egy'] = newdata['egy'] - prevdata['egy']
datad['ara'] = newdata['ara'] - prevdata['ara']
datad['mpo'] = newdata['mpo'] - prevdata['mpo']
datad['per'] = newdata['per'] - prevdata['per']
datad['sub'] = newdata['sub'] - prevdata['sub']
datad['chi'] = newdata['chi'] - prevdata['chi']
datad['ind'] = newdata['ind'] - prevdata['ind']
datad['ein'] = newdata['ein'] - prevdata['ein']
datad['pac'] = newdata['pac'] - prevdata['pac']
datad['untapped'] = newdata['untapped'] - prevdata['untapped']
datad['plentiful'] = newdata['plentiful'] - prevdata['plentiful']
datad['halved'] = newdata['halved'] - prevdata['halved']
datad['low'] = newdata['low'] - prevdata['low']
datad['neardep'] = newdata['neardep'] - prevdata['neardep']
datad['depleted'] = newdata['depleted'] - prevdata['depleted']
datad['waag'] = newdata['waag'] - prevdata['waag']
datad['adored'] = newdata['adored'] - prevdata['adored']
datad['loved'] = newdata['loved'] - prevdata['loved']
datad['liked'] = newdata['liked'] - prevdata['liked']
datad['decent'] = newdata['decent'] - prevdata['decent']
datad['middling'] = newdata['middling'] - prevdata['middling']
datad['disliked'] = newdata['disliked'] - prevdata['disliked']
datad['hated'] = newdata['hated'] - prevdata['hated']
datad['despised'] = newdata['despised'] - prevdata['despised']
datad['eop'] = newdata['eop'] - prevdata['eop']
datad['libdem'] = newdata['libdem'] - prevdata['libdem']
datad['authdem'] = newdata['authdem'] - prevdata['authdem']
datad['opr'] = newdata['opr'] - prevdata['opr']
datad['junta'] = newdata['junta'] - prevdata['junta']
datad['dictat'] = newdata['dictat'] - prevdata['dictat']
datad['unsink'] = newdata['unsink'] - prevdata['unsink']
datad['entren'] = newdata['entren'] - prevdata['entren']
datad['vstable'] = newdata['vstable'] - prevdata['vstable']
datad['quiet'] = newdata['quiet'] - prevdata['quiet']
datad['calm'] = newdata['calm'] - prevdata['calm']
datad['tensions'] = newdata['tensions'] - prevdata['tensions']
datad['chaotic'] = newdata['chaotic'] - prevdata['chaotic']
datad['rioting'] = newdata['rioting'] - prevdata['rioting']
datad['protests'] = newdata['protests'] - prevdata['protests']
datad['collapse'] = newdata['collapse'] - prevdata['collapse']
datad['norebels'] = newdata['norebels'] - prevdata['norebels']
datad['terror'] = newdata['terror'] - prevdata['terror']
datad['guerrilla'] = newdata['guerrilla'] - prevdata['guerrilla']
datad['rebellion'] = newdata['rebellion'] - prevdata['rebellion']
datad['civil'] = newdata['civil'] - prevdata['civil']
datad['free'] = newdata['free'] - prevdata['free']
datad['mixed'] = newdata['mixed'] - prevdata['mixed']
datad['command'] = newdata['command'] - prevdata['command']
datad['developed'] = newdata['developed'] - prevdata['developed']
datad['good'] = newdata['good'] - prevdata['good']
datad['decent'] = newdata['decent'] - prevdata['decent']
datad['above'] = newdata['above'] - prevdata['above']
datad['average'] = newdata['average'] - prevdata['average']
datad['poorqol'] = newdata['poorqol'] - prevdata['poorqol']
datad['impov'] = newdata['impov'] - prevdata['impov']
datad['desp'] = newdata['desp'] - prevdata['desp']
datad['disast'] = newdata['disast'] - prevdata['disast']
datad['crisis'] = newdata['crisis'] - prevdata['crisis']
datad['west'] = newdata['west'] - prevdata['west']
datad['non'] = newdata['non'] - prevdata['non']
datad['east'] = newdata['east'] - prevdata['east']
datad['gandhi'] = newdata['gandhi'] - prevdata['gandhi']
datad['angelic'] = newdata['angelic'] - prevdata['angelic']
datad['nice'] = newdata['nice'] - prevdata['nice']
datad['good'] = newdata['good'] - prevdata['good']
datad['normal'] = newdata['normal'] - prevdata['normal']
datad['quest'] = newdata['quest'] - prevdata['quest']
datad['isolated'] = newdata['isolated'] - prevdata['isolated']
datad['pariah'] = newdata['pariah'] - prevdata['pariah']
datad['maddog'] = newdata['maddog'] - prevdata['maddog']
datad['aoe'] = newdata['aoe'] - prevdata['aoe']
troopd['troops'] = newtroopdata['troops'] - prevtroopdata['troops']
troopd['avgtroops'] = newtroopdata['avgtroops'] - prevtroopdata['avgtroops']
troopd['mam'] = newtroopdata['mam'] - prevtroopdata['mam']
troopd['car'] = newtroopdata['car'] - prevtroopdata['car']
troopd['gra'] = newtroopdata['gra'] - prevtroopdata['gra']
troopd['ama'] = newtroopdata['ama'] - prevtroopdata['ama']
troopd['sco'] = newtroopdata['sco'] - prevtroopdata['sco']
troopd['saf'] = newtroopdata['saf'] - prevtroopdata['saf']
troopd['con'] = newtroopdata['con'] - prevtroopdata['con']
troopd['eaf'] = newtroopdata['eaf'] - prevtroopdata['eaf']
troopd['gui'] = newtroopdata['gui'] - prevtroopdata['gui']
troopd['waf'] = newtroopdata['waf'] - prevtroopdata['waf']
troopd['atl'] = newtroopdata['atl'] - prevtroopdata['atl']
troopd['egy'] = newtroopdata['egy'] - prevtroopdata['egy']
troopd['ara'] = newtroopdata['ara'] - prevtroopdata['ara']
troopd['mpo'] = newtroopdata['mpo'] - prevtroopdata['mpo']
troopd['per'] = newtroopdata['per'] - prevtroopdata['per']
troopd['sub'] = newtroopdata['sub'] - prevtroopdata['sub']
troopd['chi'] = newtroopdata['chi'] - prevtroopdata['chi']
troopd['ind'] = newtroopdata['ind'] - prevtroopdata['ind']
troopd['ein'] = newtroopdata['ein'] - prevtroopdata['ein']
troopd['pac'] = newtroopdata['pac'] - prevtroopdata['pac']
return datad, troopd
print "\nLogging in..."
while True:
try:
loginresponse = br.open('http://blocgame.com')
except:
print "Timeout, requesting again."
else:
break
br.form = list(br.forms())[0]
br["username"] = 'username'
br["password"] = 'password'
response = br.submit()
# print BS(response.read())
print "Done."
alliancelinks = []
print "\nGetting alliance urls..."
for i in range(1,3):
soup = getsoup('http://blocgame.com/alliancerankings.php?page=%s' % i)
# print soup.prettify()
for link in soup.find_all('a'):
text = str(link.get('href'))
if 'alliancestats.php?allianceid=' in text and '=0' not in text:
alliancelinks.append(link.get('href'))
print "Done."
j = 1
names = []
data = []
uraniumlist = []
for i in alliancelinks:
print "\nGathering data on alliance %s of %s..." % (j, len(alliancelinks))
alliance = []
nations = []
soup = getsoup('http://blocgame.com/%s' % i)
names.append(soup.find('h1').string)
print ' Gathering nation links...'
for link in soup.find_all('a'):
if 'stats.php?id=' in str(link.get('href')):
nations.append(link.get('href'))
print ' %s nations found.' % str(len(nations))
k = 1
for i in nations:
soup = getsoup('http://blocgame.com/%s' % i)
nationdata = getdata(soup)
nationdata['id'] = i[13:]
if nationdata['uranium'] > 0:
uraniumlist.append({'name':nationdata['name'], 'id':nationdata['id'], 'uranium':nationdata['uranium']})
alliance.append(nationdata)
print ' %s of %s' % (str(k), str(len(nations)))
k += 1
data.append(alliance)
j += 1
print "Done."
uraniumlist.sort(key=itemgetter('uranium'), reverse=True)
from info import prevnow, prevdata, prevnames
now = datetime.datetime.utcnow()
with open('info.py', 'w') as f:
f.write("import datetime\n")
f.write("prevnow = %s\n" % repr(now))
f.write("prevnames = %s\n" % repr(names))
f.write("prevdata = %s" % repr(data))
generaldata, troopdata = process(data)
prevgeneraldata, prevtroopdata, prevuraniumlist = process(prevdata)
diffnames = []
diffgeneraldata = []
difftroopdata = []
for alliance in names:
if alliance in prevnames:
diffnames.append(alliance)
newindex = names.index(alliance)
oldindex = prevnames.index(alliance)
diffgend, difftroopd = difference(generaldata[newindex], troopdata[newindex], prevgeneraldata[oldindex], prevtroopdata[oldindex])
diffgeneraldata.append(diffgend)
difftroopdata.append(difftroopd)
########################################################
print "\nOutputting PDF..."
from reportlab.lib.styles import ParagraphStyle as PS
from reportlab.platypus import PageBreak, Image, Table, TableStyle, Spacer
from reportlab.platypus.paragraph import Paragraph
from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate
from reportlab.platypus.tableofcontents import TableOfContents
from reportlab.platypus.frames import Frame
from reportlab.lib.units import cm
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
regions = ['Mesoamerica','Caribbean','Gran Colombia','Amazonia','Southern Cone','Southern Africa','Congo','East Africa','Guinea',
'West Africa','Atlas','Egypt','Arabia','Mesopotamia','Persia','The Subcontinent','China','Indochina','East Indies','Pacific Rim']
alignments = ['West', 'Neutral', 'East']
polsystems = ['Liberal Democracy','Authoritarian Democracy','One Party Rule','Military Junta','Dictatorship']
econsystems = ['Free Market','Mixed Economy','Central Planning']
approvallevels = ['Worshiped as a God','Adored','Loved','Liked','Decent','Middling','Disliked','Hated','Despised','Enemy of the People']
stabilitylevels = ['Unsinkable','Entrenched','Very Stable','Quiet','Calm','Growing Tensions','Chaotic','Rioting','Mass Protests','Brink of Collapse']
rebellevels = ['None','Scattered Terrorists','Guerrillas','Open Rebellion','Civil War']
qollevels = ['Developed','Good','Decent','Above Average','Average','Poor','Impoverished','Desperate','Disastrous','Humanitarian Crisis']
reputationlevels = ['Gandhi-Like','Angelic','Nice','Good','Normal','Questionable','Isolated','Pariah','Mad Dog','Axis of Evil']
techlevels = ['Advanced','Persian','Almost Modern','Vietnam','Korean','World War II','World War I','19th Century','Stone Age']
airforcelevels = ['Very Powerful','Powerful','Large','Somewhat Large','Mediocre','Meagre','Small','None']
traininglevels = ['Elite','Good','Standard','Poor','Rabble']
manpowerlevels = ['Untapped','Plentiful','Halved','Low','Near Depletion','Depleted']
class MyDocTemplate(BaseDocTemplate):
def __init__(self, filename, **kw):
self.allowSplitting = 0
apply(BaseDocTemplate.__init__, (self, filename), kw)
template = PageTemplate('normal', [Frame(1.5*cm, 1.5*cm, 18*cm, 26.7*cm, id='F1')])
self.addPageTemplates(template)
def afterFlowable(self, flowable):
"Registers TOC entries."
if flowable.__class__.__name__ == 'Paragraph':
text = flowable.getPlainText()
style = flowable.style.name
if style == 'Heading1':
level = 0
elif style == 'Heading2':
level = 1
else:
return
E = [level, text, self.page]
#if we have a bookmark name append that to our notify data
bn = getattr(flowable,'_bookmarkName',None)
if bn is not None: E.append(bn)
self.notify('TOCEntry', tuple(E))
def doHeading(text,sty):
from hashlib import sha1
bn=sha1(text+sty.name).hexdigest()
h=Paragraph(text+'' % bn,sty)
h._bookmarkName=bn
story.append(h)
def maketable(tdata):
t = Table(tdata)
t.setStyle(TableStyle([('ALIGN',(0,0),(-1,-1),'LEFT'),('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),('BOX', (0,0), (-1,-1), 0.25, colors.black)]))
story.append(t)
story.append(Spacer(cm, 1*cm))
def tableonly(name, categories, data):
for index, value in enumerate(data):
if value > 0:
data[index] = Paragraph('+%s' % value, PS('body'))
elif value < 0:
data[index] = Paragraph('%s' % value, PS('body'))
tdata = [(name, 'Difference')] + [(categories[i], data[i]) for i in range(len(categories))]
maketable(tdata)
def graphanddata(xdata, ydata, ylabel, no):
N = len(xdata)
means = ydata
ind = np.arange(N) # the x locations for the groups
width = 0.75 # the width of the bars
fig = plt.figure(figsize=(5,4))
plt.subplots_adjust(bottom=0.25)
ax = fig.add_subplot(111)
rects = ax.bar(ind, means, width, color='r')
ax.set_ylabel(ylabel)
ax.grid(b=True, which='major', axis='y', zorder=3)
ax.set_xticks(ind+0.40)
ax.set_axisbelow(True)
ax.set_xlim(left=-0.25)
ax.set_xticklabels(xdata, fontsize=8, rotation='vertical')
ax.tick_params(direction='out', top=False, bottom=False, right=False)
plt.savefig('foo%s.png' % no, bbox_inches='tight')
plt.close()
f = open('foo%s.png' % no, 'rb')
story.append(Image(f))
if len(xdata) <= 10:
tdata = [(xdata[i], ydata[i]) for i in range(len(xdata))]
else:
tdata = [(xdata[i], ydata[i], xdata[i+10], ydata[i+10]) for i in range(10)]
maketable(tdata)
story.append(PageBreak())
title = PS(name='title', fontSize=50, leading=16, alignment=1, spaceAfter=20)
smallertitle = PS(name='smallertitle', fontSize=30, leading=16, alignment=1, spaceAfter=20)
h1 = PS(name='Heading1', fontSize=25, leading=15, spaceAfter=30)
h2 = PS(name='Heading2', fontSize=16, leading=8, spaceAfter=20)
h3 = PS(name='Heading3', fontSize=14, leading=8, spaceAfter=20)
tagline = PS(name='tagline', fontSize=20, leading=14, alignment=1)
story = []
toc = TableOfContents()
toc.levelStyles = [
PS(fontName='Times-Bold', fontSize=15, name='TOCHeading1', leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=5),
PS(fontSize=12, name='TOCHeading2', leftIndent=40, firstLineIndent=-20, spaceBefore=3, leading=3),
PS(fontSize=12, name='TOCHeading3', leftIndent=60, firstLineIndent=-20, spaceBefore=3, leading=3),
]
story.append(Paragraph('>BLOC Dossier', title))
story.append(Spacer(cm, 1*cm))
story.append(Paragraph('Generated on %s' % now.strftime('%d %B, %H:%M:%S'), tagline))
story.append(Spacer(cm, 1.5*cm))
story.append(Image('insert.png', 15*cm, 21*cm))
story.append(PageBreak())
story.append(Paragraph('Table of Contents', smallertitle))
story.append(toc)
story.append(PageBreak())
print ' Initial done.'
doHeading('General Comparisons', h1)
doHeading('Alliance Size', h2)
data = [alliance['size'] for alliance in generaldata]
graphanddata(names, data, 'Alliance Size', 1)
doHeading('Total GDP', h2)
data = [alliance['gdp'] for alliance in generaldata]
graphanddata(names, data, 'Total GDP ($million)', 2)
doHeading('Average GDP', h2)
data = [alliance['avggdp'] for alliance in generaldata]
graphanddata(names, data, 'Average GDP ($million)', 3)
doHeading('Total growth', h2)
data = [alliance['growth'] for alliance in generaldata]
graphanddata(names, data, 'Total growth ($million / month)', 4)
doHeading('Average growth', h2)
data = [alliance['avggrowth'] for alliance in generaldata]
graphanddata(names, data, 'Average growth ($million / month)', 5)
doHeading('Total troops', h2)
data = [alliance['troops'] for alliance in troopdata]
graphanddata(names, data, 'Total troops (k)', 19)
doHeading('Average troops', h2)
data = [alliance['avgtroops'] for alliance in troopdata]
graphanddata(names, data, 'Average troops (k)', 20)
doHeading('Total Factories', h2)
data = [alliance['factories'] for alliance in generaldata]
graphanddata(names, data, 'Total Factories', 6)
doHeading('Average Factories', h2)
data = [alliance['avgfactories'] for alliance in generaldata]
graphanddata(names, data, 'Average Factories', 7)
doHeading('Total RM production', h2)
data = [alliance['rmprod'] for alliance in generaldata]
graphanddata(names, data, 'Total RM production (100 Tons / month)', 8)
doHeading('Average RM production', h2)
data = [alliance['avgrmprod'] for alliance in generaldata]
graphanddata(names, data, 'Average RM production (100 Tons / month)', 9)
doHeading('Total oil production', h2)
data = [alliance['oilprod'] for alliance in generaldata]
graphanddata(names, data, 'Total oil production (Mbbl / month)', 10)
doHeading('Average oil production', h2)
data = [alliance['avgoilprod'] for alliance in generaldata]
graphanddata(names, data, 'Average oil production (Mbbl / month)', 11)
doHeading('Total oil reserves', h2)
data = [alliance['oilres'] for alliance in generaldata]
graphanddata(names, data, 'Total oil reserves (Mbbl)', 12)
doHeading('Average oil reserves', h2)
data = [alliance['avgoilres'] for alliance in generaldata]
graphanddata(names, data, 'Average oil reserves (Mbbl)', 13)
doHeading('Total territory', h2)
data = [alliance['territory'] for alliance in generaldata]
graphanddata(names, data, 'Total territory (km^2)', 14)
doHeading('Average territory', h2)
data = [alliance['avgterritory'] for alliance in generaldata]
graphanddata(names, data, 'Average territory (km^2)', 15)
doHeading('Total time inactive', h2)
data = [alliance['inactive'] for alliance in generaldata]
graphanddata(names, data, 'Total time inactive (hours)', 16)
doHeading('Average time inactive', h2)
data = [alliance['avginactive'] for alliance in generaldata]
graphanddata(names, data, 'Average time inactive (hours)', 17)
doHeading('Total uranium', h2)
data = [alliance['uranium'] for alliance in generaldata]
graphanddata(names, data, 'Total uranium (Tons)', 18)
print ' General comparisons done.'
doHeading('Alliance Panels', h1)
for i in range(len(names)):
doHeading('%s' % names[i], h2)
story.append(Paragraph('Tech Level counts', h3))
data = [generaldata[i]['advanced'], generaldata[i]['persian'], generaldata[i]['almost'], generaldata[i]['vietnam'], generaldata[i]['korean'],
generaldata[i]['second'], generaldata[i]['first'], generaldata[i]['finest'], generaldata[i]['stone']]
graphanddata(techlevels, data, 'No. of nations', 30+14*i)
story.append(Paragraph('Training Level counts', h3))
data = [generaldata[i]['elite'], generaldata[i]['good'], generaldata[i]['standard'], generaldata[i]['poortr'], generaldata[i]['rabble']]
graphanddata(traininglevels, data, 'No. of nations', 32+14*i)
story.append(Paragraph('Airforce Level counts', h3))
data = [generaldata[i]['vpowerful'], generaldata[i]['powerful'], generaldata[i]['large'], generaldata[i]['somelarge'],
generaldata[i]['mediocre'], generaldata[i]['meagre'], generaldata[i]['small'], generaldata[i]['noair']]
graphanddata(airforcelevels, data, 'No. of nations', 31+14*i)
story.append(Paragraph('Manpower Level counts', h3))
data = [generaldata[i]['untapped'], generaldata[i]['plentiful'], generaldata[i]['halved'], generaldata[i]['low'],
generaldata[i]['neardep'], generaldata[i]['depleted']]
graphanddata(manpowerlevels, data, 'No. of nations', 33+14*i)
story.append(Paragraph('Region counts', h3))
data = [generaldata[i]['mam'], generaldata[i]['car'], generaldata[i]['gra'], generaldata[i]['ama'], generaldata[i]['sco'],
generaldata[i]['saf'], generaldata[i]['con'], generaldata[i]['eaf'], generaldata[i]['gui'], generaldata[i]['waf'],
generaldata[i]['atl'], generaldata[i]['egy'], generaldata[i]['ara'], generaldata[i]['mpo'], generaldata[i]['per'],
generaldata[i]['sub'], generaldata[i]['chi'], generaldata[i]['ind'], generaldata[i]['ein'], generaldata[i]['pac']]
graphanddata(regions, data, 'No. of nations', 21+14*i)
story.append(Paragraph('Region troop counts', h3))
data = [troopdata[i]['mam'], troopdata[i]['car'], troopdata[i]['gra'], troopdata[i]['ama'], troopdata[i]['sco'],
troopdata[i]['saf'], troopdata[i]['con'], troopdata[i]['eaf'], troopdata[i]['gui'], troopdata[i]['waf'],
troopdata[i]['atl'], troopdata[i]['egy'], troopdata[i]['ara'], troopdata[i]['mpo'], troopdata[i]['per'],
troopdata[i]['sub'], troopdata[i]['chi'], troopdata[i]['ind'], troopdata[i]['ein'], troopdata[i]['pac']]
graphanddata(regions, data, 'Troops (k)', 34+14*i)
story.append(Paragraph('Alignment counts', h3))
data = [generaldata[i]['west'], generaldata[i]['non'], generaldata[i]['east']]
graphanddata(alignments, data, 'No. of nations', 22+14*i)
story.append(Paragraph('Political System counts', h3))
data = [generaldata[i]['libdem'], generaldata[i]['authdem'], generaldata[i]['opr'], generaldata[i]['junta'], generaldata[i]['dictat']]
graphanddata(polsystems, data, 'No. of nations', 23+14*i)
story.append(Paragraph('Economic System counts', h3))
data = [generaldata[i]['free'], generaldata[i]['mixed'], generaldata[i]['command']]
graphanddata(econsystems, data, 'No. of nations', 24+14*i)
story.append(Paragraph('Approval counts', h3))
data = [generaldata[i]['waag'], generaldata[i]['adored'], generaldata[i]['loved'], generaldata[i]['liked'], generaldata[i]['decent'],
generaldata[i]['middling'], generaldata[i]['disliked'], generaldata[i]['hated'], generaldata[i]['despised'], generaldata[i]['eop']]
graphanddata(approvallevels, data, 'No. of nations', 25+14*i)
story.append(Paragraph('Stability counts', h3))
data = [generaldata[i]['unsink'], generaldata[i]['entren'], generaldata[i]['vstable'], generaldata[i]['quiet'], generaldata[i]['calm'],
generaldata[i]['tensions'], generaldata[i]['chaotic'], generaldata[i]['rioting'], generaldata[i]['protests'], generaldata[i]['collapse']]
graphanddata(stabilitylevels, data, 'No. of nations', 26+14*i)
story.append(Paragraph('Rebel counts', h3))
data = [generaldata[i]['norebels'], generaldata[i]['terror'], generaldata[i]['guerrilla'], generaldata[i]['rebellion'], generaldata[i]['civil']]
graphanddata(rebellevels, data, 'No. of nations', 27+14*i)
story.append(Paragraph('QoL counts', h3))
data = [generaldata[i]['developed'], generaldata[i]['good'], generaldata[i]['decent'], generaldata[i]['above'], generaldata[i]['average'],
generaldata[i]['poorqol'], generaldata[i]['impov'], generaldata[i]['desp'], generaldata[i]['disast'], generaldata[i]['crisis']]
graphanddata(qollevels, data, 'No. of nations', 28+14*i)
story.append(Paragraph('Reputation counts', h3))
data = [generaldata[i]['gandhi'], generaldata[i]['angelic'], generaldata[i]['nice'], generaldata[i]['good'], generaldata[i]['normal'],
generaldata[i]['quest'], generaldata[i]['isolated'], generaldata[i]['pariah'], generaldata[i]['maddog'], generaldata[i]['aoe']]
graphanddata(reputationlevels, data, 'No. of nations', 29+14*i)
print ' %s of %s panels done' % (str(i+1), str(len(names)))
doHeading('Differences (from %s)' % prevnow.strftime('%d %B, %H:%M:%S'), h1)
doHeading('General Comparisons diff', h1)
doHeading('Alliance Size diff', h2)
data = [alliance['size'] for alliance in diffgeneraldata]
tableonly('Alliance Size', diffnames, data)
story.append(PageBreak())
doHeading('Total GDP diff', h2)
data = [alliance['gdp'] for alliance in diffgeneraldata]
tableonly('GDP', diffnames, data)
story.append(PageBreak())
doHeading('Total growth diff', h2)
data = [alliance['growth'] for alliance in diffgeneraldata]
tableonly('Growth', diffnames, data)
story.append(PageBreak())
doHeading('Total troops diff', h2)
data = [alliance['troops'] for alliance in difftroopdata]
tableonly('Troops', diffnames, data)
story.append(PageBreak())
doHeading('Total Factories diff', h2)
data = [alliance['factories'] for alliance in diffgeneraldata]
tableonly('Factories', diffnames, data)
story.append(PageBreak())
doHeading('Total RM production diff', h2)
data = [alliance['rmprod'] for alliance in diffgeneraldata]
tableonly('RM Production', diffnames, data)
story.append(PageBreak())
doHeading('Total oil production diff', h2)
data = [alliance['oilprod'] for alliance in diffgeneraldata]
tableonly('Oil Production', diffnames, data)
story.append(PageBreak())
doHeading('Total oil reserves diff', h2)
data = [alliance['oilres'] for alliance in diffgeneraldata]
tableonly('Oil Reserves', diffnames, data)
story.append(PageBreak())
doHeading('Total territory diff', h2)
data = [alliance['territory'] for alliance in diffgeneraldata]
tableonly('Territory', diffnames, data)
story.append(PageBreak())
doHeading('Total time inactive diff', h2)
data = [alliance['inactive'] for alliance in diffgeneraldata]
tableonly('Time inactive', diffnames, data)
story.append(PageBreak())
print ' General differences done'
doHeading('Alliance Panels diff', h1)
for i in range(len(diffnames)):
doHeading('%s' % names[i], h2)
story.append(Paragraph('Tech Level counts diff', h3))
data = [diffgeneraldata[i]['advanced'], diffgeneraldata[i]['persian'], diffgeneraldata[i]['almost'],
diffgeneraldata[i]['vietnam'], diffgeneraldata[i]['korean'], diffgeneraldata[i]['second'],
diffgeneraldata[i]['first'], diffgeneraldata[i]['finest'], diffgeneraldata[i]['stone']]
tableonly('Tech levels', techlevels, data)
story.append(Paragraph('Training Level counts diff', h3))
data = [diffgeneraldata[i]['elite'], diffgeneraldata[i]['good'], diffgeneraldata[i]['standard'],
diffgeneraldata[i]['poortr'], diffgeneraldata[i]['rabble']]
tableonly('Training levels', traininglevels, data)
story.append(Paragraph('Airforce Level counts diff', h3))
data = [diffgeneraldata[i]['vpowerful'], diffgeneraldata[i]['powerful'], diffgeneraldata[i]['large'],
diffgeneraldata[i]['somelarge'], diffgeneraldata[i]['mediocre'], diffgeneraldata[i]['meagre'],
diffgeneraldata[i]['small'], diffgeneraldata[i]['noair']]
tableonly('Airforce levels', airforcelevels, data)
story.append(PageBreak())
story.append(Paragraph('Manpower Level counts diff', h3))
data = [diffgeneraldata[i]['untapped'], diffgeneraldata[i]['plentiful'], diffgeneraldata[i]['halved'],
diffgeneraldata[i]['low'], diffgeneraldata[i]['neardep'], diffgeneraldata[i]['depleted']]
tableonly('Manpower levels', manpowerlevels, data)
story.append(Paragraph('Region counts diff', h3))
data = [diffgeneraldata[i]['mam'], diffgeneraldata[i]['car'], diffgeneraldata[i]['gra'], diffgeneraldata[i]['ama'],
diffgeneraldata[i]['sco'], diffgeneraldata[i]['saf'], diffgeneraldata[i]['con'], diffgeneraldata[i]['eaf'],
diffgeneraldata[i]['gui'], diffgeneraldata[i]['waf'], diffgeneraldata[i]['atl'], diffgeneraldata[i]['egy'],
diffgeneraldata[i]['ara'], diffgeneraldata[i]['mpo'], diffgeneraldata[i]['per'], diffgeneraldata[i]['sub'],
diffgeneraldata[i]['chi'], diffgeneraldata[i]['ind'], diffgeneraldata[i]['ein'], diffgeneraldata[i]['pac']]
tableonly('Region counts', regions, data)
story.append(PageBreak())
story.append(Paragraph('Region troop counts diff', h3))
data = [difftroopdata[i]['mam'], difftroopdata[i]['car'], difftroopdata[i]['gra'], difftroopdata[i]['ama'], difftroopdata[i]['sco'],
difftroopdata[i]['saf'], difftroopdata[i]['con'], difftroopdata[i]['eaf'], difftroopdata[i]['gui'], difftroopdata[i]['waf'],
difftroopdata[i]['atl'], difftroopdata[i]['egy'], difftroopdata[i]['ara'], difftroopdata[i]['mpo'], difftroopdata[i]['per'],
difftroopdata[i]['sub'], difftroopdata[i]['chi'], difftroopdata[i]['ind'], difftroopdata[i]['ein'], difftroopdata[i]['pac']]
tableonly('Region troop counts', regions, data)
story.append(Paragraph('Alignment counts diff', h3))
data = [diffgeneraldata[i]['west'], diffgeneraldata[i]['non'], diffgeneraldata[i]['east']]
tableonly('Alignments', alignments, data)
story.append(Paragraph('Political System counts diff', h3))
data = [diffgeneraldata[i]['libdem'], diffgeneraldata[i]['authdem'], diffgeneraldata[i]['opr'], diffgeneraldata[i]['junta'],
diffgeneraldata[i]['dictat']]
tableonly('Political systems', polsystems, data)
story.append(PageBreak())
story.append(Paragraph('Economic System counts diff', h3))
data = [diffgeneraldata[i]['free'], diffgeneraldata[i]['mixed'], diffgeneraldata[i]['command']]
tableonly('Economic systems', econsystems, data)
story.append(Paragraph('Approval counts diff', h3))
data = [diffgeneraldata[i]['waag'], diffgeneraldata[i]['adored'], diffgeneraldata[i]['loved'], diffgeneraldata[i]['liked'],
diffgeneraldata[i]['decent'], diffgeneraldata[i]['middling'], diffgeneraldata[i]['disliked'], diffgeneraldata[i]['hated'],
diffgeneraldata[i]['despised'], diffgeneraldata[i]['eop']]
tableonly('Approval levels', approvallevels, data)
story.append(Paragraph('Stability counts diff', h3))
data = [diffgeneraldata[i]['unsink'], diffgeneraldata[i]['entren'], diffgeneraldata[i]['vstable'], diffgeneraldata[i]['quiet'],
diffgeneraldata[i]['calm'], diffgeneraldata[i]['tensions'], diffgeneraldata[i]['chaotic'], diffgeneraldata[i]['rioting'],
diffgeneraldata[i]['protests'], diffgeneraldata[i]['collapse']]
tableonly('Stability levels', stabilitylevels, data)
story.append(PageBreak())
story.append(Paragraph('Rebel counts diff', h3))
data = [diffgeneraldata[i]['norebels'], diffgeneraldata[i]['terror'], diffgeneraldata[i]['guerrilla'],
diffgeneraldata[i]['rebellion'], diffgeneraldata[i]['civil']]
tableonly('Rebel levels', rebellevels, data)
story.append(Paragraph('QoL counts diff', h3))
data = [diffgeneraldata[i]['developed'], diffgeneraldata[i]['good'], diffgeneraldata[i]['decent'], diffgeneraldata[i]['above'],
diffgeneraldata[i]['average'], diffgeneraldata[i]['poorqol'], diffgeneraldata[i]['impov'], diffgeneraldata[i]['desp'],
diffgeneraldata[i]['disast'], diffgeneraldata[i]['crisis']]
tableonly('QoL levels', qollevels, data)
story.append(Paragraph('Reputation counts diff', h3))
data = [diffgeneraldata[i]['gandhi'], diffgeneraldata[i]['angelic'], diffgeneraldata[i]['nice'], diffgeneraldata[i]['good'],
diffgeneraldata[i]['normal'], diffgeneraldata[i]['quest'], diffgeneraldata[i]['isolated'], diffgeneraldata[i]['pariah'],
diffgeneraldata[i]['maddog'], diffgeneraldata[i]['aoe']]
tableonly('Reputation levels', reputationlevels, data)
story.append(PageBreak())
print ' %s of %s panel diffs done' % (str(i+1), str(len(names)))
tdata = [('Nation Name', 'Nation ID', 'Uranium Quantity')] + [(nation['name'], nation['id'], nation['uranium']) for nation in uraniumlist]
t = Table(tdata)
t.setStyle(TableStyle([('ALIGN',(0,0),(-1,-1),'LEFT'),('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),('BOX', (0,0), (-1,-1), 0.25, colors.black)]))
story.append(t)
story.append(PageBreak())
doc = MyDocTemplate('bloc.pdf', pagesize=A4, title='BLOC Dossier', author='heidi')
doc.multiBuild(story)
print "Done."
print "\nCopying to ftp..."
import shutil
shutil.move('bloc.pdf', '/home/heidi/ftp/bloc.pdf')
print "Done."