リモートAPIを使用して、単一のアカウントのクレデンシャルをデータストアにロードできます。リモートAPIapp.yaml
は、ファイルで有効にできます。
builtins:
- remote_api: on
実行することにより
remote_api_shell.py -s your_app_id.appspot.com
コマンドラインから、アプリケーションの環境で実行できるシェルにアクセスできます。これを行う前に、アプリケーションがデプロイされていることを確認し(ローカル開発については以下で詳しく説明します)、アプリケーションをインストールして実行し、AppEngineプロジェクトに追加することでソースgoogle-api-python-client
が含まれていることを確認します。pip
enable-app-engine-project /path/to/project
リモートシェルに入ったら(上記のリモートコマンドを実行した後)、次の手順を実行します。
from oauth2client.appengine import CredentialsModel
from oauth2client.appengine import StorageByKeyName
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
KEY_NAME = 'your_choice_here'
CREDENTIALS_PROPERTY_NAME = 'credentials'
SCOPE = 'https://www.googleapis.com/auth/drive'
storage = StorageByKeyName(CredentialsModel, KEY_NAME, CREDENTIALS_PROPERTY_NAME)
flow = OAuth2WebServerFlow(
client_id=YOUR_CLIENT_ID,
client_secret=YOUR_CLIENT_SECRET,
scope=SCOPE)
run(flow, storage)
注:google-api-python-client
コードを使用してアプリケーションをデプロイしていない場合、アプリケーションはローカルマシンで行ったのと同じインポートを行う方法を認識しないため、失敗しますfrom oauth2client.appengine import CredentialsModel
。
がrun
呼び出されると、Webブラウザーが開き、指定したクライアントのOAuthアクセスを受け入れるように求められます。正常に完了するCLIENT_ID
と、デプロイされたアプリケーションのデータストアにCLIENT_SECRET
インスタンスが保存され、あなたが提供した。CredentialsModel
your_app_id.appspot.com
KEY_NAME
これを行った後、アプリケーション内のすべての呼び出し元(cronジョブを含む)は、実行することでこれらの資格情報にアクセスできます。
storage = StorageByKeyName(CredentialsModel, KEY_NAME, CREDENTIALS_PROPERTY_NAME)
credentials = storage.get()
ローカル開発:
これをローカルでテストする場合は、dev_appserver.py --port = PORT / path / to/projectを介してアプリケーションをローカルで実行できます。
また、リモートAPIシェルを使用して同じコマンドを実行し、ローカルアプリケーションにポイントすることができます。
remote_api_shell.py -s localhost:PORT
ここで、リモートAPIシェルで実行したのと同じコードを実行できます。同様に、のインスタンスがCredentialsModel
ローカル開発サーバーのデータストアに保存されます。
上記のように、正しいgoogle-api-python-client
モジュールが含まれていない場合、これは失敗します。
編集:これは、次の場所でインタラクティブコンソールの使用を推奨するために使用されていました:
http://localhost:PORT/_ah/admin/interactive
socket
ただし、App Engineローカル開発サンドボックスでは正しく機能しないため、これは機能しないことが判明しました。