Mercurial > eagle-eye
annotate pyikriam/buildings.py @ 223:60c3ab698350
merged.
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Tue, 04 Nov 2008 18:34:00 +0800 |
parents | 550e20dd7573 |
children | 60c4b4b78a01 |
rev | line source |
---|---|
168
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 from lazy.www import c |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
2 from lxml import etree |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 from StringIO import StringIO |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
4 from sync_utils import sync_tagclass, sync_tagvalue |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
5 from sync_utils import sync_tagcount, sync_tagclass_start_appear |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
6 from sync_utils import ikariam_zh_timeval |
168
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 class position(object): |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 def __init__(self, build_type, city_id, idx, baseurl): |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 self._baseurl = baseurl + '/index.php' |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 self.build_type = build_type |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 self.city_id = city_id |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
13 self.idx = idx |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
14 self._params = {'view': 'buildingGround', |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
15 'id': city_id, |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
16 'position': idx} |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
17 pass |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
18 |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
19 def get_page(self): |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
20 page = c(self._baseurl).get(self._params).get_content() |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
21 return page |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
22 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
23 def sync(self): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
24 page = self.get_page() |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
25 parser = etree.HTMLParser(encoding='utf8') |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
26 page_dom = etree.parse(StringIO(page), parser) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
27 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
28 self._sync(page_dom) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
29 pass |
168
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
30 pass |
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
31 |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
32 ## \brief Base class of all building class. |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
33 # |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
34 # This class extract information from page of building. That are |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
35 # information all buildings have. |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
36 # |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
37 class building(position): |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
38 class_patterns = { |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
39 'level': 'buildingLevel' |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
40 } |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
41 appear_patterns = { |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
42 'is_upgrading': 'isUpgrading' |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
43 } |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
44 upgrade_res_patterns = { |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
45 'wood': 'wood', |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
46 'marble': 'marble', |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
47 'crystal': 'glass' |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
48 } |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
49 |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
50 def _sync(self, page_dom): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
51 sync_tagclass(self, building.class_patterns, page_dom) |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
52 |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
53 sync_tagclass_start_appear(self, building.appear_patterns, page_dom) |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
54 |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
55 xpath_upgrade = '/descendant::ul[@class=\'actions\']/li[@class=\'upgrade\']/a' |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
56 anodes = page_dom.xpath(xpath_upgrade) |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
57 if len(anodes) == 1: |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
58 anode = anodes[0] |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
59 self._upgrade_uri = anode.get('href') |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
60 else: |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
61 self._upgrade_uri = None |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
62 pass |
168
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
63 |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
64 self.upgrade_wood = 0 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
65 self.upgrade_marble = 0 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
66 self.upgrade_crystal = 0 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
67 self.upgrade_time = 0 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
68 self.upgrade_countdown = 0 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
69 |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
70 if self.is_upgrading: |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
71 xpath_countdown = '/descendant::div[@id=\'upgradeCountDown\']/text()' |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
72 value = page_dom.xpath(xpath_countdown)[0] |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
73 self.upgrade_countdown = ikariam_zh_timeval(value) |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
74 else: |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
75 xpath_res = '/descendant::div[@class=\'content\']/ul[@class=\'resources\']/li[starts-with(@class, \'%s\')]/text()' |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
76 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
77 for resname, clzname in building.upgrade_res_patterns.items(): |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
78 xpath = xpath_res % (clzname) |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
79 txts = page_dom.xpath(xpath) |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
80 if len(txts) == 1: |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
81 value = txts[0].strip() |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
82 setattr(self, 'upgrade_' + resname, int(value)) |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
83 pass |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
84 pass |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
85 |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
86 xpath_time = xpath_res % ('time') |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
87 txts = page_dom.xpath(xpath_time) |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
88 if len(txts) == 1: |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
89 value = txts[0].strip() |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
90 self.upgrade_time = ikariam_zh_timeval(value) |
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
91 pass |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
92 pass |
168
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
93 pass |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
94 |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
95 def upgrade(self): |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
96 url = self._baseurl + self._upgrade_uri |
176
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
97 page = c(url).get().get_content() |
3ba3edda6d1e
Extract more information for building townhall.
Thinker K.F. Li <thinker@branda.to>
parents:
175
diff
changeset
|
98 pass |
168
8f699a9da6c0
Extract building level of townhalls.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
99 pass |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
100 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
101 class townhall(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
102 class_patterns = { |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
103 'occupied': 'value occupied', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
104 'rooms': 'value total', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
105 } |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
106 value_patterns = { |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
107 'growth': 'growth', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
108 'happiness': 'happiness', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
109 'interest_base': 'base', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
110 'interest_research': 'research1', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
111 'interest_capital': 'capital', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
112 'overpopulation': 'cat overpopulation' |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
113 } |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
114 count_patterns = { |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
115 'pop_citizens': 'citizens', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
116 'pop_woodworkers': 'woodworkers', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
117 'pop_specialworkers': 'specialworkers', |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
118 'pop_scientists': 'scientists' |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
119 } |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
120 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
121 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
122 super(townhall, self).__init__('townhall', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
123 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
124 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
125 def _sync(self, page_dom): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
126 sync_tagclass(self, townhall.class_patterns, page_dom) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
127 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
128 sync_tagvalue(self, townhall.value_patterns, page_dom) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
129 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
130 sync_tagcount(self, townhall.count_patterns, page_dom) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
131 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
132 super(townhall, self)._sync(page_dom) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
133 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
134 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
135 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
136 class academy(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
137 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
138 super(academy, self).__init__('academy', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
139 pass |
178
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
140 |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
141 def _sync(self, page_dom): |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
142 xpath_research_name = '/descendant::*[@class=\'researchName\']/a' |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
143 anodes = page_dom.xpath(xpath_research_name) |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
144 if len(anodes) == 1: |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
145 anode = anodes[0] |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
146 self.researching = anode.get('title') |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
147 xpath_countdown = '/descendant::div[@id=\'researchCountDown\']/text()' |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
148 txtnodes = page_dom.xpath(xpath_countdown) |
188
bf4ddf5bffb9
Extracts information about resources required to upgrade a building.
Thinker K.F. Li <thinker@branda.to>
parents:
178
diff
changeset
|
149 self.researching_countdown = ikariam_zh_timeval(txtnodes[0]) |
178
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
150 else: |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
151 self.researching = None |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
152 self.researching_countdown = None |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
153 pass |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
154 |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
155 super(academy, self)._sync(page_dom) |
bff16e6ee3ef
Extract status of reearching for Academy.
Thinker K.F. Li <thinker@branda.to>
parents:
177
diff
changeset
|
156 pass |
177
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
157 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
158 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
159 class warehouse(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
160 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
161 super(warehouse, self).__init__('warehouse', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
162 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
163 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
164 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
165 class barracks(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
166 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
167 super(barracks, self).__init__('barracks', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
168 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
169 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
170 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
171 class branchoffice(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
172 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
173 super(branchoffice, self).__init__('branchoffice', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
174 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
175 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
176 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
177 class port(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
178 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
179 super(port, self).__init__('port', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
180 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
181 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
182 |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
183 class wall(building): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
184 def __init__(self, city_id, idx, baseurl): |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
185 super(wall, self).__init__('wall', city_id, idx, baseurl) |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
186 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
187 pass |
6adad3bcca78
Refactory to functions for sychronizing object attributes with pages.
Thinker K.F. Li <thinker@branda.to>
parents:
176
diff
changeset
|
188 |
213
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
189 class shipyard(building): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
190 def __init__(self, city_id, idx, baseurl): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
191 super(shipyard, self).__init__('shipyard', city_id, idx, baseurl) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
192 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
193 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
194 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
195 class empty_pos(position): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
196 res_patterns = { |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
197 'wood': 'wood', |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
198 'marble': 'marble', |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
199 'crystal': 'glass' |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
200 } |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
201 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
202 def _sync(self, page_dom): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
203 self.building_info = None |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
204 self.res_wood = 0 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
205 self.res_marble = 0 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
206 self.res_crystal = 0 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
207 self.building_time = 0 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
208 self._building_uri = None |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
209 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
210 xpath_building = '/descendant::div[@class=\'buildinginfo\']/h4/text()' |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
211 buildings = page_dom.xpath(xpath_building) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
212 if len(buildings) == 1: |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
213 self.building_info = buildings[0] |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
214 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
215 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
216 xpath_costs = '/descendant::div[@class=\'costs\']/ul/li[@class=\'%s\']/text()' |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
217 for res, ptn in empty_pos.res_patterns.items(): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
218 xpath = xpath_costs % (ptn) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
219 txts = page_dom.xpath(xpath) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
220 if len(txts) == 1: |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
221 value = int(txts[0]) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
222 setattr(self, 'res_' + res, value) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
223 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
224 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
225 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
226 xpath = xpath_costs % ('time') |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
227 txts = page_dom.xpath(xpath) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
228 if len(txts) == 1: |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
229 value = ikariam_zh_timeval(txts[0]) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
230 self.building_time = value |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
231 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
232 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
233 xpath_button = '/descendant::a[@class=\'button build\']' |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
234 anodes = page_dom.xpath(xpath_button) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
235 if len(anodes) == 1: |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
236 self._building_uri = anodes[0].get('href') |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
237 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
238 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
239 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
240 def build(self): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
241 url = self._baseurl + self._building_uri |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
242 page = c(url).get().get_content() |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
243 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
244 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
245 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
246 class land(empty_pos): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
247 def __init__(self, city_id, idx, baseurl): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
248 super(land, self).__init__('land', city_id, idx, baseurl) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
249 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
250 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
251 |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
252 class shore(empty_pos): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
253 def __init__(self, city_id, idx, baseurl): |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
254 super(shore, self).__init__('shore', city_id, idx, baseurl) |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
255 pass |
550e20dd7573
Handle more building type
Thinker K.F. Li <thinker@branda.to>
parents:
188
diff
changeset
|
256 pass |