]>
Commit | Line | Data |
---|---|---|
685e346e A |
1 | from feed import XmlFeed, get_json |
2 | ||
3 | cached_map = None | |
4 | ||
5 | def get_map(): | |
6 | return Map() | |
7 | ||
8 | def get_cached_map(): | |
9 | global cached_map | |
10 | ||
11 | if cached_map == None: | |
12 | cached_map = get_map() | |
13 | ||
14 | return cached_map | |
15 | ||
16 | def get_country_name(s): | |
17 | map = get_cached_map() | |
18 | ||
19 | if isinstance(s, int): | |
20 | s = str(s) | |
21 | else: | |
22 | s = s.lower() | |
23 | ||
24 | for c in map.countries: | |
25 | if s == c['name'].lower() or s == c['code'].lower() or s == str(c['id']): | |
26 | return c['name'] | |
27 | ||
28 | return None | |
29 | ||
30 | #def get_country_link(name): | |
31 | # country_feed = country.get_cached_countries() | |
32 | # | |
33 | # countries = country_feed.elements('/countries/country') | |
34 | # name = name.lower() | |
35 | # | |
36 | # for c in countries: | |
37 | # if name == c.text('name').lower() or name == c.text('code').lower(): | |
38 | # return c.text('permalink') | |
39 | # | |
40 | # return None | |
41 | ||
42 | def get_country_id(name): | |
43 | map = get_cached_map() | |
44 | name = name.lower() | |
45 | ||
46 | for c in map.countries: | |
47 | if name == c['name'].lower() or name == c['code'].lower(): | |
48 | return c['id'] | |
49 | ||
50 | return None | |
51 | ||
52 | def get_country_currency(val): | |
53 | map = get_cached_map() | |
54 | countries = map.countries | |
55 | ||
56 | if isinstance(val, str) or isinstance(val, unicode): | |
57 | val = val.lower() | |
58 | for c in countries: | |
59 | if val == c['name'].lower() or val == c['code'].lower(): | |
60 | return c['currency'] | |
61 | elif isinstance(val, int): | |
62 | for c in countries: | |
63 | if val == c['id']: | |
64 | return c['currency'] | |
65 | elif isinstance(val, dict): | |
66 | for c in countries: | |
67 | if val['id'] == c['id']: | |
68 | return c['currency'] | |
69 | else: | |
70 | return None | |
71 | ||
72 | def get_region_name(region_id): | |
73 | map = get_cached_map() | |
74 | for r in map.regions: | |
75 | if r['id'] == int(region_id): | |
76 | return r['name'] | |
77 | ||
78 | return None | |
79 | ||
80 | def get_region_id(region_name): | |
81 | map = get_cached_map() | |
82 | ||
83 | for r in map.regions: | |
84 | if r['name'].lower().startswith(region_name.lower()): | |
85 | return r['id'] | |
86 | ||
87 | return None | |
88 | ||
89 | def get_region(search): | |
90 | map = get_cached_map() | |
91 | search = str(search) | |
92 | search = search.lower() | |
93 | for r in map.regions: | |
94 | if str(r['id']) == search or r['name'].lower().startswith(search): | |
95 | return r | |
96 | ||
97 | return None | |
98 | ||
99 | def get_region_zone(region_name): | |
100 | map = get_cached_map() | |
101 | for region in map.regions: | |
102 | if region['name'].lower().startswith(region_name.lower()): | |
103 | return region['zone'] | |
104 | return None | |
105 | ||
106 | def get_region_distance(start, end): | |
107 | x1, x2 = start.lower() | |
108 | y1, y2 = end.lower() | |
109 | x2 = int(x2) | |
110 | y2 = int(y2) | |
111 | dist_x = abs(ord(x1) - ord(y1)) | |
112 | if dist_x == 3: | |
113 | dist_x = 1 | |
114 | dist_y = abs(x2 - y2) | |
115 | if dist_y == 3: | |
116 | dist_y = 2 | |
117 | elif dist_y == 4: | |
118 | dist_y = 1 | |
119 | return dist_x + dist_y + 1 | |
120 | ||
121 | def get_battles(searchstr): | |
122 | searchstr = searchstr.lower() | |
123 | f = XmlFeed('http://api.erepublik.com/map/data/') | |
124 | battles = [] | |
125 | ||
126 | for battle in f.elements('/countries/country/regions/region/battles/battle'): | |
127 | battle_id = int(battle.text('@b_id')) | |
128 | attacker_id = int(battle.text('@c_id')) | |
129 | attacker = get_country_name(attacker_id) | |
130 | region_id = battle.text('../../@r_id') | |
131 | region = get_region_name(region_id) | |
132 | defender_id = int(battle.text('../../../../@c_id')) | |
133 | defender = get_country_name(defender_id) | |
134 | if searchstr == '' or searchstr == attacker.lower() or searchstr == region.lower() or searchstr == defender.lower(): | |
135 | battles.append({ | |
136 | 'battle_id': battle_id, | |
137 | 'attacker_id': attacker_id, | |
138 | 'attacker': attacker, | |
139 | 'region_id': region_id, | |
140 | 'region': region, | |
141 | 'defender_id': defender_id, | |
142 | 'defender': defender | |
143 | }) | |
144 | ||
145 | return battles | |
146 | ||
147 | def get_mpp_list(country_id): | |
148 | map = XmlFeed('http://api.erepublik.com/map/data/') | |
149 | ||
150 | mpps = [] | |
151 | # for mpp in map.elements('/countries/country[@c_id = "%d"]/mpps/mpp' % country_id): bug with pypy 1.5.0-alpha0 / python 2.7.1 | |
152 | for country in map.elements('/countries/country'): | |
153 | if country.int('@c_id') == int(country_id): | |
154 | for mpp in country.elements('mpps/mpp'): | |
155 | mpps.append({ | |
156 | 'id': int(mpp.text('@c_id')), 'country': get_country_name(int(mpp.text('@c_id'))), | |
157 | 'expiration': mpp.text('@expires')}) | |
158 | ||
159 | return mpps | |
160 | ||
161 | class Map: | |
162 | def __init__(self): | |
163 | data = get_json('http://api.1way.it/erep/map') | |
164 | self.countries = data['countries'] | |
165 | self.regions = data['regions'] |