コード例 #1
0
ファイル: pgoapi.py プロジェクト: belzesneaks/P-GO
 def call(self):
     if not self._req_method_list:
         return False
     
     if self._auth_provider is None or not self._auth_provider.is_login():
         self.log.info('Not logged in')
         return False
     
     player_position = self.get_position()
     
     request = RpcApi(self._auth_provider)
     
     if self._api_endpoint:
         api_endpoint = self._api_endpoint
     else:
         api_endpoint = self.API_ENTRY
     
     self.log.info('Execution of RPC')
     response = None
     try:
         response = request.request(api_endpoint, self._req_method_list, player_position)
     except ServerBusyOrOfflineException as e:
         self.log.info('Server seems to be busy or offline - try again!')
     
     # cleanup after call execution
     self.log.info('Cleanup of request!')
     self._req_method_list = []
     
     return response
コード例 #2
0
    def call(self):
        if not self._req_method_list:
            return False

        if self._auth_provider is None or not self._auth_provider.is_login():
            self.log.info('Not logged in')
            return False

        player_position = self.get_position()

        request = RpcApi(self._auth_provider)

        if self._api_endpoint:
            api_endpoint = self._api_endpoint
        else:
            api_endpoint = self.API_ENTRY

        self.log.info('Execution of RPC')
        response = None
        try:
            response = request.request(api_endpoint, self._req_method_list,
                                       player_position)
        except ServerBusyOrOfflineException as e:
            self.log.info('Server seems to be busy or offline - try again!')

        # cleanup after call execution
        self.log.info('Cleanup of request!')
        self._req_method_list = []

        return response
コード例 #3
0
ファイル: pgoapi.py プロジェクト: yannn12/pogom
    def __init__(self):
        self.log = logging.getLogger(__name__)

        self._rpc = RpcApi()
        self._api_endpoint = None

        self._position_lat = 0
        self._position_lng = 0
        self._position_alt = 0

        self._req_method_list = []
コード例 #4
0
ファイル: pgoapi.py プロジェクト: yannn12/pogom
class PGoApi:
    API_ENTRY = "https://pgorelease.nianticlabs.com/plfe/rpc"

    def __init__(self):
        self.log = logging.getLogger(__name__)

        self._rpc = RpcApi()
        self._api_endpoint = None

        self._position_lat = 0
        self._position_lng = 0
        self._position_alt = 0

        self._req_method_list = []

    def call(self):
        if not self._req_method_list:
            return False

        if self._rpc.auth_provider is None or not self._rpc.auth_provider.is_login():
            self.log.info("Not logged in")
            return False

        player_position = self.get_position()
        api_endpoint = self._api_endpoint or self.API_ENTRY

        self.log.info("Execution of RPC")
        try:
            response = self._rpc.request(api_endpoint, self._req_method_list, player_position)
        except ServerBusyOrOfflineException as e:
            self.log.info("Server seems to be busy or offline - try again!")
            return False

        # cleanup after call execution
        self.log.info("Cleanup of request!")
        self._req_method_list = []

        return response

    def call_async(self, callback):
        if not self._req_method_list:
            return False

        if self._rpc.auth_provider is None or not self._rpc.auth_provider.is_login():
            self.log.info("Not logged in")
            return False

        player_position = self.get_position()
        api_endpoint = self._api_endpoint or self.API_ENTRY

        self.log.info("Execution of RPC")
        self._rpc.request_async(api_endpoint, self._req_method_list, player_position, callback)
        self._req_method_list = []

    def finish_async(self, max_time=None):
        self._rpc.finish_async(max_time)

    def list_curr_methods(self):
        for i in self._req_method_list:
            print("{} ({})".format(RpcEnum.RequestMethod.Name(i), i))

    def set_logger(self, logger):
        self._ = logger or logging.getLogger(__name__)

    def get_position(self):
        return (self._position_lat, self._position_lng, self._position_alt)

    def set_position(self, lat, lng, alt):
        self.log.debug("Set Position - Lat: %s Long: %s Alt: %s", lat, lng, alt)

        self._position_lat = f2i(lat)
        self._position_lng = f2i(lng)
        self._position_alt = f2i(alt)

    def __getattr__(self, func):
        def function(**kwargs):

            if not self._req_method_list:
                self.log.info("Create new request...")

            name = func.upper()
            if kwargs:
                self._req_method_list.append({RpcEnum.RequestMethod.Value(name): kwargs})
                self.log.info("Adding '%s' to RPC request including arguments", name)
                self.log.debug("Arguments of '%s': \n\r%s", name, kwargs)
            else:
                self._req_method_list.append(RpcEnum.RequestMethod.Value(name))
                self.log.info("Adding '%s' to RPC request", name)

            return self

        if func.upper() in RpcEnum.RequestMethod.keys():
            return function
        else:
            raise AttributeError

    def login(self, provider, username, password):
        if not isinstance(username, basestring) or not isinstance(password, basestring):
            raise AuthException("Username/password not correctly specified")

        if provider == "ptc":
            self._rpc.auth_provider = AuthPtc()
        elif provider == "google":
            self._rpc.auth_provider = AuthGoogle()
        else:
            raise AuthException("Invalid authentication provider - only ptc/google available.")

        self.log.debug("Auth provider: %s", provider)

        if not self._rpc.auth_provider.login(username, password):
            self.log.info("Login process failed")
            return False

        self.log.info("Starting RPC login sequence (app simulation)")

        # making a standard call, like it is also done by the client
        self.get_player()
        self.get_hatched_eggs()
        self.get_inventory()
        self.check_awarded_badges()
        self.download_settings(hash="4a2e9bc330dae60e7b74fc85b98868ab4700802e")

        response = self.call()

        if not response:
            self.log.info("Login failed!")
            return False

        if "api_url" in response:
            self._api_endpoint = "https://{}/rpc".format(response["api_url"])
            self.log.debug("Setting API endpoint to: %s", self._api_endpoint)
        else:
            self.log.error("Login failed - unexpected server response!")
            return False

        if "auth_ticket" in response:
            self._rpc.auth_provider.set_ticket(response["auth_ticket"].values())

        self.log.info("Finished RPC login sequence (app simulation)")
        self.log.info("Login process completed")

        return True