2011-11-19

Accessing Spreadsheets API with OAuth2 + app_identity.get_access_token()

import pprint
import webapp2
import gdata.client
import gdata.gauth
import gdata.spreadsheets.client
from google.appengine.api import app_identity

pp = pprint.PrettyPrinter()

class GetWorksheetsHandler(webapp2.RequestHandler):
    def get(self):
        spreadsheet_key = self.request.get('key') or '0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        scope = 'https://spreadsheets.google.com/feeds/'
        access_token, _ = app_identity.get_access_token(scope)

        oauth2token = gdata.gauth.OAuth2Token(
            client_id='',
            client_secret='',
            scope=scope,
            access_token=access_token,
            user_agent='your_application_name'
        )

        client = gdata.spreadsheets.client.SpreadsheetsClient()
        client = oauth2token.authorize(client)

        try:
            list = client.get_worksheets(spreadsheet_key=spreadsheet_key)
            self.response.out.write(str(list))

        except gdata.client.RequestError, msg:
            logging.debug(pp.pformat(msg))

application = webapp2.WSGIApplication([
    ('/get_worksheets', GetWorksheetsHandler),
], debug=True)

You need to copy
gdata-python-client's src/{gdata,atom} directories into your AppEngine project directory.

The client acts as the user 'APP_ID@appspot.gserviceaccount.com'. When you invite it as your collaborators, the application can modify your spreadsheet.

References
Getting started with python GData spreadsheets + OAuth2
Python gdata.spreadsheets.client get_worksheets
Google App Engine > App Identity Python API Overview