2 Legged OAuth in Python

Google Apps Premier/Education administrators can take advantage of 2 legged OAuth to communicate with the Google Data APIs. If you're using the Google Data Python client library 1.2.3+: An updated sample is here available here. Otherwise, if you're stuck with an older version of the library (< 1.2.3), you can use the Python OAuth library from oauth.net.
import urllib
import oauth
import gdata.contacts
import gdata.contacts.service

CONSUMER_KEY = 'yourdomain.com'
CONSUMER_SECRET = 'YOUR_CONSUMER_SECRET'
CONTACTS_URL = 'http://www.google.com/m8/feeds/contacts/default/full'

# Setup 2 legged OAuth consumer based on our admin "credentials"
consumer = oauth.OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET)

user = 'any.user@yourdomain.com'
params = {'max-results': 50, 'xoauth_requestor_id': user}

# Construct the request manually and sign it using HMAC-SHA1
# Note: The params dictionary needs to be passed in separately from the base URL
request = oauth.OAuthRequest.from_consumer_and_token(
   consumer, http_method='GET', http_url=CONTACTS_URL, parameters=params)
request.sign_request(oauth.OAuthSignatureMethod_HMAC_SHA1(), consumer, None)

# See patch @ http://code.google.com/p/oauth/issues/detail?id=31
headers = request.to_header()

client = gdata.contacts.service.ContactsService()

# Query the user's contacts and print their name & email
uri = '%s?%s' % (request.http_url, urllib.urlencode(params))
feed = client.GetFeed(uri, extra_headers=headers, converter=gdata.contacts.ContactsFeedFromString)
for entry in feed.entry:
 print '%s, %s' % (entry.title.text, entry.email[0].address)

9 comments:

  1. Hi Sinuy,

    With 2 Legged OAuth, there's no oauth token, so you don't have to fetch a request token.

    An example of 3 Legged OAuth (normal flow) using the Python library is available here:
    http://code.google.com/p/gdata-python-client/source/browse/trunk/samples/oauth/oauth_example.py

    Feel free to post in the Google Accounts APIs group if you have questions.
    http://groups.google.com/group/Google-Accounts-API

    Eric

    ReplyDelete
  2. Hi,

    i have got the same error message
    signature_invalid base_string:GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRe ,.........

    the above code works perfect with twitter but not with google.
    did anybody got the request token for google ?

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. To fix HP printer driver Windows 10 issue , impair HP Smart Install, run ... of introducing HP printer is simple and won't take in excess of a couple of moments.

    ReplyDelete
  5. The ultimate goal of custom argumentative essay writing services is to provide Argumentative Essay Writing Help and argumentative essay writing tips since argumentative essay structure seekers lack time to complete their college argumentative essays.

    ReplyDelete
  6. Great article, readable content, and well written. Thanks for sharing.
    Python Training in Pune

    ReplyDelete
  7. That's Great. Thanks for sharing us nice stuff. This content is really valuable and knowledgeable. I appreciate your knowledge and your writing skill. Keep writing...
    EIS SM Pendrive Classes

    ReplyDelete