相关疑难解决方法(0)

如何在GAE/Python上进行'access_type = offline'/仅服务器OAuth2操作?

这篇文章是如何在GAE cron工作中执行OAuth要求操作的后续内容,我意识到我错误地使用了@oauth_required装饰器OAuth2DecoratorFromClientSecrets.

正如OAuth 2.0解释的演示文稿所述,Oauth 2.0解决了以下问题:

  • 建立服务 ......
  • ...由用户访问...
  • ... 并从第三方访问用户的数据.

这就是@oauth_required摘要,它做得很好(目前我的应用程序"有效":如果我触发刷新页面,我会被要求授权访问我的YouTube数据到我的应用程序,其余部分如下).但那不是我想要的!我的应用程序做了一些更简单的事情,即每天使用我的凭据创建一个youtube播放列表,无需任何用户输入.因此,为了与上述3层联想进行比较,我希望:

  • 一项服务
  • ...由用户访问
  • ... 但仅访问"服务器拥有的"YouTube播放列表数据.我不想访问用户的YouTube数据,我只想修改播放列表I(即我/服务器持久保存的用户ID).

但我仍然需要帮助才能做到这一点; 这是我目前的状态:

  1. 经过几次搜索后,我了解到我想要做的就是称为离线访问(强调我的,这几乎就是我的用例):
    "在某些情况下,当用户不在时,您的应用程序可能需要访问Google API.这方面的例子包括备份服务和应用程序,这些应用程序在周一早上8点正好发布博客帖子.这种访问方式称为脱机,Web服务器应用程序可以请求用户进行脱机访问.正常和默认的访问方式称为在线. " ...
    →所以我应该继续做我现在正在做的事情,继续请求访问我的YouTube帐户,但是使用type_access=offline标志来获取令牌,并持续/使用它来进行后续请求.

  2. 脱机访问使用刷新令牌部分使总感觉,但停留在一般的HTTP水平.作为一个新手,我不知道如何将这些原则集成到我的Python代码中,我没有找到任何示例Python代码....
    →任何人都可以帮我一个Python示例说明如何以及在何处使用这面旗帜?

  3. ...特别是在学习之后oauth2client.appengine.OAuth2Decorator.oauth_required,我仍然不确定我是否可以将它弯曲到我的情况,或者我是否应该做自己的事情.
    →你怎么看?

谢谢你的时间; 如果需要我也会在irc://irc.freenode.net/#appengine上闲逛ronj.

python google-app-engine google-api oauth-2.0 google-api-python-client

4
推荐指数
1
解决办法
4014
查看次数

如何在GAE任务队列中执行OAuth操作?

我有一个简单的Google App Engine应用程序,其中包含一个/update更新YouTube播放列表的页面.它看起来像这样:

class UpdatePage(webapp2.RequestHandler):

    @decorator.oauth_required
    def get(self):
        update_result = self.update_playlist()
        ...

routes = [('/update', UpdatePage),
          (decorator.callback_path, decorator.callback_handler())]
app = webapp2.WSGIApplication(routes, debug=True)
Run Code Online (Sandbox Code Playgroud)

它按预期update_playlist()工作,该方法完成其工作,但事实证明,在某些情况下,它可以运行很长一段时间,导致一个DeadlineExceededError.所以在阅读了可用的选项之后,我认为Task Queue API是要走的路(对吗?),我正在尝试使用它,遵循Python中使用推送队列指南.

→简而言之,我分成UpdatePageUpdatePageHandler+ UpdatePageWorker:

class UpdateHandlerPage(webapp2.RequestHandler):

    @decorator.oauth_required
    def get(self):
        taskqueue.add(url='/updateworker')

class UpdateWorkerPage(webapp2.RequestHandler):

    def post(self):
        update_result = self.update_playlist()
        ...

routes = [('/update', UpdateHandlerPage),
          ('/updateworker', UpdateWorkerPage),
          (decorator.callback_path, decorator.callback_handler())]
app = webapp2.WSGIApplication(routes, debug=True)
Run Code Online (Sandbox Code Playgroud)

不幸的是,在进行拆分后,我的OAuth2装饰器似乎不再起作用了:

INFO     2013-05-30 17:08:53,971 discovery.py:709] URL being requested: https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2Cstatus
WARNING  2013-05-30 …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-api task-queue google-api-python-client

2
推荐指数
1
解决办法
1425
查看次数