Google App Engine und Group Provisioning

Ich brauche hier etwas Hilfe, seit fast 2 Wochen bin ich dabei.

Was ich versuche zu tun ist, verwenden Sie die Google Provisioning API innerhalb von GAE (Google App Engine) mit oAuth2. Ich weiß, es gibt ein paar Beispiele mit oAuth1, um dies zu erreichen. Mein Verständnis aber ist, dass oAuth1 jetzt veraltet ist und wir müssen oAuth2 verwendet haben, bitte korrigieren Sie mich, wenn ich mich irre

  • Timly.timeit variablen importieren in python
  • Funktion ändert die Listenwerte und nicht Variablenwerte in Python
  • Warum braucht eine meiner Variablen keine Deklaration, während die andere nicht funktioniert?
  • Weisen Sie einer Variablen in einer Funktion in Python 2.7 eine Druckanweisung zu
  • Wie bekomme ich den ursprünglichen Variablennamen der Variablen an eine Funktion übergeben
  • Python: Variablen werden nicht neu zugeordnet
  • Ich habe das Internet geputzt und das einzige Beispiel, das ich finden konnte, um zu arbeiten, ist das:

    Https: /

    Andere Beispiele, die ich gefunden habe, verwenden oAuth 1, oder sie sind nicht dafür ausgelegt, mit App Engine verwendet zu werden.

    Ich habe den Code aus dem obigen Beispiel genommen und versucht, es zu ändern, um mit der Gruppen-Provisioning-API zu arbeiten, hier ist mein Code:

    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() 

    Ich habe das auf http://appplat4.appspot.com implementiert, und wie du sehen kannst, gibt es einen 500 Server Fehler zurück. Ich habe alle notwendigen Bibliotheken im selben Verzeichnis wie app.yaml und ich habe meine google api für die Domain eingerichtet.

    Bildschirmfoto: Bildbeschreibung hier eingeben

    Ich habe alles versucht, was ich kann, um Gruppen aus GAE ohne Erfolg zu versorgen. Bitte helfen Sie, wenn Sie können, wird jede Menge von Input geschätzt.

  • List & Object Duplication Probleme in Python
  • Wie entfernen Sie Duplikate aus einer Liste bei der Erhaltung der Bestellung?
  • Beste Weg, um doppelte Zeichen (Wörter) in einem String zu entfernen?
  • Fügen Sie Wörterbücher hinzu, die Werte für doppelte Schlüssel beibehalten
  • Wie entferne ich doppelte Wörter aus einer Liste in python ohne Sätze?
  • Finde und liste Duplikate in einer Liste?
  • One Solution collect form web for “Google App Engine und Group Provisioning”

    Dies betrifft keine App-Engine, aber es ist ein Befehlszeilenbeispiel mit einem gdata-Client mit oauth 2:

     import sys import os import webbrowser import gdata.gauth import oauth2client.client import oauth2client.file import oauth2client.tools import gdata.gauth import gdata.client import gdata.apps.groups.client APICONSOLE = 'https://code.google.com/apis/console' SCOPES = 'https://apps-apis.google.com/a/feeds/groups/' OAUTH2FILENAME = 'credentials.oauth2' OAUTH2JSONFILE = 'client_secrets.json' OAUTH2USERAGENT = 'GROUPS' MISSING_OAUTHJSONFILE_MESSAGE = """ You must create or download a client secrets json file (%s) from the Google APIs console <https://code.google.com/apis/console>. Attemping to open page with your browser ... """ % os.path.join(os.path.dirname(__file__), OAUTH2JSONFILE) # populate with approprate values DOMAIN = 'your-domain' GROUP_ID = 'agroup@your.domain' if not os.path.isfile(OAUTH2JSONFILE): message = MISSING_OAUTHJSONFILE_MESSAGE print message try: webbrowser.open(str(APICONSOLE)) except Exception, e: print "Error opening web page" sys.exit(1) message = 'When %s is created/downloaded press Enter to continue ... ' %(OAUTH2JSONFILE) raw_input(message) oauth2_flow = oauth2client.client.flow_from_clientsecrets(OAUTH2JSONFILE, scope=SCOPES,message=MISSING_OAUTHJSONFILE_MESSAGE) storage = oauth2client.file.Storage(OAUTH2FILENAME) oauth2_credentials = storage.get() if oauth2_credentials is None or oauth2_credentials.invalid: oauth2_credentials = oauth2client.tools.run(oauth2_flow, storage) oauth2_token = gdata.gauth.OAuth2Token( client_id=oauth2_credentials.client_id, client_secret=oauth2_credentials.client_secret, scope=SCOPES, user_agent=OAUTH2USERAGENT, access_token=oauth2_credentials.access_token, refresh_token=oauth2_credentials.refresh_token) # authorize client groups_client = oauth2_token.authorize( gdata.apps.groups.client.GroupsProvisioningClient(domain=DOMAIN)) print 'Authorized domain %s . . .\n' %(DOMAIN) group_entry = groups_client.RetrieveGroup(group_id=GROUP_ID) print group_entry.group_id print group_entry.group_name print group_entry.description print group_entry.email_permission sys.exit(0) 
    Python ist die beste Programmiersprache der Welt.