[GO] Accéder aux feuilles de calcul à partir de Python à l'aide d'OAuth 2.0

Contexte

En ce qui concerne l'utilisation de l'API Google, l'accès avec l'identifiant et le mot de passe Google a été interdit en mai 2015. Actuellement, vous devez accéder à l'aide d'OAuth 2.0. En ce qui concerne l'authentification de Python vers OAuth 2.0, il y avait étonnamment peu d'informations et cela a pris beaucoup de temps, je vais donc laisser la méthode. Cet article concerne les feuilles de calcul, mais je soupçonne que d'autres API qui utilisent la bibliothèque gdata peuvent également être authentifiées (non confirmées).

environnement

python 2.7.5 MacOS X 10.9.5

Méthode d'authentification avec OAuth 2.0

Il y a certaines choses que vous devez faire pour vous authentifier avec OAuth 2.0. Laissez les étapes dans l'ordre.

1. Activez l'API Drive

Les feuilles de calcul seront gérées à l'aide de l'API Drive de l'API Google Apps. Par conséquent, activez l'API requise par les opérations suivantes.

Accédez à la Developers Console (https://console.developers.google.com/project) et sélectionnez votre projet. Si le projet n'existe pas, créez-en un avec un nom approprié.

プロジェクト.png

Sélectionnez "API" dans le menu de gauche.

概要_-_neoimagewall.png

"Drive API" est sur la droite.

API_ライブラリ_-_neoimagewall.png

"Activer l'API"

Drive_API_-_API_Project.png

Activée.

Drive_API_-_API_Project.png

2. Créez un ID client pour OAuth

Ensuite, vous devez créer un ID client et une clé à utiliser avec OAuth. Je publierai la méthode.

De même, sur l'écran qui ouvre le projet dans Developers Console, sélectionnez "Credentials" dans le menu de gauche.

Drive_API_-_API_Project.png

"Créer un nouvel ID client"

認証情報_-_kumaproduct.png

Sélectionnez "Compte de service" et "Créer un ID client"

認証情報_-_kumaproduct.png

Le fichier json sera téléchargé localement et une boîte de dialogue de fin sera affichée. (Ce fichier json n'est pas utilisé dans cette procédure)

認証情報_-_kumaproduct.png

Confirmez que l'ID client a été émis. Sélectionnez "Générer une nouvelle clé P12" et téléchargez la clé privée (.p12).

認証情報_-_kumaproduct.png

La clé privée a été stockée localement. (La clé privée enregistrée est "MyProject.p12")

認証情報_-_kumaproduct.png

3. Paramètres de partage de feuille de calcul

Pour l'ID client créé dans la procédure ci-dessus, il est nécessaire de définir le partage du côté de la feuille de calcul.

Tout d'abord, notez l'adresse e-mail de l'ID client émis.

9184c188-2ade-9e97-7d1e-fb1ed6a2eaf0.png

Ouvrez la feuille de calcul à laquelle vous souhaitez accéder avec l'API et sélectionnez "Partager".

無題スプレッドシート_-_Google_スプレッドシート.png

Saisissez l'adresse e-mail émise et cliquez sur «Envoyer».

無題スプレッドシート_-_Google_スプレッドシート.png

Ceci termine les paramètres de partage.

4. Code source

Maintenant, c'est enfin prêt. Accès avec du code python.

Tout d'abord, installez les bibliothèques requises.

python


$ pip install gdata oauth2client

La partie authentification est la source suivante.

oauth2.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from oauth2client.client import SignedJwtAssertionCredentials
import gdata.spreadsheets.client

#Informations requises pour l'authentification
client_email = "[email protected]" #Adresse e-mail émise à l'étape 2
with open("MyProject.p12") as f: private_key = f.read() #Clé privée émise à l'étape 2

#Créer des identifiants
scope = ["https://spreadsheets.google.com/feeds"]
credentials = SignedJwtAssertionCredentials(client_email, private_key,
    scope=scope)

#Préparation du client pour la feuille de calcul
client = gdata.spreadsheets.client.SpreadsheetsClient()

# OAuth2.Paramètre d'authentification à 0
auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials)
auth_token.authorize(client)

# ----Vous pouvez maintenant utiliser la bibliothèque pour accéder à la feuille de calcul---- #

#Obtenir la feuille de calcul
sheets = client.get_worksheets("1TAVVsyhCM_nprkpa0-LGWBheaXt_ipX84fIIhJw2fa0") #Spécifiez l'ID de la feuille de calcul
for sheet in sheets.entry:
    print sheet.get_worksheet_id(), sheet.title

Si la dernière instruction d'impression est sortie comme ceci, c'est la preuve que vous pouvez accéder normalement.

python


od6 <ns0:title xmlns:ns0="http://www.w3.org/2005/Atom">&#12471;&#12540;&#12488;1</ns0:title>

Erreur rencontrée

PKCS12 format is not supported by the PyCrypto library.

contenu de l'erreur

PKCS12 format is not supported by the PyCrypto library. Try converting to a "PEM" (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem) or using PyOpenSSL if native code is an option.

L'erreur qui s'est produite dans la partie suivante.

with open("MyProject.p12") as f

Correspondance

Vous pouvez modifier le format de la clé privée tel qu'il apparaît dans l'instruction d'erreur.

python


$ openssl pkcs12 -in MyProject.p12 -nodes -nocerts > MyProject.pem
Enter Import Password: #Entrez "pas un secret"

Modifiez ensuite le fichier pour lire le code.

with open("MyProject.pem") as f

référence

GoogleAppEngine utilisant l'API Google Drive avec Google App Engine pour PHP-Qiita http://qiita.com/hikoalpha/items/04ef84cd5f035ff64f23

python - Using Spreadsheet API OAuth2 with Certificate Authentication - Stack Overflow http://stackoverflow.com/questions/20209178/using-spreadsheet-api-oauth2-with-certificate-authentication/20211057#20211057

Using OAuth 2.0 for Server to Server Applications | Google Identity Platform | Google Developers https://developers.google.com/identity/protocols/OAuth2ServiceAccount?hl=ja

OAuth 2.0   |   API Client Library for Python   |   Google Developers https://developers.google.com/api-client-library/python/guide/aaa_oauth?hl=ja

google app engine - SignedJwtAssertionCredentials on AppEngine doesn't recognize PEM key - Stack Overflow http://stackoverflow.com/questions/17993604/signedjwtassertioncredentials-on-appengine-doesnt-recognize-pem-key

gdata: gdata.spreadsheets.client Namespace Reference - doxygen documentation | Fossies Dox http://fossies.org/dox/gdata-2.0.18/namespacegdata_1_1spreadsheets_1_1client.html

Recommended Posts

Accéder aux feuilles de calcul à partir de Python à l'aide d'OAuth 2.0
Accéder à bitcoind depuis python
Aplatir à l'aide du rendement Python de
Accéder à Oracle DB depuis Python
Manipulez les feuilles de calcul localement à l'aide de Python
Utilisation de Rstan de Python avec PypeR
Remarques sur l'utilisation de MeCab depuis Python
Utiliser Cloud Storage depuis Python3 (Introduction)
Comment accéder à wikipedia depuis python
Exécutez Ansible à partir de Python à l'aide de l'API
Précautions lors de l'utilisation de phantomjs de python
Accéder aux nœuds de shader de Blender depuis Python
Essayez d'utiliser Amazon DynamoDB à partir de Python
De Python à l'utilisation de MeCab (et CaboCha)
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Comment accéder à RDS depuis Lambda (python)
Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python
sql à sql
MeCab de Python
Scraping à l'aide de Python
Créer un fichier wav à partir du shader GLSL en utilisant python3
Exécutez des fichiers Python à partir de HTML en utilisant Django
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Exécutez des scripts Python à partir d'Excel (en utilisant xlwings)
Utilisez Thingsspeak de Python
Manipuler Redmine à l'aide de Python Redmine
Exploitez Filemaker depuis Python
Utiliser fluentd de python
Séquence de Fibonacci utilisant Python
Changements de Python 3.0 à Python 3.5
Python depuis ou import
Notification PUSH de Python vers Android à l'aide de l'API de Google
Utilisez MySQL depuis Python
Installer Python à partir de la source
Exécuter des commandes depuis Python
Nettoyage des données à l'aide de Python
Méthodes MessagePack-Call Python (ou Python vers Ruby) à partir de Ruby à l'aide de RPC
Faites fonctionner le neutron de Python!
Utilisation des packages Python #external
Utiliser MySQL depuis Python
Calcul de l'âge à l'aide de python
Faire fonctionner LXC depuis Python
Manipuler riak depuis python
Copier les fichiers S3 de Python vers GCS à l'aide de GSUtil
Utilisez BigQuery depuis Python.
Rechercher sur Twitter avec Python
Analyse des composants principaux à l'aide de python de nim avec nimpy
Étude de Python Hour8: Utilisation de packages
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Identification de nom à l'aide de python
Exécuter la commande depuis Python
Notes sur l'utilisation de sous-processus Python
Essayez d'utiliser Tweepy [Python2.7]
Obtenir des données de la base de données via ODBC avec Python (Access)
Requête de Python vers Amazon Athena (à l'aide du profil nommé)
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
[Python] Lire depuis Stdin
Accès ODBC à SQL Server depuis Linux avec Python
Utilisez mecab-ipadic-neologd de Python