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