Advertisement
mixster

mixster

Oct 19th, 2010
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.48 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import xml.parsers.expat
  4. import urllib
  5.  
  6. url = 'http://api.erepublik.com/v2/feeds/countries'
  7.  
  8. class Countries(object):
  9.   def __init__(self):
  10.     self.countries = []
  11.  
  12.   def newElement(self, name, attrs):
  13.     if name == 'country':
  14.       self.countries.append(Country())
  15.     else:
  16.       if len(self.countries) > 0:
  17.         self.countries[-1].newElement(name, attrs)
  18.  
  19.   def endElement(self, name):
  20.     if len(self.countries) > 0:
  21.       self.countries[-1].endElement(name)
  22.  
  23.   def newData(self, data):
  24.     if len(self.countries) > 0:
  25.       self.countries[-1].newData(data)
  26.  
  27. class Country(object):
  28.   def __init__(self):
  29.     self.regions = []
  30.     self.mode, self.name, self.id, self.currency = '', '', '', ''
  31.     self.population = 0
  32.  
  33.   def newElement(self, name, attrs):
  34.     if self.mode == 'regions':
  35.       if name == 'region':
  36.         self.regions.append(Country())
  37.       else:
  38.         if len(self.regions) > 0:
  39.           self.regions[-1].newElement(name, attrs)
  40.     else:
  41.       self.mode = name
  42.  
  43.   def endElement(self, name):
  44.     self.mode = ''
  45.     if len(self.regions) > 0:
  46.       self.regions[-1].endElement(name)
  47.  
  48.   def newData(self, data):
  49.     if self.mode == 'name':
  50.       self.name = data
  51.     elif self.mode == 'id':
  52.       self.id = data
  53.     elif self.mode == 'currency':
  54.       self.currency = data
  55.     elif self.mode == 'citizen-count':
  56.       self.population = int(data)
  57.     elif len(self.regions) > 0:
  58.       self.regions[-1].newData(data)
  59.  
  60. class Region(object):
  61.   def __init__(self):
  62.     self.mode, self.name, self.id = '', '', ''
  63.  
  64.   def newElement(self, name, attrs):
  65.     self.mode = name
  66.  
  67.   def endElement(self, name):
  68.     self.mode = ''
  69.  
  70.   def newData(self, data):
  71.     if self.mode == 'name':
  72.       self.name = data
  73.     elif self.mode == 'id':
  74.       self.id = data
  75.  
  76. f = urllib.urlopen(url)
  77.  
  78. s = ''
  79. for line in f:
  80.   s += line
  81.  
  82. f.close()
  83.  
  84. countries = Countries()
  85.  
  86. p = xml.parsers.expat.ParserCreate()
  87. p.StartElementHandler = countries.newElement
  88. p.EndElementHandler = countries.endElement
  89. p.CharacterDataHandler = countries.newData
  90.  
  91. p.Parse(s)
  92.  
  93. m = len(countries.countries)
  94. for a in range(1, m):
  95.   t = countries.countries[a]
  96.   b = a - 1
  97.   while (b >= 0 and t.population > countries.countries[b].population):
  98.     countries.countries[b + 1] = countries.countries[b]
  99.     b -= 1
  100.   countries.countries[b + 1] = t
  101.  
  102. for c in countries.countries:
  103.   print c.name + ' (' + c.id + '): ', c.population, ' - ' + c.currency
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement