[Python] Fehlerbehebung vor dem Zugriff auf Google Spreadsheet mit gspread

Dinge die zu tun sind

Probleme, die vor dem Zugriff auf Google Spreadsheet über ein Python-Programm aufgetreten sind, und ein Memorandum mit Gegenmaßnahmen.

Methode

Verwenden Sie gspread, eine Python-Bibliothek zum Lesen und Schreiben von Google Spreadsheet. https://github.com/burnash/gspread

Wie man gspread benutzt

Ich habe im Voraus eine Tabelle mit dem Namen "Testbuch" in der Google-Tabelle erstellt.

Zugang ist http://gspread.readthedocs.org/en/latest/oauth2.html Auf der Strasse. Führen Sie Folgendes aus, das fast dem Beispiel entspricht.

    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")

Öffnen Sie einfach die Tabelle in der Google-Tabelle, um das Lesen und Schreiben vorzubereiten. Aber es ist gescheitert. Nachfolgend die Inhalte und Gegenmaßnahmen für jedes der zahlreichen Probleme, die vor dem Verschieben der oben genannten aufgetreten sind.

Fehlerbehebung

oauth2client.client.HttpAccessTokenRefreshError Erster Fehler

Traceback (most recent call last):
(Unterlassung)
    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

Die Ursache war, dass ich die Zeit nicht synchronisieren wollte (sie lag hinter der Echtzeit). Wenn Sie nach dem Synchronisieren der Zeit erneut ausführen "oauth2client.client.HttpAccessTokenRefreshError" wird nicht mehr angezeigt.

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

Aber mit einem anderen Fehler fehlgeschlagen.

requests.exceptions.SSLError

Traceback (most recent call last):
(Unterlassung)
    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

Kommt es bei Python 2.7 vor? Es ist in Python 3.5.1 nicht aufgetreten. Die sofortige Lösung für Python 2.7 besteht darin, eine ältere Version von certifi einzuschließen.

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

Die ursprünglich enthaltene Version von certifi ist

pip list | grep certifi
certifi (2015.11.20.1)

Bei der erneuten Ausführung verschwand "request.exceptions.SSLError", es trat jedoch ein weiterer Fehler auf.

SpreadsheetNotFound

Traceback (most recent call last):
(Unterlassung)
    wks = gc.open("testbook")
  File "/usr/local/lib/python2.7/dist-packages/gspread/client.py", line 152, in open
    raise SpreadsheetNotFound
gspread.exceptions.SpreadsheetNotFound

Die "gspread" -Dokumentation enthält den folgenden Satz:

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.

Wie Sie sehen können, in der "client_email", die in der JSON-Datei der Anmeldeinformationsinformationen beschrieben ist Erteilte redaktionelle Autorität.

Als ich es wieder laufen ließ, war es erfolgreich.

Andere Fehlerbehebung

Fehler beim Installieren des PyOpenSSL-Pakets

Fehler bei der Installation des PyOpenSSL-abhängigen Pakets (cffi-Paket). Die Ursache ist ein Mangel an abhängigen Paketen auf der Linux-Seite.

In der Dokumentation des "cffi" -Pakets gibt es einen Satz wie den folgenden

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

Erfolg

Recommended Posts

[Python] Fehlerbehebung vor dem Zugriff auf Google Spreadsheet mit gspread
Fügen Sie AWS-Daten mit boto + gspread in Google Spreadsheet ein
Lernen Sie Python mit Google Colaboratory
[Python] Filtern Sie Tabellenkalkulationen mit gspread
Greifen Sie mit Python auf Google Drive zu
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
[GCP] Betreiben Sie Google Cloud Storage mit Python
Registrieren Sie Benutzer mit Google Admin SDK (Python)
Erstellen einer Google-Tabelle mit der Python / Google Data-API
Laden Sie Bilder mit Python auf Google Drive hoch
Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE
CSV-Ausgabe der Google-Suche mit [Python]! 【Einfach】
Spielen Sie mit Google Spread Sheet mit Python (OAuth)
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Was tun, um eine Google-Tabelle in Python zu erhalten?
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Einfache Möglichkeit, mit Google Colab mit Python zu kratzen
PIL in Python unter Windows8 (für Google App Engine)
Erste Schritte mit Google App Engine für Python und PHP