Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python

Reportez-vous à l'article ci-dessous, et lorsque j'utilise BigQuery à partir du client des API Google pour Python, j'ai eu une erreur liée à l'authentification OAuth, je vais donc laisser une solution. Il semble que cela se soit produit parce que les permissions du fichier n'ont pas pu lire le fichier cacerts.txt, qui définit les certificats SSL qui peuvent être connectés.

Utilisez BigQuery depuis Python. http://qiita.com/shibacow/items/b8f6445058b374291be5

Using OAuth 2.0 for Server to Server Applications https://developers.google.com/api-client-library/python/auth/service-accounts

environnement

OSX 10.10.3 Python 2.7.6 httplib2 0.9.1 google-api-python-client 1.4.1

un événement

Lors de l'utilisation de la bibliothèque cliente des API Google pour Python, du fichier P12 et de BigQuery, une erreur liée à l'authentification s'est produite et l'API n'a pas pu être accessible.

ssl.SSLError: [Errno 185090050] _ssl.c:343: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

Le fichier exécuté est le suivant.

bq-access.py


import json
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build

SERVICE_ACCOUNT_EMAIL = '**********@developer.gserviceaccount.com'
PROJECT_NUMBER = '**********'
KEYFILE='******************.p12'

with open(KEYFILE) as f:
  private_key = f.read()

credentials = SignedJwtAssertionCredentials(
    SERVICE_ACCOUNT_EMAIL, private_key,
    'https://www.googleapis.com/auth/bigquery')

http = Http()
credentials.authorize(http)

service = build('bigquery', 'v2', http=http)
response = service.datasets().list(projectId='************').execute()

print response

solution de contournement

La page suivante a été très utile.

PYTHON OAUTH2 FAILING WITH X509 ERROR http://bretthutley.com/tag/mac-osx/

On a dit qu'il y avait un problème avec les permissions du fichier cacerts.txt de http2lib, donc quand je l'ai recherché, il n'était certainement lisible que par le groupe appelé wheel.

> cd /Library/Python/2.7/site-packages/httplib2-0.9.1-py2.7.egg/httplib2/
> ls -l cacerts.txt
-rw-r-----  1 root  wheel  134862  7 13 18:36 cacerts.txt

Par conséquent, lorsque j'ai modifié les autorisations de fichier comme suit avec la commande chmod, j'ai pu y accéder sans aucun problème.

> sudo chmod 644 cacerts.txt

Recommended Posts

Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python
Comment gérer l'erreur SSL lors de la connexion à S3 avec Python boto
[Python] Comment gérer l'erreur de lecture pandas read_html
Comment gérer UnicodeDecodeError lors de l'exécution du téléchargement d'image Google
Comment traiter l'erreur "Erreur de type: Aucune signature correspondante trouvée" lors de l'utilisation de pandas fillna
Comment mettre à jour Google Sheets à partir de Python
Comment gérer l'erreur d'installation de python dans pyenv (BUILD FAILED)
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
Comment gérer les erreurs en frappant pip ②
Comment gérer le problème du déplacement du répertoire actuel lorsque Python est exécuté depuis Atom
[AWS] Comment gérer WordPress "Une erreur s'est produite lors du recadrage d'une image."
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Comment récupérer des données d'image de Flickr avec Python
Erreur due à un conflit entre pythons lors de l'utilisation de gurobi
Un moyen facile de gratter avec Python en utilisant Google Colab
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Erreur lors de la lecture avec python
Comment mettre à niveau correctement le logiciel lors de la construction de Linux (CentOS) avec Vagrant ~ En utilisant l'exemple de mise à niveau de Python 2.7 vers Python 3.6 ~
Comment ne pas charger d'images lors de l'utilisation de PhantomJS avec Selenium
Comment résoudre la protection CSRF lors de l'utilisation d'AngularJS avec Django
[AWS] Comment gérer l'erreur "Point de code non valide" dans CloudSearch
Précautions lors de l'utilisation de Python avec AtCoder
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Comment mettre à jour le blog FC2, etc. en utilisant XMLRPC avec Python
Comment installer Python à l'aide d'Anaconda
Python: comment utiliser async avec
Utilisation de Rstan de Python avec PypeR
Comment gérer les données déséquilibrées
Comment démarrer avec Python
Comment gérer l'erreur DistributionNotFound
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
Comment calculer la date avec python
Comment accéder à wikipedia depuis python
Comment gérer l'entrée du terminal dans l'environnement pipenv sans autorisation lors de l'utilisation de pipenv avec vscode
Précautions lors de l'utilisation de phantomjs de python
Accéder aux feuilles de calcul à partir de Python à l'aide d'OAuth 2.0
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
Comment ne pas échapper au japonais en traitant avec JSON en Python
Comment afficher des formules en latex lors de l'utilisation de Sympy (> = 1.4) dans Google Colaboratory
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Comment gérer les erreurs lors de l'installation de whitenoise et du déploiement sur Heroku
Comment éviter la duplication des données lors de la saisie de Python vers SQLite.
[Python] Mémo d'erreur et de solution lors de l'utilisation de venv avec pyenv + anaconda
Impossible de se lier à une erreur d'interface lors de l'utilisation d'Apollo Federation avec gqlgen
Comment traiter l'erreur "Impossible de charger le module" canberra-gtk-module "qui apparaît lorsque vous exécutez OpenCV
De Python à l'utilisation de MeCab (et CaboCha)
Comment utiliser BigQuery en Python
Essayez d'utiliser Python avec Google Cloud Functions
Comment gérer les erreurs de compatibilité d'énumération
Comment faire un test de sac avec python
Comment rechercher Google Drive dans Google Colaboratory
Comment afficher le japonais python avec lolipop