In diesem Artikel werden wir "PyDrive2" (GitHub) aus den Paketen aufnehmen, die Google Drive mit Python betreiben. Google Drive kann über die Drive-API betrieben werden, aber ich werde den Authentifizierungsteil der Drive-API in "PyDrive2" als Memorandum zusammenfassen. Insbesondere geht es um Folgendes.
"PyDrive" (GitHub) ist möglicherweise ein wenig als Paket für den Betrieb von Google Drive mit Python bekannt. Leider ist PyDrive seit über einem Jahr nicht mehr aktualisiert.
Es scheint, dass PyDrive2 kürzlich (Januar 2020) von PyDrive gespalten wurde. PyDrive2 behauptet, "Wartungsgabel von PyDrive" zu sein.
Es scheint, dass PyDrive2 noch keine rückwärts inkompatiblen Änderungen vorgenommen hat (Stand Mai 2020). Als PyDrive2-Dokument ist PyDrive-Dokument sogar verknüpft. Darüber hinaus hat das in der Ausgabe von PyDrive gesammelte Wissen den Eindruck, dass es so angewendet werden kann, wie es auf PyDrive2 ist.
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G3020
$ python -V
Python 3.8.1
$ pip list | grep PyDrive2
PyDrive2 1.4.10
Befolgen Sie die Kurzanleitung zur PyDrive-Dokumentation (https://gsuitedevs.github.io/PyDrive/docs/build/html/quickstart.html).
Fahren Sie in der Reihenfolge fort.
Es wird davon ausgegangen, dass Sie über ein GCP-Konto (Google Cloud Platform) verfügen und über ein oder mehrere Projekte in GCP verfügen. Erstellen Sie eine "OAuth-Client-ID" gemäß Schnellstart.
Lesen Sie den Schnellstart und führen Sie den folgenden Code aus.
quickstart.py
from pydrive2.auth import GoogleAuth #Lesen Sie pydrive als pydrive2 von Quickstart
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
Dateipositionierung
.
├── client_secrets.json
└── quickstart.py
Wenn Sie quickstart.py
ausführen, wird der Browser gestartet.
$ python quickstart.py
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?client_id=...
Wenn Sie ein Google-Konto auswählen und sich anmelden,
Die Befehlszeile zeigt auch, dass die Authentifizierung erfolgreich war!
$ python quickstart.py
Your browser has been opened to visit:
:
Authentication successful.
Wechseln Sie zur PyDrive-Dokumentation OAuth leicht gemacht.
Mit nur zwei Codezeilen wurde ich für die Verwendung der Drive-API authentifiziert. Es ist ziemlich einfach, aber Sie müssen sich jedes Mal, wenn Sie dieses Skript ausführen, über Ihren Browser anmelden. Dies ist nicht für die Skriptautomatisierung geeignet. Daher setzen wir PyDrive2 so, dass * die für die Authentifizierung verwendeten Informationen gespeichert und anschließend automatisch aktualisiert werden **. Nach der einmaligen Anmeldung werden die gespeicherten Anmeldeinformationen aktualisiert und verwendet, sodass Sie sich nicht mehr über einen Browser anmelden müssen.
Um dies zu erreichen, schreiben Sie settings.yaml
.
Die Einstellungen zum Speichern der Authentifizierungsinformationen in einer Datei lauten wie folgt.
settings.yaml
# OAuth 2.0 Geben Sie die Client-Anmeldeinformationen an (benennen Sie sie um)
client_config_file: my_client_secrets.json
#Einstellungen zum Speichern von Anmeldeinformationen in einer Datei
save_credentials: True
save_credentials_backend: file
save_credentials_file: saved_credentials.json
#Authentifizierungsinformationen(credentials)Einstellung für die automatische Aktualisierung (Browser startet nicht)
get_refresh_token: True
Dateipositionierung
.
├── my_client_secrets.json
├── quickstart.py
└── settings.yaml
Wenn Sie "python quickstart.py" in der Befehlszeile ausführen, müssen Sie sich zum ersten Mal über Ihren Browser anmelden.
Abhängig vom Betriebsbereich mit der Drive-API (Bereich * später beschrieben) wird eine Warnseite angezeigt.
"Details anzeigen" zum Verschieben.
Wenn Sie dies zulassen, zeigt Ihr Browser "Der Authentifizierungsablauf ist abgeschlossen" an.
Die Authentifizierung mit einem Browser ist nur das erste Mal. Da "get_refresh_token" aktiviert ist [^ 1], wird der Browser nicht gestartet, da die Authentifizierungsinformationen ab dem zweiten Mal automatisch aktualisiert und authentifiziert werden [^ 2].
Dateipositionierung
.
├── my_client_secrets.json
├── quickstart.py
├── saved_credentials.json #Erstellt. Danach wird es automatisch aktualisiert
└── settings.yaml
[^ 1]: Jedes Mal, wenn ich den Wert von "get_refresh_token" ändere, muss ich mich zum ersten Mal mit dem Browser anmelden. Es wird empfohlen, die gespeicherten Anmeldeinformationen zu löschen und erneut auszuführen (ich habe in der Vergangenheit "get_refresh_token" mit "saved_credentials.json" aktiviert, aber es wurde nicht reflektiert und ich war süchtig danach. Ich frage mich, ob die Elemente der zurückgegebenen Daten unterschiedlich sind. "
[^ 2]: Es scheint, dass die Authentifizierungsinformationen nach einer bestimmten Zeit möglicherweise nicht automatisch aktualisiert werden. Als ich es zum ersten Mal seit langer Zeit berührt habe, ist ein Fehler aufgetreten. Ich habe die gespeicherten Anmeldeinformationen (saved_credentials.json
) gelöscht und erneut ausgeführt, um sie zu beheben.
Es gibt ein Element namens "oauth_scope" in "settings.yaml" [^ 3]. Da diesmal kein Wert angegeben wird, lautet der Standardwert "[" https://www.googleapis.com/auth/drive "]". Laut der Drive API-Bereichsliste (https://developers.google.com/drive/api/v2/about-auth#OAuth2Authorizing) ist dies ein "eingeschränkter" Bereich. Apps, für die ein eingeschränkter Bereich erforderlich ist und die den Google-Überprüfungsprozess nicht bestanden haben, werden als "Nicht überprüfte App" gekennzeichnet und die vorherige Seite "Diese App wurde nicht überprüft" wird angezeigt [^ 4].
Laut https://support.google.com/cloud/answer/7454865 müssen Sie dem "OAuth-Zustimmungsbildschirm" "https: // www.googleapis.com / auth / drive" hinzufügen. Es gibt. Es reichte jedoch nicht aus, es nur hinzuzufügen, und ich musste die Bestätigung von Google beantragen.
Was Sie durch die Arbeit mit Google Drive in Python erreichen möchten, ist zu diesem Zeitpunkt die persönliche Automatisierung. Da wir keine App zur Verwendung durch Dritte entwickeln, werden wir nicht mit dem Genehmigungsprozess fortfahren und sie so weiterentwickeln, wie sie ist [^ 5].
[^ 4]: Von https://support.google.com/cloud/answer/7454865. "Eine nicht verifizierte App ist eine App oder ein Apps-Skript, die einen vertraulichen oder eingeschränkten OAuth-Bereich anfordert, aber den Google-Verifizierungsprozess noch nicht durchlaufen hat."
[^ 5]: "Apps in Entwicklung: Wenn es sich bei Ihrer App um eine experimentelle App oder eine Testversion handelt, müssen Sie keine Überprüfung durchführen, es sei denn, Sie möchten sie der Öffentlichkeit zugänglich machen." Https://support.google.com/ Aus der Wolke / Antwort / 7454865
LocalWebserverAuth
und CommandLineAuth
Ich habe "LocalWebserverAuth" in "CommandLineAuth" geändert, um zu verhindern, dass der Browser bei meiner ersten Anmeldung gestartet wird, aber es hat nicht funktioniert.
Aufgrund des im Browser angezeigten "Genehmigungsfehlers" wird die OAuth-Client-ID * als Webanwendung * erstellt, sodass "CommandLineAuth" anscheinend nicht unterstützt wird.
Daher halte ich es für wichtig, sich zum ersten Mal mit dem Browser anzumelden [^ 6].
[^ 6]: In der Ausführungsumgebung, in der der Browser nicht gestartet werden kann, werden die gespeicherten Authentifizierungsinformationen dupliziert und platziert (der Browser wird nicht gestartet, sodass er problemlos ausgeführt werden kann).
Wenn sich settings.yaml und client_secrets.json im selben Verzeichnis wie quickstart.py befinden, scheint settings.yaml geladen zu sein. Ich war neugierig und habe mir die [Implementierung] von "Google Auth" in "auth.py" (https://github.com/iterative/PyDrive2/blob/d2065b42a4c6cc39fb6666a278b361d2c59ab8c2/pydrive2/auth.py#L142) angesehen. ..
GoogleAuth ()
ausgeführt wird
--Die in settings.yaml angegebene client_config_file
wird verwendetIn diesem Artikel
--client_secrets.json wird vor dem Erstellen von settings.yaml verwendet
--Nach dem Erstellen von settings.yaml wird die dort angegebene client_config_file
verwendet.
Es gibt.
Recommended Posts