Moved OAuth 2.0 samples up to the top level.
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 @@
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.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 @@
@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='<YOUR CLIENT ID HERE>',
+ client_secret='<YOUR CLIENT SECRET HERE>',
+ 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 @@
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 @@
@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 @@
__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.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 @@
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 @@
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 @@
@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 @@
'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 @@
__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 @@
resp = url.get(shortUrl=shortUrl).execute()
pprint.pprint(resp)
+
if __name__ == '__main__':
- main()
+ main(sys.argv)