class OAuthClient

OAuthClient provides OAuth related methods in addition to HTTPClient.

See sample/ dir how to use OAuthClient. There are sample clients for Twitter, FriendFeed and Google Buzz.

Attributes

oauth_config[RW]
HTTPClient::OAuth::Config

OAuth configurator.

Public Class Methods

new(*arg) click to toggle source

Creates a OAuthClient instance which provides OAuth related methods in addition to HTTPClient.

Method signature is as same as HTTPClient. See HTTPClient.new

Calls superclass method HTTPClient::new
# File lib/oauthclient.rb, line 31
def initialize(*arg)
  super
  @oauth_config = HTTPClient::OAuth::Config.new
  self.www_auth.oauth.set_config(nil, @oauth_config)
  self.www_auth.oauth.challenge(nil)
  self.strict_response_size_check = true
end

Public Instance Methods

get_access_token(uri, request_token, request_token_secret, verifier = nil) click to toggle source

Get access token.

uri

URI for request token.

request_token

a request token String. See get_access_token.

request_token_secret

a request secret String. See get_access_token.

verifier

a verifier tag String.

When the request succeeds and the server returns a pair of access token and secret, oauth_config.token and oauth_token.secret are updated with the access token. Then you can call OAuthClient#get, post, delete, etc. All requests are signed.

# File lib/oauthclient.rb, line 70
def get_access_token(uri, request_token, request_token_secret, verifier = nil)
  oauth_config.token = request_token
  oauth_config.secret = request_token_secret
  oauth_config.callback = nil
  oauth_config.verifier = verifier
  res = request(oauth_config.http_method, uri)
  filter_response(res)
  oauth_config.verifier = nil
  res
end
get_oauth_response(res) click to toggle source

Parse response and returns a Hash.

# File lib/oauthclient.rb, line 82
def get_oauth_response(res)
  enc = res.header['content-encoding']
  body = nil
  if enc and enc[0] and enc[0].downcase == 'gzip'
    body = Zlib::GzipReader.wrap(StringIO.new(res.content)) { |gz| gz.read }
  else
    body = res.content
  end
  body.split('&').inject({}) { |r, e|
    key, value = e.split('=', 2)
    r[unescape(key)] = unescape(value)
    r
  }
end
get_request_token(uri, callback = nil, param = nil) click to toggle source

Get request token.

uri

URI for request token.

callback

callback String. This can be nil for OAuth 1.0a

param

Additional query parameter Hash.

It returns a HTTP::Message instance as a response. When the request is made successfully, you can retrieve a pair of request token and secret like following;

res = client.get_request_token(...)
token = res.oauth_params['oauth_token']
secret = res.oauth_params['oauth_token_secret']
# File lib/oauthclient.rb, line 50
def get_request_token(uri, callback = nil, param = nil)
  oauth_config.token = nil
  oauth_config.secret = nil
  oauth_config.callback = callback
  oauth_config.verifier = nil
  res = request(oauth_config.http_method, uri, param)
  filter_response(res)
  res
end

Private Instance Methods

filter_response(res) click to toggle source
# File lib/oauthclient.rb, line 103
def filter_response(res)
  if res.status == 200
    if res.oauth_params = get_oauth_response(res)
      oauth_config.token = res.oauth_params['oauth_token']
      oauth_config.secret = res.oauth_params['oauth_token_secret']
    end
  end
end
unescape(escaped) click to toggle source
# File lib/oauthclient.rb, line 99
def unescape(escaped)
  escaped ? ::HTTP::Message.unescape(escaped) : nil
end