J'ai suivi les instructions dans https://developers.google.com/bigquery/authorization#service-accounts-appengine pour faire des requêtes depuis le moteur de l'application vers bigquery.Autorisation Google App Engine pour Google BigQuery
Dans l'étape 2, je clique sur Équipe dans la console Google Api et redirige vers App Engine> Administration> Autorisations. J'ajoute le nom du compte de service en tant qu'Email et en tant que développeur de rôle (l'option "peut modifier" n'est pas disponible), puis cliquez sur "Inviter l'utilisateur". Après cela, apparaît un message: "Un e-mail a été envoyé à [email protected] pour vérification." et le statut est En attente. Comment je pourrais confirmer l'e-mail ?, semble qu'il y ait un bug ici ...
Ensuite, j'ai fait un test en utilisant le code suivant:
#!/usr/bin/env python
import httplib2
import webapp2
from google.appengine.api import memcache
from apiclient.discovery import build
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from oauth2client.appengine import AppAssertionCredentials
# BigQuery API Settings
PROJECT_NUMBER = 'XXXXXXXX'
credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/bigquery')
http = credentials.authorize(httplib2.Http(memcache))
service = build("bigquery", "v2", http=http)
class MainHandler(webapp2.RequestHandler):
def get(self):
query = {'query':'SELECT word,count(word) AS count FROM publicdata:samples.shakespeare GROUP BY word;',
'timeoutMs':10000}
jobRunner = service.jobs()
reply = jobRunner.query(projectId=PROJECT_NUMBER,body=query).execute()
self.response.out.write(reply)
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True)
Et la réponse a été (en cours d'exécution de google):
HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/XXXXXXXX/queries?alt=json returned "Access Denied: Job YYYYYYYY:job_e57bdde0144c495dbc864ccbfb82b704: RUN_QUERY_JOB">
Si je test de localhost, la réponse est:
HttpError: <HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/XXXXXXXX/queries?alt=json returned "Invalid Credentials">
Quelqu'un pourrait me aider? :-)
Ce code fonctionne parfaitement pour moi (quand je remplace 'XXX ..' par l'identifiant du projet BigQuery, une chaîne dans mon cas), donc c'est un problème d'authentification. Btw, AppAssertionCredentials ne fonctionnera pas sur localhost. Avez-vous l'API BigQuery sur https://code.google.com/apis/console/#project:ZZZ:services (avec ZZZ comme numéro de projet API)? –
Oui, BigQuery est activé – Christian
Si vous utilisez App Engine, consultez la page https://appengine.google.com/settings?&app_id=s~your-appengine-project-name. Voir un lien sous "Numéro de projet de la console API Google:"? Cliquez dessus, et assurez-vous que le projet a l'API BigQuery. –