btce 0.1.11 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/btce.rb +57 -43
- metadata +2 -2
data/lib/btce.rb
CHANGED
@@ -75,30 +75,29 @@ module Btce
|
|
75
75
|
"ppc_btc" => 4,
|
76
76
|
"ftc_btc" => 4
|
77
77
|
}
|
78
|
-
KEY = YAML::load File.open 'btce-api-key.yml'
|
79
78
|
|
80
79
|
class << self
|
81
|
-
def get_https(
|
82
|
-
raise ArgumentError if not url.is_a? String
|
83
|
-
uri = URI.parse url
|
80
|
+
def get_https(opts={})
|
81
|
+
raise ArgumentError if not opts[:url].is_a? String
|
82
|
+
uri = URI.parse opts[:url]
|
84
83
|
http = Net::HTTP.new uri.host, uri.port
|
85
84
|
http.use_ssl = true
|
86
85
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
87
|
-
if params.nil?
|
86
|
+
if opts[:params].nil?
|
88
87
|
request = Net::HTTP::Get.new uri.request_uri
|
89
88
|
else
|
90
89
|
# If sending params, then we want a post request for authentication.
|
91
90
|
request = Net::HTTP::Post.new uri.request_uri
|
92
|
-
request.add_field "Key",
|
93
|
-
request.add_field "Sign",
|
94
|
-
request.set_form_data params
|
91
|
+
request.add_field "Key", opts[:key]
|
92
|
+
request.add_field "Sign", opts[:signed]
|
93
|
+
request.set_form_data opts[:params]
|
95
94
|
end
|
96
95
|
response = http.request request
|
97
96
|
response.body
|
98
97
|
end
|
99
98
|
|
100
|
-
def get_json(
|
101
|
-
result = get_https(
|
99
|
+
def get_json(opts={})
|
100
|
+
result = get_https(opts)
|
102
101
|
if not result.is_a? String or not result.valid_json?
|
103
102
|
raise RuntimeError, "Server returned invalid data."
|
104
103
|
end
|
@@ -111,11 +110,10 @@ module Btce
|
|
111
110
|
OPERATIONS = %w(fee ticker trades depth)
|
112
111
|
|
113
112
|
class << self
|
114
|
-
|
115
113
|
def get_pair_operation_json(pair, operation)
|
116
114
|
raise ArgumentError if not API::CURRENCY_PAIRS.include? pair
|
117
115
|
raise ArgumentError if not OPERATIONS.include? operation
|
118
|
-
get_json "https://#{API::BTCE_DOMAIN}/api/2/#{pair}/#{operation}"
|
116
|
+
get_json({ :url => "https://#{API::BTCE_DOMAIN}/api/2/#{pair}/#{operation}" })
|
119
117
|
end
|
120
118
|
|
121
119
|
OPERATIONS.each do |operation|
|
@@ -239,6 +237,16 @@ module Btce
|
|
239
237
|
end
|
240
238
|
|
241
239
|
class TradeAPI < API
|
240
|
+
if File.exists? 'btce-api-key.yml'
|
241
|
+
KEY = YAML::load File.open 'btce-api-key.yml'
|
242
|
+
|
243
|
+
class << self
|
244
|
+
def new_from_keyfile
|
245
|
+
new key: KEY["key"], secret: KEY["secret"]
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
242
250
|
OPERATIONS = %w(getInfo
|
243
251
|
TransHistory
|
244
252
|
TradeHistory
|
@@ -246,43 +254,49 @@ module Btce
|
|
246
254
|
Trade
|
247
255
|
CancelOrder)
|
248
256
|
|
249
|
-
class << self
|
250
|
-
def sign(params)
|
251
|
-
# The digest needs to be created.
|
252
|
-
hmac = OpenSSL::HMAC.new(API::KEY['secret'],
|
253
|
-
OpenSSL::Digest::SHA512.new)
|
254
|
-
params = params
|
255
|
-
.collect {|k,v| "#{k}=#{v}"}
|
256
|
-
.join('&')
|
257
|
-
signed = hmac.update params
|
258
|
-
end
|
259
257
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
end
|
266
|
-
end
|
267
|
-
signed = sign params
|
268
|
-
get_json "https://#{API::BTCE_DOMAIN}/tapi", params, signed
|
269
|
-
end
|
258
|
+
def initialize(opts={})
|
259
|
+
raise ArgumentError unless opts.has_key?(:key) and opts.has_key?(:secret)
|
260
|
+
@key = opts[:key]
|
261
|
+
@secret = opts[:secret]
|
262
|
+
end
|
270
263
|
|
271
|
-
|
272
|
-
|
273
|
-
|
264
|
+
def sign(params)
|
265
|
+
# The digest needs to be created.
|
266
|
+
hmac = OpenSSL::HMAC.new(@secret,
|
267
|
+
OpenSSL::Digest::SHA512.new)
|
268
|
+
params = params.collect {|k,v| "#{k}=#{v}"}.join('&')
|
269
|
+
signed = hmac.update params
|
270
|
+
end
|
271
|
+
|
272
|
+
def trade_api_call(method, extra)
|
273
|
+
params = {"method" => method, "nonce" => nonce}
|
274
|
+
if ! extra.empty?
|
275
|
+
extra.each do |k,v|
|
276
|
+
params[k.to_s] = v
|
274
277
|
end
|
275
|
-
return @last_nonce = result
|
276
278
|
end
|
277
|
-
|
279
|
+
signed = sign params
|
280
|
+
API::get_json({ :url => "https://#{API::BTCE_DOMAIN}/tapi",
|
281
|
+
:key => @key,
|
282
|
+
:params => params,
|
283
|
+
:signed => signed })
|
284
|
+
end
|
278
285
|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
trade_api_call "#{operation}", extra
|
283
|
-
end
|
284
|
-
}
|
286
|
+
def nonce
|
287
|
+
while result = Time.now.to_i and @last_nonce and @last_nonce >= result
|
288
|
+
sleep 1
|
285
289
|
end
|
290
|
+
return @last_nonce = result
|
291
|
+
end
|
292
|
+
private :nonce
|
293
|
+
|
294
|
+
OPERATIONS.each do |operation|
|
295
|
+
class_eval %{
|
296
|
+
def #{operation.camelcase_to_snakecase} extra={}
|
297
|
+
trade_api_call "#{operation}", extra
|
298
|
+
end
|
299
|
+
}
|
286
300
|
end
|
287
301
|
end
|
288
302
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: btce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-11-
|
15
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: monkey-patch
|