diff --git a/.hgignore b/.hgignore index 3cf93e7..9406408 100644 --- a/.hgignore +++ b/.hgignore @@ -1,6 +1,7 @@ syntax: glob *.pyc +*.pyc-2.4 *.dat .*.swp */.git/* diff --git a/samples/appengine/main.py b/samples/appengine/main.py index 89805aa..087a136 100755 --- a/samples/appengine/main.py +++ b/samples/appengine/main.py @@ -21,11 +21,13 @@ __author__ = 'jcgregorio@google.com (Joe Gregorio)' import httplib2 import logging import os +import pickle from apiclient.discovery import build -from apiclient.ext.appengine import FlowThreeLeggedProperty -from apiclient.ext.appengine import OAuthCredentialsProperty -from apiclient.oauth import FlowThreeLegged +from oauth2client.appengine import CredentialsProperty +from oauth2client.appengine import StorageByKeyName +from oauth2client.client import OAuth2WebServerFlow +from google.appengine.api import memcache from google.appengine.api import users from google.appengine.ext import db from google.appengine.ext import webapp @@ -34,13 +36,8 @@ from google.appengine.ext.webapp import util from google.appengine.ext.webapp.util import login_required -class Flow(db.Model): - # FlowThreeLegged could also be stored in memcache. - flow = FlowThreeLeggedProperty() - - class Credentials(db.Model): - credentials = OAuthCredentialsProperty() + credentials = CredentialsProperty() class MainHandler(webapp.RequestHandler): @@ -48,16 +45,32 @@ class MainHandler(webapp.RequestHandler): @login_required def get(self): user = users.get_current_user() - c = Credentials.get_by_key_name(user.user_id()) + credentials = StorageByKeyName( + Credentials, user.user_id(), 'credentials').get() - if c: + if credentials is None or credentials.invalid == True: + flow = OAuth2WebServerFlow( + # Visit https://code.google.com/apis/console to + # generate your client_id, client_secret and to + # register your redirect_uri. + client_id='', + client_secret='', + scope='https://www.googleapis.com/auth/buzz', + user_agent='buzz-cmdline-sample/1.0', + domain='anonymous', + xoauth_displayname='Google App Engine Example App') + + callback = self.request.relative_url('/auth_return') + authorize_url = flow.step1_get_authorize_url(callback) + memcache.set(user.user_id(), pickle.dumps(flow)) + self.redirect(authorize_url) + else: http = httplib2.Http() - http = c.credentials.authorize(http) + http = credentials.authorize(http) service = build("buzz", "v1", http=http) activities = service.activities() activitylist = activities.list(scope='@consumption', userId='@me').execute() - logging.info(activitylist) path = os.path.join(os.path.dirname(__file__), 'welcome.html') logout = users.create_logout_url('/') self.response.out.write( @@ -65,21 +78,6 @@ class MainHandler(webapp.RequestHandler): path, {'activitylist': activitylist, 'logout': logout })) - else: - p = build("buzz", "v1") - flow = FlowThreeLegged(p.auth_discovery(), - consumer_key='anonymous', - consumer_secret='anonymous', - user_agent='google-api-client-python-buzz-webapp/1.0', - domain='anonymous', - scope='https://www.googleapis.com/auth/buzz', - xoauth_displayname='Example Web App') - - callback = self.request.relative_url('/auth_return') - authorize_url = flow.step1_get_authorize_url(callback) - f = Flow(key_name=user.user_id(), flow=flow) - f.put() - self.redirect(authorize_url) class OAuthHandler(webapp.RequestHandler): @@ -87,12 +85,11 @@ class OAuthHandler(webapp.RequestHandler): @login_required def get(self): user = users.get_current_user() - f = Flow.get_by_key_name(user.user_id()) - if f: - credentials = f.flow.step2_exchange(self.request.params) - c = Credentials(key_name=user.user_id(), credentials=credentials) - c.put() - f.delete() + flow = pickle.loads(memcache.get(user.user_id())) + if flow: + credentials = flow.step2_exchange(self.request.params) + StorageByKeyName( + Credentials, user.user_id(), 'credentials').put(credentials) self.redirect("/") else: pass diff --git a/samples/buzz/buzz.py b/samples/buzz/buzz.py index f093f20..74ee3a4 100644 --- a/samples/buzz/buzz.py +++ b/samples/buzz/buzz.py @@ -11,85 +11,85 @@ latest content and then adds a new entry. __author__ = 'jcgregorio@google.com (Joe Gregorio)' -from apiclient.discovery import build -from apiclient.oauth import FlowThreeLegged -from apiclient.ext.authtools import run -from apiclient.ext.file import Storage -from apiclient.oauth import CredentialsInvalidError - +import gflags import httplib2 +import logging import pprint +import sys -# Uncomment the next line to get very detailed logging -#httplib2.debuglevel = 4 +from apiclient.discovery import build +from oauth2client.file import Storage +from oauth2client.client import OAuth2WebServerFlow +from oauth2client.tools import run + +FLAGS = gflags.FLAGS +FLOW = OAuth2WebServerFlow( + client_id='433807057907.apps.googleusercontent.com', + client_secret='jigtZpMApkRxncxikFpR+SFg', + scope='https://www.googleapis.com/auth/buzz', + user_agent='buzz-cmdline-sample/1.0') + +gflags.DEFINE_enum('logging_level', 'ERROR', + ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + 'Set the level of logging detail.') -def main(): +def main(argv): + try: + argv = FLAGS(argv) + except gflags.FlagsError, e: + print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) + sys.exit(1) + + logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) + storage = Storage('buzz.dat') credentials = storage.get() if credentials is None or credentials.invalid == True: - buzz_discovery = build("buzz", "v1").auth_discovery() - - flow = FlowThreeLegged(buzz_discovery, - consumer_key='anonymous', - consumer_secret='anonymous', - user_agent='python-buzz-sample/1.0', - domain='anonymous', - scope='https://www.googleapis.com/auth/buzz', - xoauth_displayname='Google API Client Example App') - - credentials = run(flow, storage) + credentials = run(FLOW, storage) http = httplib2.Http() http = credentials.authorize(http) + # Build the Buzz service service = build("buzz", "v1", http=http, - developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0") + developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0") activities = service.activities() - try: - # Retrieve the first two activities - activitylist = activities.list( - max_results='2', scope='@self', userId='@me').execute() - print "Retrieved the first two activities" + # Retrieve the first two activities + activitylist = activities.list( + max_results='2', scope='@self', userId='@me').execute() + print "Retrieved the first two activities" - # Retrieve the next two activities - if activitylist: - activitylist = activities.list_next(activitylist).execute() - print "Retrieved the next two activities" + # Retrieve the next two activities + if activitylist: + activitylist = activities.list_next(activitylist).execute() + print "Retrieved the next two activities" - # Add a new activity - new_activity_body = { - "data": { - 'title': 'Testing insert', - 'object': { - 'content': - u'Just a short note to show that insert is working. ☄', - 'type': 'note'} - } - } - activity = activities.insert( - userId='@me', body=new_activity_body).execute() - print "Added a new activity" + # Add a new activity + new_activity_body = { + 'title': 'Testing insert', + 'object': { + 'content': + u'Just a short note to show that insert is working. ☄', + 'type': 'note'} + } + activity = activities.insert(userId='@me', body=new_activity_body).execute() + print "Added a new activity" - activitylist = activities.list( - max_results='2', scope='@self', userId='@me').execute() + activitylist = activities.list( + max_results='2', scope='@self', userId='@me').execute() - # Add a comment to that activity - comment_body = { - "data": { - "content": "This is a comment" - } - } - item = activitylist['items'][0] - comment = service.comments().insert( - userId=item['actor']['id'], postId=item['id'], body=comment_body - ).execute() - print 'Added a comment to the new activity' - pprint.pprint(comment) - except CredentialsInvalidError: - print 'Your credentials are no longer valid.' - print 'Please re-run this application to re-authorize.' + # Add a comment to that activity + comment_body = { + "content": "This is a comment" + } + item = activitylist['items'][0] + comment = service.comments().insert( + userId=item['actor']['id'], postId=item['id'], body=comment_body + ).execute() + print 'Added a comment to the new activity' + pprint.pprint(comment) if __name__ == '__main__': - main() + main(sys.argv) diff --git a/samples/django_sample/buzz/models.py b/samples/django_sample/buzz/models.py index 11a408d..69c180c 100644 --- a/samples/django_sample/buzz/models.py +++ b/samples/django_sample/buzz/models.py @@ -5,23 +5,23 @@ from django.contrib import admin from django.contrib.auth.models import User from django.db import models -from apiclient.ext.django_orm import FlowThreeLeggedField -from apiclient.ext.django_orm import OAuthCredentialsField +from oauth2client.django_orm import FlowField +from oauth2client.django_orm import CredentialsField # The Flow could also be stored in memcache since it is short lived. -class Flow(models.Model): +class FlowModel(models.Model): id = models.ForeignKey(User, primary_key=True) - flow = FlowThreeLeggedField() + flow = FlowField() -class Credential(models.Model): +class CredentialsModel(models.Model): id = models.ForeignKey(User, primary_key=True) - credential = OAuthCredentialsField() + credential = CredentialsField() -class CredentialAdmin(admin.ModelAdmin): +class CredentialsAdmin(admin.ModelAdmin): pass @@ -29,5 +29,5 @@ class FlowAdmin(admin.ModelAdmin): pass -admin.site.register(Credential, CredentialAdmin) -admin.site.register(Flow, FlowAdmin) +admin.site.register(CredentialsModel, CredentialsAdmin) +admin.site.register(FlowModel, FlowAdmin) diff --git a/samples/django_sample/buzz/views.py b/samples/django_sample/buzz/views.py index 0205c4f..c942aaf 100644 --- a/samples/django_sample/buzz/views.py +++ b/samples/django_sample/buzz/views.py @@ -5,9 +5,13 @@ import httplib2 from django.http import HttpResponse from django.core.urlresolvers import reverse from django.contrib.auth.decorators import login_required -from django_sample.buzz.models import Credential, Flow + +from oauth2client.django_orm import Storage +from oauth2client.client import OAuth2WebServerFlow +from django_sample.buzz.models import CredentialsModel +from django_sample.buzz.models import FlowModel from apiclient.discovery import build -from apiclient.oauth import FlowThreeLegged + from django.http import HttpResponseRedirect from django.shortcuts import render_to_response @@ -16,10 +20,23 @@ STEP2_URI = 'http://localhost:8000/auth_return' @login_required def index(request): - try: - c = Credential.objects.get(id=request.user) + storage = Storage(CredentialsModel, 'id', request.user, 'credential') + credential = storage.get() + if credential is None or credential.invalid == True: + flow = OAuth2WebServerFlow( + client_id='837647042410.apps.googleusercontent.com', + client_secret='+SWwMCL9d8gWtzPRa1lXw5R8', + scope='https://www.googleapis.com/auth/buzz', + user_agent='buzz-django-sample/1.0', + ) + + authorize_url = flow.step1_get_authorize_url(STEP2_URI) + f = FlowModel(id=request.user, flow=flow) + f.save() + return HttpResponseRedirect(authorize_url) + else: http = httplib2.Http() - http = c.credential.authorize(http) + http = credential.authorize(http) service = build("buzz", "v1", http=http) activities = service.activities() activitylist = activities.list(scope='@consumption', @@ -30,30 +47,15 @@ def index(request): 'activitylist': activitylist, }) - except Credential.DoesNotExist: - service = build("buzz", "v1") - flow = FlowThreeLegged(service.auth_discovery(), - consumer_key='anonymous', - consumer_secret='anonymous', - user_agent='google-api-client-python-buzz-django/1.0', - domain='anonymous', - scope='https://www.googleapis.com/auth/buzz', - xoauth_displayname='Django Example Web App') - - authorize_url = flow.step1_get_authorize_url(STEP2_URI) - f = Flow(id=request.user, flow=flow) - f.save() - return HttpResponseRedirect(authorize_url) - @login_required def auth_return(request): try: - f = Flow.objects.get(id=request.user) + f = FlowModel.objects.get(id=request.user) credential = f.flow.step2_exchange(request.REQUEST) - c = Credential(id=request.user, credential=credential) - c.save() + storage = Storage(CredentialsModel, 'id', request.user, 'credential') + storage.put(credential) f.delete() return HttpResponseRedirect("/") - except Flow.DoesNotExist: + except FlowModel.DoesNotExist: pass diff --git a/samples/moderator/moderator.py b/samples/moderator/moderator.py index 080c599..c75c962 100644 --- a/samples/moderator/moderator.py +++ b/samples/moderator/moderator.py @@ -3,89 +3,100 @@ # # Copyright 2010 Google Inc. All Rights Reserved. -"""Simple command-line example for Buzz. +"""Simple command-line example for Moderator. -Command-line application that retrieves the users -latest content and then adds a new entry. +Command-line application that exercises the Google Moderator API. """ __author__ = 'jcgregorio@google.com (Joe Gregorio)' +import gflags +import httplib2 +import logging +import sys from apiclient.discovery import build -from apiclient.oauth import FlowThreeLegged -from apiclient.ext.authtools import run -from apiclient.ext.file import Storage -from apiclient.oauth import CredentialsInvalidError +from oauth2client.file import Storage +from oauth2client.client import OAuth2WebServerFlow +from oauth2client.tools import run -import httplib2 +FLAGS = gflags.FLAGS +FLOW = OAuth2WebServerFlow( + client_id='433807057907.apps.googleusercontent.com', + client_secret='jigtZpMApkRxncxikFpR+SFg', + scope='https://www.googleapis.com/auth/moderator', + user_agent='moderator-cmdline-sample/1.0') -# Uncomment to get detailed logging -# httplib2.debuglevel = 4 +gflags.DEFINE_enum('logging_level', 'ERROR', + ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + 'Set the level of logging detail.') -def main(): +def main(argv): + try: + argv = FLAGS(argv) + except gflags.FlagsError, e: + print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) + sys.exit(1) + + logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) + storage = Storage('moderator.dat') credentials = storage.get() + if credentials is None or credentials.invalid == True: - moderator_discovery = build('moderator', 'v1').auth_discovery() + credentials = run(FLOW, storage) - flow = FlowThreeLegged(moderator_discovery, - consumer_key='anonymous', - consumer_secret='anonymous', - user_agent='python-moderator-sample/1.0', - domain='anonymous', - scope='https://www.googleapis.com/auth/moderator', - xoauth_displayname='Google API Client Example App') - - credentials = run(flow, storage) - - http = httplib2.Http() + http = httplib2.Http(cache=".cache") http = credentials.authorize(http) - service = build('moderator', 'v1', http=http) + service = build("moderator", "v1", http=http) series_body = { - 'description': 'Share and rank tips for eating healthy and cheap!', - 'name': 'Eating Healthy & Cheap', - 'videoSubmissionAllowed': False + "data": { + "description": "Share and rank tips for eating healthy and cheap!", + "name": "Eating Healthy & Cheap", + "videoSubmissionAllowed": False + } } - try: - series = service.series().insert(body=series_body).execute() - print 'Created a new series' + series = service.series().insert(body=series_body).execute() + print "Created a new series" - topic_body = { - 'description': 'Share your ideas on eating healthy!', - 'name': 'Ideas', - 'presenter': 'liz' + topic_body = { + "data": { + "description": "Share your ideas on eating healthy!", + "name": "Ideas", + "presenter": "liz" } - topic = service.topics().insert(seriesId=series['id']['seriesId'], - body=topic_body).execute() - print 'Created a new topic' + } + topic = service.topics().insert(seriesId=series['id']['seriesId'], + body=topic_body).execute() + print "Created a new topic" - submission_body = { - 'attachmentUrl': 'http://www.youtube.com/watch?v=1a1wyc5Xxpg', - 'attribution': { - 'displayName': 'Bashan', - 'location': 'Bainbridge Island, WA' + submission_body = { + "data": { + "attachmentUrl": "http://www.youtube.com/watch?v=1a1wyc5Xxpg", + "attribution": { + "displayName": "Bashan", + "location": "Bainbridge Island, WA" }, - 'text': 'Charlie Ayers @ Google' + "text": "Charlie Ayers @ Google" } - submission = service.submissions().insert(seriesId=topic['id']['seriesId'], - topicId=topic['id']['topicId'], body=submission_body).execute() - print 'Inserted a new submisson on the topic' + } + submission = service.submissions().insert(seriesId=topic['id']['seriesId'], + topicId=topic['id']['topicId'], body=submission_body).execute() + print "Inserted a new submisson on the topic" - vote_body = { - 'vote': 'PLUS' + vote_body = { + "data": { + "vote": "PLUS" } - service.votes().insert(seriesId=topic['id']['seriesId'], - submissionId=submission['id']['submissionId'], - body=vote_body) - print 'Voted on the submission' - except CredentialsInvalidError: - print 'Your credentials are no longer valid.' - print 'Please re-run this application to re-authorize.' + } + service.votes().insert(seriesId=topic['id']['seriesId'], + submissionId=submission['id']['submissionId'], + body=vote_body) + print "Voted on the submission" if __name__ == '__main__': - main() + main(sys.argv) diff --git a/samples/oauth2/buzz/buzz.py b/samples/oauth2/buzz/buzz.py deleted file mode 100644 index 74ee3a4..0000000 --- a/samples/oauth2/buzz/buzz.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/python2.4 -# -*- coding: utf-8 -*- -# -# Copyright 2010 Google Inc. All Rights Reserved. - -"""Simple command-line example for Buzz. - -Command-line application that retrieves the users -latest content and then adds a new entry. -""" - -__author__ = 'jcgregorio@google.com (Joe Gregorio)' - -import gflags -import httplib2 -import logging -import pprint -import sys - -from apiclient.discovery import build -from oauth2client.file import Storage -from oauth2client.client import OAuth2WebServerFlow -from oauth2client.tools import run - -FLAGS = gflags.FLAGS -FLOW = OAuth2WebServerFlow( - client_id='433807057907.apps.googleusercontent.com', - client_secret='jigtZpMApkRxncxikFpR+SFg', - scope='https://www.googleapis.com/auth/buzz', - user_agent='buzz-cmdline-sample/1.0') - -gflags.DEFINE_enum('logging_level', 'ERROR', - ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], - 'Set the level of logging detail.') - - -def main(argv): - try: - argv = FLAGS(argv) - except gflags.FlagsError, e: - print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) - sys.exit(1) - - logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) - - storage = Storage('buzz.dat') - credentials = storage.get() - if credentials is None or credentials.invalid == True: - credentials = run(FLOW, storage) - - http = httplib2.Http() - http = credentials.authorize(http) - - # Build the Buzz service - service = build("buzz", "v1", http=http, - developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0") - activities = service.activities() - - # Retrieve the first two activities - activitylist = activities.list( - max_results='2', scope='@self', userId='@me').execute() - print "Retrieved the first two activities" - - # Retrieve the next two activities - if activitylist: - activitylist = activities.list_next(activitylist).execute() - print "Retrieved the next two activities" - - # Add a new activity - new_activity_body = { - 'title': 'Testing insert', - 'object': { - 'content': - u'Just a short note to show that insert is working. ☄', - 'type': 'note'} - } - activity = activities.insert(userId='@me', body=new_activity_body).execute() - print "Added a new activity" - - activitylist = activities.list( - max_results='2', scope='@self', userId='@me').execute() - - # Add a comment to that activity - comment_body = { - "content": "This is a comment" - } - item = activitylist['items'][0] - comment = service.comments().insert( - userId=item['actor']['id'], postId=item['id'], body=comment_body - ).execute() - print 'Added a comment to the new activity' - pprint.pprint(comment) - -if __name__ == '__main__': - main(sys.argv) diff --git a/samples/oauth2/moderator/moderator.py b/samples/oauth2/moderator/moderator.py deleted file mode 100644 index c75c962..0000000 --- a/samples/oauth2/moderator/moderator.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/python2.4 -# -*- coding: utf-8 -*- -# -# Copyright 2010 Google Inc. All Rights Reserved. - -"""Simple command-line example for Moderator. - -Command-line application that exercises the Google Moderator API. -""" - -__author__ = 'jcgregorio@google.com (Joe Gregorio)' - -import gflags -import httplib2 -import logging -import sys - -from apiclient.discovery import build -from oauth2client.file import Storage -from oauth2client.client import OAuth2WebServerFlow -from oauth2client.tools import run - -FLAGS = gflags.FLAGS -FLOW = OAuth2WebServerFlow( - client_id='433807057907.apps.googleusercontent.com', - client_secret='jigtZpMApkRxncxikFpR+SFg', - scope='https://www.googleapis.com/auth/moderator', - user_agent='moderator-cmdline-sample/1.0') - -gflags.DEFINE_enum('logging_level', 'ERROR', - ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], - 'Set the level of logging detail.') - - -def main(argv): - try: - argv = FLAGS(argv) - except gflags.FlagsError, e: - print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) - sys.exit(1) - - logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) - - storage = Storage('moderator.dat') - credentials = storage.get() - - if credentials is None or credentials.invalid == True: - credentials = run(FLOW, storage) - - http = httplib2.Http(cache=".cache") - http = credentials.authorize(http) - - service = build("moderator", "v1", http=http) - - series_body = { - "data": { - "description": "Share and rank tips for eating healthy and cheap!", - "name": "Eating Healthy & Cheap", - "videoSubmissionAllowed": False - } - } - series = service.series().insert(body=series_body).execute() - print "Created a new series" - - topic_body = { - "data": { - "description": "Share your ideas on eating healthy!", - "name": "Ideas", - "presenter": "liz" - } - } - topic = service.topics().insert(seriesId=series['id']['seriesId'], - body=topic_body).execute() - print "Created a new topic" - - submission_body = { - "data": { - "attachmentUrl": "http://www.youtube.com/watch?v=1a1wyc5Xxpg", - "attribution": { - "displayName": "Bashan", - "location": "Bainbridge Island, WA" - }, - "text": "Charlie Ayers @ Google" - } - } - submission = service.submissions().insert(seriesId=topic['id']['seriesId'], - topicId=topic['id']['topicId'], body=submission_body).execute() - print "Inserted a new submisson on the topic" - - vote_body = { - "data": { - "vote": "PLUS" - } - } - service.votes().insert(seriesId=topic['id']['seriesId'], - submissionId=submission['id']['submissionId'], - body=vote_body) - print "Voted on the submission" - - -if __name__ == '__main__': - main(sys.argv) diff --git a/samples/oauth2/urlshortener/main.py b/samples/oauth2/urlshortener/main.py deleted file mode 100644 index 62945c5..0000000 --- a/samples/oauth2/urlshortener/main.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/python2.4 -# -*- coding: utf-8 -*- -# -# Copyright 2010 Google Inc. All Rights Reserved. - -"""Simple command-line example for Google URL Shortener API. - -Command-line application that shortens a URL. -""" - -__author__ = 'jcgregorio@google.com (Joe Gregorio)' - -import gflags -import httplib2 -import logging -import pprint -import sys - -from apiclient.discovery import build -from oauth2client.file import Storage -from oauth2client.client import OAuth2WebServerFlow -from oauth2client.client import AccessTokenCredentials -from oauth2client.tools import run - -FLAGS = gflags.FLAGS -FLOW = OAuth2WebServerFlow( - client_id='433807057907.apps.googleusercontent.com', - client_secret='jigtZpMApkRxncxikFpR+SFg', - scope='https://www.googleapis.com/auth/urlshortener', - user_agent='urlshortener-cmdline-sample/1.0') - -gflags.DEFINE_enum('logging_level', 'ERROR', - ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], - 'Set the level of logging detail.') - - -def main(argv): - try: - argv = FLAGS(argv) - except gflags.FlagsError, e: - print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) - sys.exit(1) - - logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) - - storage = Storage('urlshortener.dat') - credentials = storage.get() - if credentials is None or credentials.invalid == True: - credentials = run(FLOW, storage) - - http = httplib2.Http() - http = credentials.authorize(http) - - # Build the url shortener service - service = build("urlshortener", "v1", http=http, - developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0") - url = service.url() - - # Create a shortened URL by inserting the URL into the url collection. - body = {"longUrl": "http://code.google.com/apis/urlshortener/" } - resp = url.insert(body=body).execute() - pprint.pprint(resp) - - shortUrl = resp['id'] - - # Convert the shortened URL back into a long URL - resp = url.get(shortUrl=shortUrl).execute() - pprint.pprint(resp) - - -if __name__ == '__main__': - main(sys.argv) diff --git a/samples/urlshortener/main.py b/samples/urlshortener/main.py index 4609c9f..62945c5 100644 --- a/samples/urlshortener/main.py +++ b/samples/urlshortener/main.py @@ -10,19 +10,49 @@ Command-line application that shortens a URL. __author__ = 'jcgregorio@google.com (Joe Gregorio)' -from apiclient.discovery import build - +import gflags +import httplib2 +import logging import pprint +import sys -# Uncomment the next two lines to get very detailed logging -#import httplib2 -#httplib2.debuglevel = 4 +from apiclient.discovery import build +from oauth2client.file import Storage +from oauth2client.client import OAuth2WebServerFlow +from oauth2client.client import AccessTokenCredentials +from oauth2client.tools import run + +FLAGS = gflags.FLAGS +FLOW = OAuth2WebServerFlow( + client_id='433807057907.apps.googleusercontent.com', + client_secret='jigtZpMApkRxncxikFpR+SFg', + scope='https://www.googleapis.com/auth/urlshortener', + user_agent='urlshortener-cmdline-sample/1.0') + +gflags.DEFINE_enum('logging_level', 'ERROR', + ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + 'Set the level of logging detail.') -def main(): +def main(argv): + try: + argv = FLAGS(argv) + except gflags.FlagsError, e: + print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) + sys.exit(1) + + logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) + + storage = Storage('urlshortener.dat') + credentials = storage.get() + if credentials is None or credentials.invalid == True: + credentials = run(FLOW, storage) + + http = httplib2.Http() + http = credentials.authorize(http) # Build the url shortener service - service = build("urlshortener", "v1", + service = build("urlshortener", "v1", http=http, developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0") url = service.url() @@ -37,5 +67,6 @@ def main(): resp = url.get(shortUrl=shortUrl).execute() pprint.pprint(resp) + if __name__ == '__main__': - main() + main(sys.argv)