gpt4 book ai didi

python - GAE 任务队列 : Sample code for accessing pull queue from outside App Engine?

转载 作者:行者123 更新时间:2023-11-28 22:04:34 24 4
gpt4 key购买 nike

我正在尝试使用 GAE TaskQueue 的 REST API 将任务从队列中提取到外部服务器(不在 GAE 上的服务器)。

  • 有图书馆可以帮我做这件事吗?

  • API 很简单,所以我只需要弄清楚身份验证即可。我使用 --dump_request 检查了 gtaskqueue_samplegoogle-api-python-client 发送的请求,并找到了 authorization: OAuth XXX header 。将该 token 添加到我自己请求的工作中,但该 token 似乎会定期(可能每天)过期,而且我无法弄清楚如何重新生成它。就此而言,gtaskqueue_sample 本身不再有效(对 https://accounts.google.com/o/oauth2/token 的调用失败并显示 No JSON object could be decoded ).

如何进行身份验证?这是一个服务器应用程序,因此理想情况下我可以生成一个我可以从那时起使用的 token 。

最佳答案

这个问题很老,但仍然适用,所以我将根据我最近的经验尝试一个更好的答案。

可以在 appengine 之外访问拉任务队列,但正如提问者所说,没有很好的例子,所以这里有一个更深入的指南。在我的例子中,我有一个自定义 python 脚本,需要轮询队列以运行新作业。

在采用此路线之前,您还可以选择滚动自己的安全性并为应用引擎任务队列调用制作一个简单的 Web 包装器。在处理完这个问题后,我很想走那条路,但由于这是有效的,所以我现在就使用它。

设置您的机器

设置您的帐户

  • 使用 Google Cloud Console ,创建一个已注册的应用程序(如果您还没有。单击您的 AppEngine 项目 -> API 和身份验证 -> 已注册的应用程序。您可以输入名称和应用程序类型,然后接受默认值。创建后,请注意Client Id 和 Client Secret 以备后用。

  • 同时更新您的同意屏幕(API 和授权 -> 同意屏幕)。请注意,您只需要此同意屏幕即可首次设置您的 oauth 凭据。您将需要输入电子邮件地址和产品名称(我还输入了主页网址)。

生成 OAuth 凭证

  • 您只需生成一次凭据文件,然后它将用于您的 python 脚本中的 future 调用。运行此 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 Reference

  • 请注意删除调用中项目名称前面的前缀“s~”。只有当我添加这个并且我相信它是一个 bug 时它才会起作用.

2014 年 7 月 1 日更新

所以实际上有一种更简单的方法来进行服务器到服务器的调用。这种方式不需要您使用“流程”(登录到 google)来获取访问 key 。

设置您的机器

设置您的帐户

  • 使用Google Cloud Console ,创建一个已注册的应用程序(如果您还没有注册应用程序。单击您的 AppEngine 项目 -> API 和身份验证 -> 凭据。单击创建新客户端 ID,指定服务帐户,然后单击创建客户端 ID。会弹出一个下载框来下载你的私钥,保存到你的代码目录(或者其他地方,我保存为client_key.p12)。在网络界面上,记下客户 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')

关于python - GAE 任务队列 : Sample code for accessing pull queue from outside App Engine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6965431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com