Probleme, die vor dem Zugriff auf Google Spreadsheet über ein Python-Programm aufgetreten sind, und ein Memorandum mit Gegenmaßnahmen.
Verwenden Sie gspread
, eine Python-Bibliothek zum Lesen und Schreiben von Google Spreadsheet.
https://github.com/burnash/gspread
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.
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.
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