Problèmes survenus avant d'accéder à Google Spreadsheet à partir d'un programme Python et mémorandum de contre-mesures.
Utilisez gspread
, une bibliothèque Python pour lire et écrire une feuille de calcul Google.
https://github.com/burnash/gspread
J'ai créé à l'avance une feuille de calcul nommée «testbook» sur Google Spreadsheet.
L'accès est http://gspread.readthedocs.org/en/latest/oauth2.html Dans la rue. Exécutez ce qui suit, qui est presque identique à l'exemple.
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'sample-xxxxxx.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open("testbook")
Ouvrez simplement la feuille de calcul sur la feuille de calcul Google en vue de la lecture et de l'écriture. Mais cela a échoué. Ci-dessous, le contenu et les contre-mesures pour chacun des multiples problèmes survenus avant de déplacer ce qui précède.
oauth2client.client.HttpAccessTokenRefreshError Première erreur
Traceback (most recent call last):
(Omission)
gc = gspread.authorize(credentials)
File "/usr/local/lib/python2.7/dist-packages/gspread/client.py", line 331, in authorize
client.login()
File "/usr/local/lib/python2.7/dist-packages/gspread/client.py", line 101, in login
self.auth.refresh(http)
File "/usr/local/lib/python2.7/dist-packages/oauth2client/client.py", line 659, in refresh
self._refresh(http.request)
File "/usr/local/lib/python2.7/dist-packages/oauth2client/client.py", line 864, in _refresh
self._do_refresh_request(http_request)
File "/usr/local/lib/python2.7/dist-packages/oauth2client/client.py", line 933, in _do_refresh_request
raise HttpAccessTokenRefreshError(error_msg, status=resp.status)
oauth2client.client.HttpAccessTokenRefreshError: invalid_grant: Invalid JWT: Token must be a short-lived token and in a reasonable timeframe
La cause était que je ne voulais pas synchroniser l'heure (c'était en retard sur le temps réel). Si vous réexécutez après avoir synchronisé l'heure ʻOauth2client.client.HttpAccessTokenRefreshError` n'apparaît plus.
google api - Token must be a short-lived token and in a reasonable timeframe - Stack Overflow http://stackoverflow.com/questions/36189612/token-must-be-a-short-lived-token-and-in-a-reasonable-timeframe
Mais a échoué avec une autre erreur.
requests.exceptions.SSLError
Traceback (most recent call last):
(Omission)
wks = gc.open("testbook")
File "/usr/local/lib/python2.7/dist-packages/gspread/client.py", line 145, in open
feed = self.get_spreadsheets_feed()
File "/usr/local/lib/python2.7/dist-packages/gspread/client.py", line 231, in get_spreadsheets_feed
r = self.session.get(url)
File "/usr/local/lib/python2.7/dist-packages/gspread/httpsession.py", line 75, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/gspread/httpsession.py", line 67, in request
response = func(url, data=data, headers=request_headers)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 60, in get
return request('get', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 457, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 569, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 420, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError
Cela se produit-il avec la série python 2.7? Cela ne s'est pas produit dans Python 3.5.1.
La solution immédiate pour python 2.7 est d'inclure une ancienne version de certifi
.
pip uninstall -y certifi && pip install certifi==2015.04.28
ssl - SSL3_GET_SERVER_CERTIFICATE certificate verify failed on Python when requesting (only) *.google.com - Stack Overflow http://stackoverflow.com/questions/34646942/ssl3-get-server-certificate-certificate-verify-failed-on-python-when-requesting
La version de certifi
initialement incluse est
pip list | grep certifi
certifi (2015.11.20.1)
Quand j'ai ré-exécuté, requests.exceptions.SSLError
a disparu, mais une autre erreur s'est produite.
SpreadsheetNotFound
Traceback (most recent call last):
(Omission)
wks = gc.open("testbook")
File "/usr/local/lib/python2.7/dist-packages/gspread/client.py", line 152, in open
raise SpreadsheetNotFound
gspread.exceptions.SpreadsheetNotFound
La documentation de gspread
contient la phrase suivante:
Using OAuth2 for Authorization — gspread 0.3.0 documentation http://gspread.readthedocs.org/en/latest/oauth2.html
Go to Google Sheets and share your spreadsheet with an email you have in your json_key['client_email']. Otherwise you’ll get a SpreadsheetNotFound exception when trying to open it.
Comme vous pouvez le voir, dans le client_email
décrit dans le fichier JSON des informations d'identification
Autorité éditoriale accordée.
Quand je l'ai repris, cela a réussi.
PyOpenSSL
Échec lors de l'installation du package dépendant de PyOpenSSL (package cffi
).
La cause est un manque de packages dépendants du côté Linux.
En regardant la documentation du paquet cffi
, il y a une phrase comme la suivante
http://cffi.readthedocs.org/en/latest/installation.html
on CPython, on non-Windows platforms, you also need to install libffi-dev in order to compile CFFI itself.
$ sudo aptitude search libffi-dev
p libffi-dev - Foreign Function Interface library (development files)
$ sudo aptitude install libffi-dev
pip install PyOpenSSL --upgrade
Succès