blob: e6b2ff49a66055b57ff0de0493ff3473683c78d2 [file] [log] [blame]
#!/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()