#!/usr/bin/env python # # Copyright 2007 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # """Starting template for Google App Engine applications. Use this project as a starting point if you are just beginning to build a Google App Engine project. Remember to download the OAuth 2.0 client secrets which can be obtained from the Developer Console and save them as 'client_secrets.json' in the project directory. """ __author__ = 'jcgregorio@google.com (Joe Gregorio)' import httplib2 import logging import os import pickle from apiclient.discovery import build from oauth2client.appengine import oauth2decorator_from_clientsecrets from oauth2client.client import AccessTokenRefreshError from google.appengine.api import memcache from google.appengine.ext import webapp from google.appengine.ext.webapp import template from google.appengine.ext.webapp.util import run_wsgi_app # CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this # application, including client_id and client_secret, which are found # on the API Access tab on the Google APIs # Console CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json') # Helpful message to display in the browser if the CLIENT_SECRETS file # is missing. MISSING_CLIENT_SECRETS_MESSAGE = """

Warning: Please configure OAuth 2.0

To make this sample run you will need to populate the client_secrets.json file found at:

%s.

with information found on the APIs Console.

""" % CLIENT_SECRETS http = httplib2.Http(memcache) service = build("buzz", "v1", http=http) decorator = oauth2decorator_from_clientsecrets( CLIENT_SECRETS, 'https://www.googleapis.com/auth/buzz', MISSING_CLIENT_SECRETS_MESSAGE) class MainHandler(webapp.RequestHandler): @decorator.oauth_aware def get(self): path = os.path.join(os.path.dirname(__file__), 'grant.html') variables = { 'url': decorator.authorize_url(), 'has_credentials': decorator.has_credentials() } self.response.out.write(template.render(path, variables)) class FollowerHandler(webapp.RequestHandler): @decorator.oauth_required def get(self): try: http = decorator.http() followers = service.people().list( userId='@me', groupId='@followers').execute(http) text = 'Hello, you have %s followers!' % followers['totalResults'] path = os.path.join(os.path.dirname(__file__), 'welcome.html') self.response.out.write(template.render(path, {'text': text })) except AccessTokenRefreshError: self.redirect('/') def main(): application = webapp.WSGIApplication( [ ('/', MainHandler), ('/followers', FollowerHandler), ], debug=True) run_wsgi_app(application) if __name__ == '__main__': main()