diff pyikriam/ikariam.py @ 168:8f699a9da6c0

Extract building level of townhalls. - townhall class is responding to extract information about townhall.
author Thinker K.F. Li <thinker@branda.to>
date Sun, 02 Nov 2008 02:26:28 +0800
parents f7fd2738b9b4
children 9f248c8460ce
line wrap: on
line diff
--- a/pyikriam/ikariam.py	Sun Nov 02 01:00:35 2008 +0800
+++ b/pyikriam/ikariam.py	Sun Nov 02 02:26:28 2008 +0800
@@ -5,6 +5,8 @@
 import urllib2
 import urllib
 from utils import dyna_prog, decorator
+from lxml import etree
+from StringIO import StringIO
 
 class fake_moz(object):
     __metaclass__ = decorator
@@ -82,9 +84,6 @@
         self.params = {'view':'city','id':id}
         
     def sync(self):
-        from lxml import etree
-        from StringIO import StringIO
-
         page = c(self.core.baseurl).get(self.params).get_content()
         parser = etree.HTMLParser(encoding='utf8')
         page_dom = etree.parse(StringIO(page), parser)
@@ -98,7 +97,21 @@
         
         xpath_mainview = '/html/body/div/div/div[@id=\'mainview\']/ul/li'
         pos_doms = page_dom.xpath(xpath_mainview)
-        positions = [pos_dom.get('class').split()[-1] for pos_dom in pos_doms]
+        positions = [self._mk_position(pos_dom, idx)
+                     for idx, pos_dom in enumerate(pos_doms)]
         self.positions = positions
         pass
+
+    def _mk_position(self, pos_dom, idx):
+        import buildings
+
+        build_type = pos_dom.get('class').split()[-1].lower()
+        if hasattr(buildings, build_type):
+            clz = getattr(buildings, build_type)
+            if issubclass(clz, buildings.position):
+                building = clz(self.id, idx, self.core.baseurl)
+                return building
+            pass
+        return build_type
     pass
+