[Python] Dépannage avant d'accéder à Google Spreadsheet avec gspread

Choses à faire

Problèmes survenus avant d'accéder à Google Spreadsheet à partir d'un programme Python et mémorandum de contre-mesures.

Méthode

Utilisez gspread, une bibliothèque Python pour lire et écrire une feuille de calcul Google. https://github.com/burnash/gspread

Comment utiliser 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.

dépannage

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.

Autre dépannage

Échec de l'installation du package 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

Recommended Posts

[Python] Dépannage avant d'accéder à Google Spreadsheet avec gspread
Mettez les données AWS dans Google Spreadsheet avec boto + gspread
Étudiez Python avec Google Colaboratory
[Python] Filtrer les feuilles de calcul avec gspread
Accédez à Google Drive avec Python
Essayez d'utiliser Python avec Google Cloud Functions
[GCP] Exploitez Google Cloud Storage avec Python
Enregistrer les utilisateurs avec le SDK d'administration Google (python)
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
Télécharger des images sur Google Drive avec Python
Informer périodiquement l'état de traitement de Raspberry Pi avec python → Google Spreadsheet → LINE
Sortie CSV de la recherche Google avec [Python]! 【Facile】
Jouez avec Google Spread Sheet avec Python (OAuth)
Essayez d'exécuter Google Chrome avec Python et Selenium
Que faire pour obtenir une feuille de calcul Google en Python
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Un moyen facile de gratter avec Python en utilisant Google Colab
PIL en Python sur Windows8 (pour Google App Engine)
Premiers pas avec Google App Engine pour Python et PHP