这个问题是老了,但它仍然适用,所以我要尝试根据我最近的经验更好的答案。
它可以访问拉任务队列的AppEngine之外,但作为提问者说,有没有很好的例子,所以这里是深入指导更。在我的情况下,我有一个自定义的python脚本,需要轮询队列以运行新作业。
走这条路之前,您还可以使用您自己的安全,使一个简单的Web包装到任务队列调用AppEngine上的选项。在处理完这件事之后,我很想去那条路,但是因为这是行得通的,所以我现在使用它。
设置你的机器
设定您的帐户
使用Google Cloud Console,创建一个注册的应用程序(如果您还没有注册的应用程序)。点击你的AppEngine项目 - > API和auth - >注册应用程序。您可以输入名称和应用程序类型,然后接受默认值。一旦创建,请注意稍后的客户端ID和客户端密钥。
同时更新您的同意画面(API和身份验证 - >同意画面)。请注意,您将只需要此同意屏幕第一次设置您的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)
让你TASKQUEUE呼叫
确保您已在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 Reference
- 注意在删除调用的项目名称前面的前缀的〜“。如果我添加了这个,它才会起作用,我相信这是一个bug。
更新2014年7月1日
所以有实际上是让服务器到服务器的调用更简单的方法。这种方式并不要求您使用“流量”(登录到谷歌)来获取访问密钥。
设置你的机器
设定您的帐户
- 使用Google Cloud Console,创建一个注册的应用程序(如果你还没有一个。点击您的AppEngine项目 - > API的&验证 - >证书。点击创建新客户端ID,指定服务帐户,然后点击创建客户端ID。 下载框将弹出以下载您的私钥,将其保存到您的代码目录(或保存为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')
@Parand如果有示例代码具体的事情,你感到困惑或需要帮助,你应该特别询问有关他们的话。 –
想法:示例代码使用各种谷歌约定(如gflags),这些约定会增加学习曲线和行李数量。它不是作为可重用的库(例如。证书在客户端被硬编码)。它是大量代码和样本的一部分,因此难以找到并导航。例如,如果有一个关于如何使用python-oauth2进行身份验证的简单明确的解释,那将会很好。什么是OAuth端点,范围是什么意思,等等。我猜所有的信息都在那里,但尽管付出了很多努力,我还没有把它全部集中起来。 – Parand
@Parand Fair够了。我会将它添加到我的博客帖子队列中。 :) –