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

  • Weisen Sie einer Variablen in einer Funktion in Python 2.7 eine Druckanweisung zu
  • Warum beschwert sich Python vor der Zuordnung bei der Erhöhung von Variablen in einer Funktion?
  • Wie bekomme ich den ursprünglichen Variablennamen der Variablen an eine Funktion übergeben
  • Python-Funktionen: Globale Variablen übergeben, wenn man nur auf sie zugreift?
  • Python: Funktion und Variable mit gleichem Namen
  • Aufruf der Variablen innerhalb einer Funktion aus einer anderen Funktion
  • 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.

  • Vergleichen Sie 1 Spalte 2D-Array und entfernen Sie Duplikate Python
  • Löschen von Duplikaten aus einer Liste von Listen, wenn einige Duplikate nicht die gleiche Reihenfolge haben
  • Bestimmen von doppelten Werten in einem Array
  • Was ist der effizienteste Weg mit Python, um Zeilen in einem CSV zusammenzuführen, die ein einzelnes Duplikatfeld haben?
  • Wie kann ich doppelte Wörter in einem String mit Python entfernen?
  • TypeError: unhashable type: 'list' bei Verwendung der eingebauten Set-Funktion
  • 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.