Mercurial > eagle-eye
view pyikriam/buildings.py @ 176:3ba3edda6d1e
Extract more information for building townhall.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sun, 02 Nov 2008 11:32:59 +0800 |
parents | 9f248c8460ce |
children | 6adad3bcca78 |
line wrap: on
line source
from lazy.www import c from lxml import etree from StringIO import StringIO class position(object): def __init__(self, build_type, city_id, idx, baseurl): self._baseurl = baseurl + '/index.php' self.build_type = build_type self.city_id = city_id self.idx = idx self._params = {'view': 'buildingGround', 'id': city_id, 'position': idx} pass def get_page(self): page = c(self._baseurl).get(self._params).get_content() return page pass class townhall(position): class_patterns = { 'level': 'buildingLevel', 'occupied': 'value occupied', 'rooms': 'value total', } value_patterns = { 'growth': 'growth', 'happiness': 'happiness', 'interest_base': 'base', 'interest_research': 'research1', 'interest_capital': 'capital' } count_patterns = { 'pop_citizens': 'citizens', 'pop_woodworkers': 'woodworkers', 'pop_specialworkers': 'specialworkers', 'pop_scientists': 'scientists' } appear_patterns = { 'is_upgrading': 'isUpgrading' } def __init__(self, city_id, idx, baseurl): super(townhall, self).__init__('townhall', city_id, idx, baseurl) pass def _sync(self, page): parser = etree.HTMLParser(encoding='utf8') page_dom = etree.parse(StringIO(page), parser) xpath_building = '/html/body/descendant::*[@class=\'%s\']/text()' for name, clzname in self.class_patterns.items(): path = xpath_building % (clzname) value = page_dom.xpath(path)[0] setattr(self, name, value) pass xpath_value = '/html/body/descendant::*[starts-with(@class,\'%s\')]/descendant::*[@class=\'value\']/text()' for name, clzname in self.value_patterns.items(): path = xpath_value % (clzname) value = page_dom.xpath(path)[0] setattr(self, name, value) pass xpath_count = '/html/body/descendant::*[starts-with(@class,\'%s\')]/descendant::*[@class=\'count\']/text()' for name, clzname in self.count_patterns.items(): path = xpath_count % (clzname) value = page_dom.xpath(path)[0] setattr(self, name, value) pass xpath_appear = '/html/body/descendant::*[starts-with(@class,\'%s\')]' for name, clzname in self.appear_patterns.items(): path = xpath_appear % (clzname) cnt = len(page_dom.xpath(path)) if cnt != 0: setattr(self, name, True) else: setattr(self, name, False) pass pass xpath_upgrade = '/descendant::ul[@class=\'actions\']/li[@class=\'upgrade\']/a' anodes = page_dom.xpath(xpath_upgrade) if len(anodes) == 1: anode = anodes[0] self.upgrade_uri = anode.get('href') else: self.upgrade_uri = None pass pass def sync(self): page = self.get_page() self._sync(page) pass def upgrade(self): url = self._baseurl + self.upgrade_uri page = c(url).get().get_content() pass pass