我真的需要一些帮助,我已经在这个近2周。谷歌应用程序引擎和组配置
我想要做的是在GAE(Google App Engine)内部使用Google的配置API,使用oAuth2。我知道有一些使用oAuth1来实现这个功能的例子。但我的理解是,oAuth1现在已被弃用,我们必须使用oAuth2,如果我错了,请纠正我。
我已经冲刷互联网,我能找到工作从唯一的例子是这样的:
http://gdata-samples.googlecode.com/svn-history/r232/trunk/gdata/youtube-oauth2-app-engine/main.py
其他的例子我发现使用OAuth 1,或者他们没有设计使用与App Engine一起使用。
我从上面的例子中所采取的代码,并试图修改它与网上论坛配置API的工作,这里是我的代码:
import os
from gdata.alt import appengine
from gdata.service import RequestError
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp import util
from oauth2client.appengine import OAuth2Decorator
import gdata.auth
import gdata.apps.groups.client
import gdata.client
import httplib2
API_VERSION = '2.0'
BASE_URL = '/a/feeds/group/%s' % API_VERSION
# HACK to use the Python GData client library with OAuth 2 tokens.
# We use the methods that deal with AuthSub tokens.
gdata.auth.AUTHSUB_AUTH_LABEL = "OAuth "
class MainHandler(webapp.RequestHandler):
# The client_id and client_secret are copied from the API Access tab on
# the Google APIs Console <http://code.google.com/apis/console>
oauth2_decorator = OAuth2Decorator(
client_id="myClientID.apps.googleusercontent.com",
client_secret="myClientSecret",
scope="https://apps-apis.google.com/a/feeds/groups/")
# This decorator ensures that whenever this page is served, we have a valid
# OAuth 2 token for the user.
@oauth2_decorator.oauth_required
def handle_exception(self, exception, debug_mode):
"""Handle OAuth 2 token expirations by forcing a refresh.
For newer Google APIs, refreshes are handled automatically by the client
library, but for GData APIs, we need to explicitly force this behavior.
"""
if (isinstance(exception, RequestError) and
exception.args[0]["status"] == 401):
body = exception.args[0]["body"]
if "Token invalid - Invalid AuthSub token." in body:
self.oauth2_decorator.credentials._refresh(httplib2.Http().request)
self.redirect(self.request.url)
return
webapp.RequestHandler.handle_exception(self, exception, debug_mode)
# This decorator ensures that whenever this page is served, we have a valid
# OAuth 2 token for the user.
@oauth2_decorator.oauth_required
def get(self):
self.domain='testdomain123456.mygbiz.com'
self.baseuri = '%s/%s' % (BASE_URL, 'testdomain123456.mygbiz.com')
self.token = self.oauth2_decorator.credentials.access_token
self.client = gdata.apps.groups.client.GroupsProvisioningClient(
domain=self.domain, auth_token=self.token)
self.client.SetAuthSubToken(self.token)
params = dict(
logout_url=users.create_logout_url(self.request.uri),
memberFeed = self.client.RetrieveAllMembers('test')
)
path = os.path.join(os.path.dirname(__file__), 'templates', 'index.html')
self.response.out.write(template.render(path, params))
def main():
application = webapp.WSGIApplication([('/', MainHandler)], debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
我部署这http://appplat4.appspot.com,并且你可以看到它返回一个500服务器错误。我有与app.yaml
相同的目录中的所有必要的库,我有我的谷歌API设置为域。
截图:
我一直在努力尽我所能来配置组从内部GAE没有成功。请帮助,如果可以,任何输入量赞赏。
好吧,谢谢CTY,我将与这一点,看看我能来浪费时间与...一起。非常感谢。 – Russell
我得到了这个美丽的工作。唯一的问题是将它与GAE结合,但看起来我并没有获得更多的反馈意见,所以我会接受你的答案。再次感谢。 – Russell