#!/usr/bin/python2.4 # -*- coding: utf-8 -*- # # Copyright 2010 Google Inc. All Rights Reserved. """One-line documentation for discovery module. A detailed description of discovery. """ __author__ = 'jcgregorio@google.com (Joe Gregorio)' from apiclient.discovery import build import httplib2 import oauth2 as oauth import re import simplejson def oauth_wrap(consumer, token, http): """ Args: http - An instance of httplib2.Http or something that acts like it. Returns: A modified instance of http that was passed in. Example: h = httplib2.Http() h = oauth_wrap(h) Grumble. You can't create a new OAuth subclass of httplib2.Authenication because it never gets passed the absolute URI, which is needed for signing. So instead we have to overload 'request' with a closure that adds in the Authorization header and then calls the original version of 'request()'. """ request_orig = http.request signer = oauth.SignatureMethod_HMAC_SHA1() def new_request(uri, method="GET", body=None, headers=None, redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None): """Modify the request headers to add the appropriate Authorization header.""" req = oauth.Request.from_consumer_and_token( consumer, token, http_method=method, http_url=uri) req.sign_request(signer, consumer, token) if headers == None: headers = {} headers.update(req.to_header()) headers['user-agent'] = 'jcgregorio-test-client' return request_orig(uri, method, body, headers, redirections, connection_type) http.request = new_request return http def get_wrapped_http(): f = open("oauth_token.dat", "r") oauth_params = simplejson.loads(f.read()) consumer = oauth.Consumer( oauth_params['consumer_key'], oauth_params['consumer_secret']) token = oauth.Token( oauth_params['oauth_token'], oauth_params['oauth_token_secret']) # Create a simple monkeypatch for httplib2.Http.request # just adds in the oauth authorization header and then calls # the original request(). http = httplib2.Http() return oauth_wrap(consumer, token, http) def main(): http = get_wrapped_http() p = build("buzz", "v1", http=http) activities = p.activities() activitylist = activities.list(scope='@self', userId='@me') print activitylist['items'][0]['title'] activities.insert(userId='@me', body={ 'title': 'Testing insert', 'object': { 'content': u'Just a short note to show that insert is working. ☄', 'type': 'note'} } ) if __name__ == '__main__': main()