您可以使用Remote API将单个帐户的凭据加载到您的数据存储中,这可以在您的app.yaml
文件中启用:
builtins:
- remote_api: on
通过执行
remote_api_shell.py -s your_app_id.appspot.com
从命令行,您将可以访问可以在应用程序环境中执行的 shell。在执行此操作之前,请确保您已经部署了您的应用程序(下面将详细介绍本地开发),并确保通过安装并运行将其添加到您的 App Engine 项目google-api-python-client
中包含源代码。pip
enable-app-engine-project /path/to/project
进入远程 shell 后(执行上述远程命令后),执行以下操作:
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 shell 执行相同的命令并将其指向您的本地应用程序:
remote_api_shell.py -s localhost:PORT
到达这里后,您可以执行在远程 api shell 中执行的相同代码,并且类似的实例CredentialsModel
将存储在本地开发服务器的数据存储区中。
如上所述,如果您没有包含正确的google-api-python-client
模块,这将失败。
编辑:这曾经建议在以下位置使用交互式控制台:
http://localhost:PORT/_ah/admin/interactive
但是发现这不起作用,因为socket
在App Engine本地开发沙箱中不能正常工作。