2016-08-06 26 views
1

Ich bin ziemlich neu in Flask, GAE und die Verwendung von API. Ich versuche, eine einfache Web-App zu erstellen, die eine Verbindung zu einer der API von Google herstellen kann.Flask auf GAE - Connect to Google API - Kann JSON-Datei nicht verwenden

Meine Ordnerstruktur sieht wie folgt aus (ich habe es zu den wichtigsten Dateien gehalten):
app-webemotions:
-app.yaml
-main.py
-lib
--sentimentanalysis. py
-static
--credential.json

Alles funktioniert, aber die jSON-Datei für die Anmeldeinformationen bereitstellt. Mein Verständnis ist, dass es ein paar Möglichkeiten, es zu tun:
1) die GOOGLE_APPLICATION_CREDENTIALS Umgebungsvariable auf das Ziel meiner Datei in app.yaml
2 Einrichten) Anfordern die Datei durch meinen Skript (sentimentanalysis.py)

Leider konnte ich keine dieser Arbeiten machen.

Option 1):
In app.yaml habe ich die Zeile:

env_variables: 
    GOOGLE_APPLICATION_CREDENTIALS: static/key/credentials.json 

ich dann meinen Code durch dev_appserver.py laufen. und erhalten den folgenden Fehler:

ApplicationDefaultCredentialsError: File static/key/credentials.json (pointed by GOOGLE_APPLICATION_CREDENTIALS environment variable) does not exist! 

Option 2): ich eine Zeile Code in meinem Skript sentimentanalysis.py haben:

scope = ['https://www.googleapis.com/auth/cloud-platform'] 
    credentials = ServiceAccountCredentials.from_json_keyfile_name('/static/credentials.json', scope) 

Und beim Ausführen des Codes ich die folgende Fehlermeldung erhalten :

raise IOError(errno.EACCES, 'file not accessible', filename) 
IOError: [Errno 13] file not accessible: '/static/credentials.json' 
INFO  2016-08-06 04:10:51,678 module.py:788] default: "POST /Sentiment-analysis HTTP/1.1" 500 - 

Frage:
So sieht es aus, unabhängig von der Methode, die ich benutze, bin ich nicht in der Lage, den richtigen Pfad zur JSON-Datei

bereitzustellen Meine Frage ist zu wissen, ob eine der oben genannten Optionen die richtige Option ist und ob Ja, was mache ich falsch? Wenn sie nicht die richtigen Optionen sind, was würden Sie empfehlen?

Apologies dies, wenn schon gefragt worden, ich habe versucht nun eine Antwort für ein paar Stunden zu finden und nicht in der Lage gewesen, es zu knacken ...

Thank you!

+1

-Code kann nicht statische Ressourcen zugreifen, wenn Sie es ausdrücklich erlauben, eine Lese der docs. –

+0

Danke Tim.Nun, ich hatte die Dokumente gelesen, sonst würde ich nicht posten :) Ich bin mir nicht sicher, was Sie unter "statische Ressourcen" verstehen. Ich habe einen statischen Ordner mit statischen Ressourcen wie CSS- oder JS-Dateien. Auf all diese kann meine App zugreifen, nur die JSON-Datei kann nicht. Können Sie bitte klarstellen? Vielen Dank. – Sylvain

+0

Wenn Sie sagen, dass Ihre App auf die statischen Ressourcen zugreifen kann, haben Sie wirklich Flaschcode, der diese Dateien explizit öffnet, oder meinen Sie, dass ein Webbrowser diese Dateien laden kann. Sie sind nicht klar und es gibt einen großen Unterschied - daher meine ursprüngliche Kommentar. Die spezifische Dokumentation, auf die ich mich beziehe, ist https://cloud.google.com/appengine/docs/python/config/appref#handlers_element und die Direktive "application_readable". Sie sollten wahrscheinlich Ihre app.yaml –

Antwort

0

Wenn Sie mit Google App Engine arbeiten, verfügt Ihr Code automatisch über die erforderlichen Anmeldeinformationen. Legen Sie GOOGLE_APPLICATION_CREDENTIALS nicht fest und rufen Sie nicht .from_json_keyfile_name auf. Stattdessen ruft:

credentials = GoogleCredentials.get_application_default() 

Wie hier gezeigt: https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/bigquery/api/getting_started.py

+0

Hallo Jeffrey. Danke auch für Ihre Antwort! Ich habe meinen API Developer Key innerhalb des Codes verwendet, der funktioniert, wird aber Ihren Vorschlag ausprobieren. Ich war unter der Annahme, dass "Anmeldeinformationen" in dieser Situation Ihre Anmeldeinformationen in GOOGLE_APPLICATION_CREDENTIALS suchen würden, weshalb ich verzweifelt versuchte, die Datei weiterzugeben! Aber es macht jetzt Sinn, also vielen Dank. – Sylvain