Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python

Einführung

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.

Über PyDrive2

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

Betriebsumgebung

$ 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

Starten Sie PyDrive2

Befolgen Sie die Kurzanleitung zur PyDrive-Dokumentation (https://gsuitedevs.github.io/PyDrive/docs/build/html/quickstart.html).

  1. Erstellen Sie die Anmeldeinformationen, die zum Betreiben der Laufwerks-API in der GCP-Konsole erforderlich sind
  2. Authentifizierung anhand der erstellten Authentifizierungsinformationen

Fahren Sie in der Reihenfolge fort.

1. Erstellen Sie Anmeldeinformationen über die GCP-Konsole

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.

  1. Wenn nicht aktiviert, aktivieren Sie die Laufwerks-API über die GCP-Konsole
  1. Erstellen Sie eine OAuth-Client-ID (geben Sie den Dokumentwert ein).
  1. Laden Sie nach der Erstellung die Authentifizierungsinformationen auf das Entwicklungsterminal herunter 4-download_client_id.png

2. Funktionsprüfung

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=...
5-login_google.png

Wenn Sie ein Google-Konto auswählen und sich anmelden, 6-authentication_completed.png

Die Befehlszeile zeigt auch, dass die Authentifizierung erfolgreich war!

$ python quickstart.py
Your browser has been opened to visit:

  :

Authentication successful.

Ich möchte verhindern, dass der Browser jedes Mal gestartet wird

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. 7-login_google-again.png

Abhängig vom Betriebsbereich mit der Drive-API (Bereich * später beschrieben) wird eine Warnseite angezeigt. "Details anzeigen" zum Verschieben. 8-unverified_page.png

9-allow_access_private_data.png

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.

Zusatzinformationen

Laufwerk-API-Bereich

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.

could_not_use_commandlineauth.png

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

settings.yaml und client_secrets.json

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

In 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

Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
[Python] Ein Programm, das die Anzahl der Täler zählt
Erstellen Sie eine Kopie einer Google Drive-Datei aus Python
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Greifen Sie mit Python auf Google Drive zu
Duplizieren Sie die in Google Drive erstellte Dokumentvorlage mit PyDrive2
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Eine Aufzeichnung zum Patchen eines Python-Pakets
Memorandum des Python-Paketverwaltungstools ez_setup
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
[Python] Ein Programm, das die maximale Anzahl von Spielzeugen findet, die mit Ihrem Geld gekauft werden können
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
[Python] Ein Programm, das Treppen mit # erstellt
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
[Python] Ein Programm, das die Anzahl der Schokoladensegmente berechnet, die die Bedingungen erfüllen
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B- und C-Probleme von ABC182 mit Python!
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
So führen Sie den Übungscode des Buches "Profitable KI mit Python erstellen" in Google Colaboratory aus
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Überprüfen Sie die Existenz der Datei mit Python
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Berechnen Sie die Wahrscheinlichkeit, eine Tintenfischmünze zu sein, mit dem Bayes-Theorem [Python]
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
[Python] [Meta] Ist der Python-Typ ein Typ?
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Eine typisierte Welt, die mit Python beginnt
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Die Geschichte der Verarbeitung A von Blackjack (Python)
Aus einem Buch, das die Denkweise des Programmierers interessanterweise gelernt hat (Python)
[Python] Ein Programm, das die Partitur rundet
Laden Sie Bilder mit Python auf Google Drive hoch
[AtCoder Erklärung] Kontrollieren Sie ABC184 A, B, C Probleme mit Python!
[Python] Hinweis: Selbst erstellte Funktion zum Ermitteln des Bereichs der Normalverteilung
Artikel, der eine Person sein kann, die den Mechanismus der API versteht und beherrscht (mit Python-Code)
Über das Problem, dass die Python-Version von Google App Engine nicht ineinander greift
[AtCoder-Erklärung] Kontrollieren Sie die A-, B-, C- und D-Probleme von ABC183 mit Python!
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE