Dans cet article, nous allons utiliser PyDrive2
(GitHub) parmi les packages qui exploitent Google Drive avec Python.
Google Drive peut être exploité via l'API Drive, mais je résumerai la partie authentification de l'API Drive dans `PyDrive2 'sous forme de mémorandum.
Plus précisément, il traite de ce qui suit.
--Comment créer des identifiants (ID client OAuth 2.0) dans la console GCP
PyDrive
(GitHub) est peut-être un peu connu comme un package permettant d'utiliser Google Drive avec Python.
Malheureusement, PyDrive n'est plus à jour depuis plus d'un an maintenant.
Il semble que PyDrive2 ait récemment été dérivé de PyDrive (janvier 2020). PyDrive2 prétend être «une fourche maintenue de PyDrive».
Il semble que PyDrive2 n'ait pas encore incorporé de modifications rétrocompatibles (en mai 2020). En tant que document PyDrive2, PyDrive Document est lié. De plus, les connaissances accumulées dans le numéro de PyDrive ont l'impression qu'elles peuvent s'appliquer telles quelles à PyDrive2.
$ 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
Suivez le Quickstart de la documentation PyDrive (https://gsuitedevs.github.io/PyDrive/docs/build/html/quickstart.html).
Procédez dans l'ordre de.
On suppose que vous disposez d'un compte GCP (Google Cloud Platform) et que vous avez un ou plusieurs projets dans GCP. Créez un "ID client OAuth" selon Quickstart.
Créez un ID client OAuth (entrez la valeur du document) --Opération recommandée depuis API et tableau de bord de service --Créer à partir de "Credentials" dans la navigation sur la gauche → Entrez la valeur de réglage dans Quickstart → Créé (ce pop-up se ferme en cliquant sur "OK")
Après la création, téléchargez les informations d'authentification sur le terminal de développement
client_secrets.json
Reportez-vous à Quickstart et exécutez le code suivant.
quickstart.py
from pydrive2.auth import GoogleAuth #Lire pydrive comme pydrive2 à partir de Quickstart
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
Placement des fichiers
.
├── client_secrets.json
└── quickstart.py
Lancer quickstart.py
lancera le navigateur.
$ python quickstart.py
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?client_id=...
Lorsque vous sélectionnez un compte Google et que vous vous connectez,
La ligne de commande montre également que l'authentification a réussi!
$ python quickstart.py
Your browser has been opened to visit:
:
Authentication successful.
Accédez à la documentation PyDrive OAuth made easy.
Avec seulement deux lignes de code, j'ai été authentifié pour utiliser l'API Drive. C'est assez simple, mais vous devez vous connecter depuis votre navigateur chaque fois que vous exécutez ce script. Cela ne convient pas à l'automatisation par script. Par conséquent, nous allons définir PyDrive2 pour * enregistrer les informations utilisées pour l'authentification et les mettre à jour automatiquement ** par la suite. Après vous être connecté une fois, les informations d'identification enregistrées seront mises à jour et utilisées, éliminant ainsi le besoin de se connecter à partir d'un navigateur.
Pour réaliser ce qui précède, écrivez settings.yaml
.
Les paramètres d'enregistrement des informations d'authentification dans un fichier sont les suivants.
settings.yaml
# OAuth 2.0 Spécifiez (renommez) les informations d'identification du client
client_config_file: my_client_secrets.json
#Paramètres pour enregistrer les informations d'identification dans un fichier
save_credentials: True
save_credentials_backend: file
save_credentials_file: saved_credentials.json
#Informations d'authentification(credentials)Configuration de la mise à jour automatique (le navigateur ne démarre pas)
get_refresh_token: True
Placement des fichiers
.
├── my_client_secrets.json
├── quickstart.py
└── settings.yaml
L'exécution de python quickstart.py
sur la ligne de commande vous oblige à vous connecter à partir de votre navigateur la première fois.
Une page d'avertissement s'affiche en fonction de la plage d'opérations utilisant l'API Drive (portée * décrite plus loin). "Afficher les détails" pour se déplacer.
Si vous l'autorisez, votre navigateur affichera "Le flux d'authentification est terminé".
L'authentification à l'aide d'un navigateur n'est que la première fois.
Puisque get_refresh_token
est activé [^ 1], le navigateur ne démarre pas car les informations d'authentification sont automatiquement mises à jour et authentifiées à partir de la deuxième fois [^ 2].
Placement des fichiers
.
├── my_client_secrets.json
├── quickstart.py
├── saved_credentials.json #Créé. Après cela, il sera mis à jour automatiquement
└── settings.yaml
[^ 1]: Chaque fois que je change la valeur de get_refresh_token
, il semble que je doive me connecter avec le navigateur pour la première fois. Il est recommandé de supprimer les informations d'identification enregistrées et de les réexécuter (j'ai activé get_refresh_token
avec saved_credentials.json
dans le passé, mais cela n'a pas été reflété et j'en étais accro. Je me demande si les éléments des données renvoyées sont différents. "
[^ 2]: Il semble que les informations d'authentification ne soient pas mises à jour automatiquement après un certain temps. Lorsque je l'ai touché pour la première fois depuis longtemps, une erreur s'est produite. J'ai supprimé les informations d'identification enregistrées (saved_credentials.json
) et ré-exécutées pour les résoudre.
Il y a un élément appelé ʻoauth_scope dans
settings.yaml[^ 3]. Comme elle n’est pas spécifiée cette fois, la valeur par défaut est «[‘ https://www.googleapis.com/auth/drive ’]». Selon la liste des étendues de l'API Drive (https://developers.google.com/drive/api/v2/about-auth#OAuth2Authorizing), il s'agit d'une étendue
restreinte`.
Les applications qui nécessitent une portée restreinte et qui n'ont pas réussi le processus de vérification de Google seront étiquetées comme "Application non vérifiée" et la page précédente "Cette application n'a pas été vérifiée" sera affichée. [^ 4].
Selon https://support.google.com/cloud/answer/7454865, vous devez ajouter «https: // www.googleapis.com / auth / drive» à «l'écran de consentement OAuth». Il y a. Cependant, le simple fait d'ajouter ce n'était pas suffisant et j'ai dû demander la vérification de Google.
Ce que vous voulez réaliser en travaillant avec Google Drive en Python, c'est, à ce stade, l'automatisation personnelle. Étant donné que nous ne développons pas une application pour une utilisation par un tiers, nous ne procéderons pas au processus d'approbation et continuerons à la développer telle quelle [^ 5].
[^ 4]: depuis https://support.google.com/cloud/answer/7454865. "Une application non vérifiée est une application ou un script d'applications qui demande une portée OAuth sensible ou restreinte, mais qui n'a pas subi le processus de vérification de Google"
[^ 5]: "Applications en développement: si votre application est expérimentale ou est une version de test, vous n'avez pas besoin de passer par la vérification, sauf si vous décidez de la lancer au public." Https://support.google.com/ Depuis cloud / answer / 7454865
LocalWebserverAuth
et CommandLineAuth
J'ai changé LocalWebserverAuth
en CommandLineAuth
pour empêcher le navigateur de se lancer lors de ma première connexion, mais cela n'a pas fonctionné.
À partir de "l'erreur d'approbation" affichée sur le navigateur, l'ID client OAuth est * créé en tant qu'application Web *, il semble donc qu'il ne prend pas en charge CommandLineAuth
.
Par conséquent, je pense qu'il est essentiel de se connecter avec le navigateur pour la première fois [^ 6].
[^ 6]: Dans l'environnement d'exécution où le navigateur ne peut pas être démarré, les informations d'identification enregistrées sont dupliquées et placées (le navigateur ne démarre pas, il peut donc être exécuté sans problème).
Si settings.yaml et client_secrets.json se trouvent dans le même répertoire que quickstart.py, settings.yaml semble être chargé.
J'étais curieux, alors j'ai jeté un coup d'œil à l '[Implémentation] de Google Auth
dans ʻauth.py` (https://github.com/iterative/PyDrive2/blob/d2065b42a4c6cc39fb6666a278b361d2c59ab8c2/pydrive2/auth.py#L142). ..
GoogleAuth ()
signifie que "" settings.yaml "(valeur par défaut) a été spécifié. --Si vous renommez settings.yaml, vous devez le passer à l'argument de
GoogleAuth. --Settings.yaml est chargé lors de l'exécution de
GoogleAuth ()--Le
client_config_filespécifié dans settings.yaml est utilisé --Si non spécifié dans settings.yaml, "client_secrets.json"
est utilisé comme valeur par défaut.Dans cet article
--client_secrets.json est utilisé avant de créer settings.yaml
--Après avoir créé settings.yaml, le client_config_file
spécifié ici sera utilisé.
Il y a.