class Audiosearch::Client

Attributes

agent[RW]
api_endpoint[RW]
cookies[RW]
croak_on_404[RW]
debug[RW]
host[RW]
user_agent[RW]

Public Class Methods

new(args) click to toggle source
# File lib/audiosearch.rb, line 52
def initialize(args)
  #puts args.inspect
  @un                  = args[:username]
  @pw                  = args[:password]
  @oauth_id            = args[:id]
  @oauth_secret        = args[:secret]
  @oauth_redir_uri     = args[:redir_uri] || 'urn:ietf:wg:oauth:2.0:oob'
  @host                = args[:host] || 'https://www.audiosear.ch'
  @debug               = args[:debug]
  @user_agent          = args[:user_agent] || 'audiosearch-ruby-client/'+version()
  @api_endpoint        = args[:api_endpoint] || '/api'
  @croak_on_404        = args[:croak_on_404] || false

  # normalize host
  @host.gsub!(/\/$/, '')

  # sanity check
  begin
    uri = URI.parse(@host)
  rescue URI::InvalidURIError => err
    raise "Bad :host value " + err
  end
  if (!uri.host || !uri.port)
    raise "Bad :host value " + @server
  end

  @agent = get_agent()

end

Public Instance Methods

get(path, params={}) click to toggle source
# File lib/audiosearch.rb, line 139
def get(path, params={})
  url = path.match(/^https?:/) ? path : @api_endpoint + path
  resp = @agent.get url, params
  @debug and pp(resp)
  return Audiosearch::Response.new resp
end
get_agent() click to toggle source
# File lib/audiosearch.rb, line 109
def get_agent()
  uri = @host + @api_endpoint
  opts = {
    :url => uri,
    :ssl => {:verify => false},
    :headers => {
      'User-Agent'   => @user_agent,
      'Accept'       => 'application/json',
      'Cookie'       => @cookies
    }
  }
  @token = get_oauth_token
  #puts "token="
  #puts pp(@token)
  conn = Faraday.new(opts) do |faraday|
    faraday.request :url_encoded
    [:mashify, :json].each{|mw| faraday.response(mw) }
    if !@croak_on_404
      faraday.use Audiosearch::FaradayErrHandler
    else
      faraday.response(:raise_error)
    end
    faraday.request :authorization, 'Bearer', @token.token
    faraday.response :logger if @debug
    faraday.adapter  :excon   # IMPORTANT this is last
  end

  return conn
end
get_episode(ep_id) click to toggle source
# File lib/audiosearch.rb, line 151
def get_episode(ep_id)
  resp = get('/episodes/'+ep_id.to_s)
  return resp.http_resp.body
end
get_oauth_token(options={}) click to toggle source
# File lib/audiosearch.rb, line 82
def get_oauth_token(options={})
  oauth_options = {
    site:            @host + @api_endpoint,
    authorize_url:   @host + '/oauth/authorize',
    token_url:       @host + '/oauth/token',
    redirect_uri:    @oauth_redir_uri,
    connection_opts: options.merge( { :ssl => {:verify => false}, } )
  }

  # TODO

  client = OAuth2::Client.new(@oauth_id, @oauth_secret, oauth_options) do |faraday|
    faraday.request  :url_encoded
    faraday.response :logger if @debug
    faraday.adapter  :excon
  end

  token = nil
  if @un && @pw
    # TODO 3-legged oauth to @authorize_url
  else
    token = client.client_credentials.get_token()
  end

  return token
end
get_person(p_id) click to toggle source
# File lib/audiosearch.rb, line 173
def get_person(p_id)
  resp = get('/people/'+p_id.to_s)
  return resp.http_resp.body
end
get_show(id) click to toggle source
# File lib/audiosearch.rb, line 146
def get_show(id)
  resp = get('/shows/'+id.to_s)
  return resp.http_resp.body
end
get_tastemakers(params={}) click to toggle source
# File lib/audiosearch.rb, line 166
def get_tastemakers(params={})
  type = params.has_key?(:type) ? params[:type] : 'episodes'
  n = params.has_key?(:n) ? params[:n] : 10
  resp = get("/tastemakers/#{type}/#{n}")
  return resp.http_resp.body
end
version() click to toggle source
# File lib/audiosearch.rb, line 48
def version
  return "1.0.1"
end