Python 如何在GAE cron作业中执行OAuth要求的操作?

Python 如何在GAE cron作业中执行OAuth要求的操作?,python,google-app-engine,cron,google-api,google-api-python-client,Python,Google App Engine,Cron,Google Api,Google Api Python Client,这篇文章是一篇后续文章。正如bossylobster在本文中建议的那样,我确实尝试在脚本中硬编码用户id,但cron任务总是失败: 我可以在日志中看到它被触发 2013-05-31 14:20:00.879 /update 302 5ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 0.1.0.1 - - [31/May/2013:11:20:00 -0700] "GET /update HTTP/1.1" 302 385

这篇文章是一篇后续文章。正如bossylobster在本文中建议的那样,我确实尝试在脚本中硬编码
用户id
,但cron任务总是失败:

  • 我可以在日志中看到它被触发

    2013-05-31 14:20:00.879 /update 302 5ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
    0.1.0.1 - - [31/May/2013:11:20:00 -0700] "GET /update HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=6 cpu_ms=0 cpm_usd=0.000043 queue_name=__cron task_name=... app_engine_release=1.8.0 instance=...
    
  • 。。。但是,它总是失败(在AppEngine的Cron作业部分显示为红色的“Failed”),并且它应该运行的任务队列永远不会在任务队列部分弹出
我不明白的是,如果我手动打开
/update
,就会出现下面的登录提示。克朗怎么能绕过这个?我如何调试正在发生的事情

谢谢你的帮助

编辑@dlebech-answer上的内容/后续操作:在
app.yaml
中的相关
url
中添加
login:admin
行后,问题仍然存在。本地(以管理员身份登录并访问浏览器中处理程序的URL,如所述)一切正常,但一旦部署,我的应用程序将永远无法通过OAuth2装饰程序:

  • 通过一些调试
    打印
    语句

    import webapp2
    ...
    
    YOUTUBE_RW_SCOPE = "https://www.googleapis.com/auth/youtube"
    YOUTUBE_API_SERVICE_NAME = "youtube"
    YOUTUBE_API_VERSION = "v3"
    print "Building youtube object"
    print "Built youtube object"
    youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION)
    print "Building decorator object"
    decorator = OAuth2DecoratorFromClientSecrets(CLIENT_SECRETS, YOUTUBE_RW_SCOPE)
    print "Built decorator object"
    ...
    
    class FetchHandlerPage(webapp2.RequestHandler):
        print "Entering FetchHandlerPage"
    
        @decorator.oauth_required
        def get(self):
            print "Entering FetchHandlerPage:get"
            gae_user_id = USER_ID
            query_string = urlencode({'user_id': gae_user_id})
            taskqueue.add(url='/fetchworker?' + query_string, method='GET')
    
  • 。。。以下是我在GAE日志中部署后看到的内容(日志在最后一行停止,接下来什么也不会发生):

克朗怎么能绕过这个

确保cron url配置为
login:admin
,而不是
login:required
。Cron作业自动“通过登录提示”。有关更多信息,请参阅

我如何调试正在发生的事情


由于cron作业是由对特定url的
GET
请求启动的,因此您应该能够通过对该url发出
GET
请求来调试该作业,并查看开发服务器出现的错误或查看
GET
请求的日志中的内容。

您好,感谢您将我指向
login:admin
,我不明白它有这种效果。不幸的是,问题依然存在(或者可能是另一个问题?我不确定:-/)。我在我原来的帖子中添加了一个关于@dlebech答案部分的编辑/跟进,你觉得怎么样?为什么你还需要oauth_要求的装饰师?@Ronanjuchet。是的,这是错误的。如果没有用户,那么decorator就不是您想要的。您不需要它,因为您的用户ID来自
/update?user\u ID=SOME\u VALUE
。您可能需要oauth2才能登录YouTube。但您不再使用oauth2通过cron作业或任务队列进入FetchHandlerPage,这些请求通过Google的用户API进行身份验证。@Ronanjuchet正如dragonx所暗示的,它可能对您有效的原因是,您在访问url时已经登录到您的Google帐户。了解oauth_所需的装饰器的功能会很有帮助。
2013-05-31 16:12:02.765 /fetch 302 1746ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
0.1.0.1 - - [31/May/2013:13:12:02 -0700] "GET /fetch HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=1747 cpu_ms=844 cpm_usd=0.000070 queue_name=__cron task_name=... loading_request=1 app_engine_release=1.8.0 instance=...
I 2013-05-31 16:12:02.444 URL being requested: https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest?userIp=0.1.0.1
E 2013-05-31 16:12:02.764 Building youtube object
E 2013-05-31 16:12:02.764 Built youtube object
E 2013-05-31 16:12:02.764 Building decorator object
E 2013-05-31 16:12:02.764 Built decorator object
E 2013-05-31 16:12:02.764 End static variables
E 2013-05-31 16:12:02.764 Entering FetchHandlerPage
I 2013-05-31 16:12:02.765 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ