def createPogoSession(self, provider=None, locationLookup='', session=None, noop=False): if self.provider: self.provider = provider # determine location location = None if noop: location = Location.Noop() elif session: location = session.location elif locationLookup: location = Location(locationLookup, self.geo_key) logging.info(location) if self.accessToken and location: return PogoSession(self, location, old=session) # else something has gone wrong elif location is None: logging.critical('Location not found') elif self.accessToken is None: logging.critical('Access token not generated') return None
def walkTo(self, olatitude, olongitude, epsilon=10, step=7.5, delay=10): if step >= epsilon: raise GeneralPogoException("Walk may never converge") if self.session.location.noop: raise GeneralPogoException("Location not set") # Calculate distance to position latitude, longitude, _ = self.session.getCoordinates() dist = closest = Location.getDistance( latitude, longitude, olatitude, olongitude ) # Run walk divisions = closest / step dLat = (latitude - olatitude) / divisions dLon = (longitude - olongitude) / divisions logging.info( "Walking %f meters. This will take ~%f seconds..." % ( dist, dist / step ) ) # Approach at supplied rate steps = 1 while dist > epsilon: logging.debug("%f m -> %f m away", closest - dist, closest) latitude -= dLat longitude -= dLon steps %= delay if steps == 0: self.session.setCoordinates( latitude, longitude ) time.sleep(1) dist = Location.getDistance( latitude, longitude, olatitude, olongitude ) steps += 1 # Finalize walk steps -= 1 if steps % delay > 0: time.sleep(delay - steps) self.session.setCoordinates( latitude, longitude )
def createPogoSession( self, provider=None, locationLookup='', session=None, noop=False ): if self.provider: self.provider = provider # determine location location = None if noop: location = Location.noop() elif session: location = session.location elif locationLookup: location = Location(locationLookup, self.geo_key) logging.info(location) if self.accessToken and location: return PogoSession(self, location, old=session) # else something has gone wrong elif location is None: logging.critical('Location not found') elif self.accessToken is None: logging.critical('Access token not generated') return None
def walkTo(self, olatitude, olongitude, epsilon=10, step=7.5, delay=10): if step >= epsilon: raise GeneralPogoException("Walk may never converge") if self.session.location.noop: raise GeneralPogoException("Location not set") # Calculate distance to position latitude, longitude, _ = self.session.getCoordinates() dist = closest = Location.getDistance(latitude, longitude, olatitude, olongitude) # Run walk divisions = closest / step dLat = (latitude - olatitude) / divisions dLon = (longitude - olongitude) / divisions logging.info("Walking %f meters. This will take ~%f seconds..." % (dist, dist / step)) # Approach at supplied rate steps = 1 while dist > epsilon: logging.debug("%f m -> %f m away", closest - dist, closest) latitude -= dLat longitude -= dLon steps %= delay if steps == 0: self.session.setCoordinates(latitude, longitude) time.sleep(1) dist = Location.getDistance(latitude, longitude, olatitude, olongitude) steps += 1 # Finalize walk steps -= 1 if steps % delay > 0: time.sleep(delay - steps) self.session.setCoordinates(latitude, longitude)
def findBestPokemon(self): # Get Map details and print pokemon logging.info("Finding Nearby Pokemon:") cells = self.session.getMapObjects(bothDirections=False) closest = float("Inf") best = -1 pokemonBest = None latitude, longitude, _ = self.session.getCoordinates() logging.info("Current pos: %f, %f", latitude, longitude) for cell in cells.map_cells: # Heap in pokemon protos where we have long + lat pokemons = [p for p in cell.wild_pokemons] pokemons += [p for p in cell.catchable_pokemons] for pokemon in pokemons: # Normalize the ID from different protos pokemonId = getattr(pokemon, "pokemon_id", None) if not pokemonId: pokemonId = pokemon.pokemon_data.pokemon_id # Find distance to pokemon dist = Location.getDistance( latitude, longitude, pokemon.latitude, pokemon.longitude ) # Log the pokemon found logging.info( "%s, %f meters away", pokedex[pokemonId], dist ) rarity = pokedex.getRarityById(pokemonId) # Greedy for rarest if rarity > best: pokemonBest = pokemon best = rarity closest = dist # Greedy for closest of same rarity elif rarity == best and dist < closest: pokemonBest = pokemon closest = dist return pokemonBest
def sortCloseForts(self): # Sort nearest forts (pokestop) logging.info("Sorting Nearest Forts:") cells = self.session.getMapObjects(bothDirections=False) ordered_forts = [] for cell in cells.map_cells: for fort in cell.forts: if fort.type == 1: ordered_forts.append({ 'hilbert': Location.getLatLongIndex( fort.latitude, fort.longitude ), 'fort': fort }) ordered_forts = sorted(ordered_forts, key=lambda k: k['hilbert']) return [instance['fort'] for instance in ordered_forts]
def sortCloseForts(self): # Sort nearest forts (pokestop) logging.info("Sorting Nearest Forts:") cells = self.session.getMapObjects(bothDirections=False) ordered_forts = [] for cell in cells.map_cells: for fort in cell.forts: if fort.type == 1: ordered_forts.append({ 'hilbert': Location.getLatLongIndex(fort.latitude, fort.longitude), 'fort': fort }) ordered_forts = sorted(ordered_forts, key=lambda k: k['hilbert']) return [instance['fort'] for instance in ordered_forts]
def findBestPokemon(self): # Get Map details and print pokemon logging.info("Finding Nearby Pokemon:") cells = self.session.getMapObjects(bothDirections=False) closest = float("Inf") best = -1 pokemonBest = None latitude, longitude, _ = self.session.getCoordinates() logging.info("Current pos: %f, %f", latitude, longitude) for cell in cells.map_cells: # Heap in pokemon protos where we have long + lat pokemons = [p for p in cell.wild_pokemons] pokemons += [p for p in cell.catchable_pokemons] for pokemon in pokemons: # Normalize the ID from different protos pokemonId = getattr(pokemon, "pokemon_id", None) if not pokemonId: pokemonId = pokemon.pokemon_data.pokemon_id # Find distance to pokemon dist = Location.getDistance(latitude, longitude, pokemon.latitude, pokemon.longitude) # Log the pokemon found logging.info("%s, %f meters away", pokedex[pokemonId], dist) rarity = pokedex.getRarityById(pokemonId) # Greedy for rarest if rarity > best: pokemonBest = pokemon best = rarity closest = dist # Greedy for closest of same rarity elif rarity == best and dist < closest: pokemonBest = pokemon closest = dist return pokemonBest