read google example python oauth google-api gmail-api

google - API de Gmail con OAuth y Python-AccessTokenRefreshError: invalid_grant



read gmail python (1)

Ajá, encontré el problema: tonterías de mi parte.

Estaba usando la "ID de cliente" y SignedJwtAssertionCredentials eso a SignedJwtAssertionCredentials

Debería haber estado usando la "Dirección de correo electrónico", y pasar eso en su lugar.

Uno pensaría que el hecho de que la variable se llamara client_email hubiera sido una pista ... jaja.

Como referencia, la página de documentos de API relevante:

http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html

Intento utilizar la API de Gmail con las bibliotecas cliente de Python. Sin embargo, estoy AccessTokenRefreshError: invalid_grant un mensaje de error sobre AccessTokenRefreshError: invalid_grant .

He instalado las bibliotecas del cliente de Google de la siguiente manera:

pip install google-api-python-client

He ido a la Consola de Desarrolladores de Google, he creado un nuevo Proyecto y luego he ido a API y autenticación , luego a Credenciales . Luego, hice clic en Crear nueva ID de cliente y en la cuenta de servicio seleccionada.

Al principio, cuando ejecuté lo siguiente, me quejé de que no había una biblioteca de cifrado, así que pip instalé pycrypto. Luego, se quejó de que el archivo de claves estaba en el formato incorrecto, así que pip instalé pyopenssl

Luego, en un shell Python corro:

from oauth2client.client import SignedJwtAssertionCredentials client_email = ''<SANITISED>.apps.googleusercontent.com'' with open("foobar-d31647e3d00a.p12") as f: private_key = f.read() credentials = SignedJwtAssertionCredentials(client_email, private_key, ''https://www.googleapis.com/auth/gmail.readonly'') from httplib2 import Http http_auth = credentials.authorize(Http()) from apiclient.discovery import build gmail_server = build(''gmail'', ''v1'', http=http_auth)

Es cuando ejecuto el último comando que obtengo la siguiente stacktrace:

AccessTokenRefreshError Traceback (most recent call last) <ipython-input-8-7fd72f40edd2> in <module>() ----> 1 gmail_server = build(''gmail'', ''v1'', http=http_auth) /Users/victorhooi/.virtualenvs/kenny/lib/python2.7/site-packages/oauth2client/util.pyc in positional_wrapper(*args, **kwargs) 133 else: # IGNORE 134 pass --> 135 return wrapped(*args, **kwargs) 136 return positional_wrapper 137 /Users/victorhooi/.virtualenvs/kenny/lib/python2.7/site-packages/googleapiclient/discovery.pyc in build(serviceName, version, http, discoveryServiceUrl, developerKey, model, requestBuilder, credentials) 196 logger.info(''URL being requested: GET %s'' % requested_url) 197 --> 198 resp, content = http.request(requested_url) 199 200 if resp.status == 404: /Users/victorhooi/.virtualenvs/kenny/lib/python2.7/site-packages/oauth2client/util.pyc in positional_wrapper(*args, **kwargs) 133 else: # IGNORE 134 pass --> 135 return wrapped(*args, **kwargs) 136 return positional_wrapper 137 /Users/victorhooi/.virtualenvs/kenny/lib/python2.7/site-packages/oauth2client/client.pyc in new_request(uri, method, body, headers, redirections, connection_type) 528 if not self.access_token: 529 logger.info(''Attempting refresh to obtain initial access_token'') --> 530 self._refresh(request_orig) 531 532 # Clone and modify the request headers to add the appropriate /Users/victorhooi/.virtualenvs/kenny/lib/python2.7/site-packages/oauth2client/client.pyc in _refresh(self, http_request) 742 """ 743 if not self.store: --> 744 self._do_refresh_request(http_request) 745 else: 746 self.store.acquire_lock() /Users/victorhooi/.virtualenvs/kenny/lib/python2.7/site-packages/oauth2client/client.pyc in _do_refresh_request(self, http_request) 805 except (TypeError, ValueError): 806 pass --> 807 raise AccessTokenRefreshError(error_msg) 808 809 def _revoke(self, http_request): AccessTokenRefreshError: invalid_grant

¿Alguna idea de lo que estoy haciendo mal?