这个问题很老,但它仍然适用,所以我将根据我最近的经验尝试一个更好的答案。
可以在 appengine 之外访问拉取任务队列,但正如提问者所说,没有很好的例子,所以这里有一个更深入的指南。就我而言,我有一个自定义 python 脚本,需要轮询队列以运行新作业。
在采取这条路线之前,您还可以选择滚动自己的安全性并为 appengine 任务队列调用制作一个简单的 Web 包装器。处理完这个问题后,我很想走那条路,但由于这行得通,我现在正在使用它。
设置您的机器
设置您的帐户
使用Google Cloud Console,创建一个注册应用程序(如果您还没有。单击您的 AppEngine 项目 -> API 和 auth -> 注册应用程序。您可以输入名称和应用程序类型,然后接受默认值。一旦它已创建,请记下 Client Id 和 Client Secret 以备后用。
同时更新您的同意屏幕(API 和 auth -> 同意屏幕)。请注意,首次设置您的 oauth 凭据时,您只需要此同意屏幕。您需要输入电子邮件地址和产品名称(我也输入了主页网址)。
生成 OAuth 凭据
您只需要生成一次凭证文件,然后它将用于您的 python 脚本中的未来调用。运行这个打开浏览器并生成凭证文件的 python 代码。此代码的参考是here。
from oauth2client.tools import run
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage
import gflags
FLAGS = gflags.FLAGS
storage = Storage('credentials.json')
flow = OAuth2WebServerFlow(client_id='<your_client_id>',
client_secret='<your_client_secret>',
scope='https://www.googleapis.com/auth/taskqueue',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')
credentials = run(flow, storage )
进行任务队列调用
确保您已在 AppEngine queue.yaml中添加了一个拉取队列,其中包含您在上述 oauth 步骤中使用的电子邮件地址。
from oauth2client.tools import run
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage
from apiclient.discovery import build
import httplib2
storage = Storage('credentials.json')
credentials = storage.get()
http = httplib2.Http()
http = credentials.authorize(http)
task_api = build('taskqueue', 'v1beta2')
tasks = task_api.tasks().lease(project='<your appengine project>',taskqueue='<pull queue name>', numTasks=1, leaseSecs=600).execute(http=http)
task = tasks['items'][0]
payload = task['payloadBase64']
payload = base64.b64decode(payload)
#then do your work and delete the task when done
task_api.tasks().delete(project='s~<your appengine project>',taskqueue='<pull queue name>', task=task['id']).execute(http=http)
任务队列API 参考
- 请注意删除调用中项目名称前面的前缀“s~”。只有当我添加它并且我相信它是一个错误时它才会起作用。
2014 年 7 月 1 日更新
所以实际上有一种更简单的方法来进行服务器到服务器的调用。这种方式不需要您使用“流程”(登录到谷歌)来获取访问密钥。
设置您的机器
设置您的帐户
- 使用Google Cloud Console创建一个已注册的应用程序(如果您还没有的话。点击您的 AppEngine 项目 -> API's & Auth -> 凭据。点击创建新客户端 ID,指定服务帐户,然后点击创建客户端 ID。A会弹出下载框下载你的私钥,保存到你的代码目录(或任何地方,我保存为client_key.p12)。在Web界面上,记下客户端ID和电子邮件。
从上面替换凭据代码
from oauth2client.client import SignedJwtAssertionCredentials
email = '<***>.gserviceaccount.com'
f = file('client_key.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(email,
key,
scope='https://www.googleapis.com/auth/taskqueue')