]> jfr.im git - irc/rizon/acid.git/blame - pyva/pyva/src/main/python/erepublik/api/map.py
Split pyva plugin into pyva.core and pyva.pyva
[irc/rizon/acid.git] / pyva / pyva / src / main / python / erepublik / api / map.py
CommitLineData
685e346e
A
1from feed import XmlFeed, get_json
2
3cached_map = None
4
5def get_map():
6 return Map()
7
8def get_cached_map():
9 global cached_map
10
11 if cached_map == None:
12 cached_map = get_map()
13
14 return cached_map
15
16def 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
42def 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
52def 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
72def 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
80def 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
89def 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
99def 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
106def 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
121def 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
147def 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
161class 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']