Mercurial > eagle-eye
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 +