Skip to content

Commit 9488e18

Browse files
author
Marcel Hofer
committed
Propesed quick fix for new Rate-Limit
1 parent 24118ff commit 9488e18

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

pgoapi/pgoapi.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ def __init__(self, config):
9696
self.player_stats = PlayerStats({})
9797
self.inventory = Player_Inventory([])
9898

99+
self._last_got_map_objects = 0
100+
self._map_objects_rate_limit = 5.0
101+
self.map_objects = {}
102+
self.encountered_pokemons = TTLCache(maxsize=120, ttl=self._map_objects_rate_limit * 2)
103+
99104
self.start_time = time()
100105
self.exp_start = None
101106
self.exp_current = None
@@ -523,7 +528,8 @@ def walk_back_to_origin(self):
523528
def spin_nearest_fort(self):
524529
map_cells = self.nearby_map_objects()['responses'].get('GET_MAP_OBJECTS', {}).get('map_cells', [])
525530
forts = PGoApi.flatmap(lambda c: c.get('forts', []), map_cells)
526-
destinations = filtered_forts(self._origPosF, self._posf, forts, self.STAY_WITHIN_PROXIMITY, self.visited_forts)
531+
destinations = filtered_forts(self._origPosF, self._posf, forts, self.STAY_WITHIN_PROXIMITY, self.visited_forts,
532+
self.experimental)
527533
if destinations:
528534
nearest_fort = destinations[0][0]
529535
nearest_fort_dis = destinations[0][1]
@@ -569,6 +575,10 @@ def fort_search_pgoapi(self, fort, player_postion, fort_distance):
569575
self.log.debug("Could not spin fort - fort not in range %s", res)
570576
self.log.info("Could not spin fort http://maps.google.com/maps?q=%s,%s, Not in Range %s", fort['latitude'],
571577
fort['longitude'], fort_distance)
578+
elif result == 3:
579+
self.log.debug("Could not spin fort - still on cooldown %s", res)
580+
self.log.info("Could not spin fort http://maps.google.com/maps?q=%s,%s, Still on cooldown", fort['latitude'],
581+
fort['longitude'])
572582
else:
573583
self.log.debug("Could not spin fort %s", res)
574584
self.log.info("Could not spin fort http://maps.google.com/maps?q=%s,%s, Error id: %s", fort['latitude'],
@@ -632,6 +642,7 @@ def catch_near_pokemon(self):
632642

633643
map_cells = self.nearby_map_objects()['responses'].get('GET_MAP_OBJECTS', {}).get('map_cells', [])
634644
pokemons = PGoApi.flatmap(lambda c: c.get('catchable_pokemons', []), map_cells)
645+
pokemons = filter(lambda p: (p['encounter_id'] not in self.encountered_pokemons), pokemons)
635646

636647
# catch first pokemon:
637648
origin = (self._posf[0], self._posf[1])
@@ -653,12 +664,15 @@ def catch_near_pokemon(self):
653664
return catches_successful
654665

655666
def nearby_map_objects(self):
656-
position = self.get_position()
657-
neighbors = get_neighbors(self._posf)
658-
self.gsleep(1.0)
659-
return self.get_map_objects(latitude=position[0], longitude=position[1],
660-
since_timestamp_ms=[0] * len(neighbors),
661-
cell_id=neighbors).call()
667+
if time() - self._last_got_map_objects > self._map_objects_rate_limit:
668+
position = self.get_position()
669+
neighbors = get_neighbors(self._posf)
670+
gevent.sleep(1.0)
671+
self.map_objects = self.get_map_objects(latitude=position[0], longitude=position[1],
672+
since_timestamp_ms=[0] * len(neighbors),
673+
cell_id=neighbors).call()
674+
self._last_got_map_objects = time()
675+
return self.map_objects
662676

663677
def attempt_catch(self, encounter_id, spawn_point_id, capture_probability=None):
664678
catch_status = -1
@@ -989,14 +1003,15 @@ def encounter_pokemon(self, pokemon_data, retry=False, new_loc=None): # take in
9891003
self.send_update_pos()
9901004
# self.gsleep(2)
9911005

1006+
self.encountered_pokemons[encounter_id] = pokemon_data
9921007
return self.do_catch_pokemon(encounter_id, spawn_point_id, capture_probability, pokemon)
9931008
elif result == 7:
9941009
self.log.info("Couldn't catch %s Your pokemon bag was full, attempting to clear and re-try", pokemon.pokemon_type)
9951010
self.cleanup_pokemon()
9961011
if not retry:
9971012
return self.encounter_pokemon(pokemon_data, retry=True, new_loc=new_loc)
9981013
else:
999-
self.log.info("Could not start encounter for pokemon: %s", pokemon.pokemon_type)
1014+
self.log.info("Could not start encounter for pokemon: %s, status %s", pokemon.pokemon_type, result)
10001015
return False
10011016
except Exception as e:
10021017
self.log.error("Error in pokemon encounter %s", e)

0 commit comments

Comments
 (0)