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