class CampBX::API

Public Class Methods

new( username=nil, password=nil ) click to toggle source
# File lib/rbtc_arbitrage/campbx.rb, line 41
def initialize( username=nil, password=nil )
  @username = username
  @password = password

  # Build meta-methods for each API call
  CALLS.each do |name|
    define_singleton_method name[0], lambda { |*args|
      data = CALLS[name[0]]
      api_request( [data[0], data[1]], Hash[data[2].zip( args )] )
    }
  end
end

Public Instance Methods

api_request( info, post_data={} ) click to toggle source
# File lib/rbtc_arbitrage/campbx.rb, line 54
def api_request( info, post_data={} )
  url, auth = info
  uri = URI.parse(API_BASE + url + '.php')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl=TRUE
  # CampBX advises latency can be >4 minutes when markets are volatile
  http.read_timeout = 300
  res = nil

  request = Net::HTTP::Get.new(uri.request_uri)
  if auth then
    post_data.merge!({
      'user' => @username,
      'pass' => @password,
    })
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data( post_data )
  end

  make_request(http, request)
end
make_request(http, request) click to toggle source
# File lib/rbtc_arbitrage/campbx.rb, line 76
def make_request http, request
  # CampBX API: max 1 request per 500ms
  delta = Time.now - @@last
  #puts delta*1000
  if delta*1000 <= 500 then
    #puts "sleeping! for #{0.5 - delta}"
    sleep(0.5 - delta)
  end

  res = http.request(request)
  @@last = Time.now # Update time after request returns

  if res.message == 'OK' then # HTTP OK
    JSON.parse( res.body )
  else # HTTP ERROR
    warn "HTTP Error: + #{res.code}"
  end
end