Exemple #1
0
    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
Exemple #2
0
    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
            )
Exemple #3
0
    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
Exemple #4
0
    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)
Exemple #5
0
    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
Exemple #6
0
    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]
Exemple #7
0
    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]
Exemple #8
0
    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