bter-ruby 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/README.md +13 -19
- data/lib/bter/public.rb +37 -33
- data/lib/bter/request.rb +38 -0
- data/lib/bter/trading.rb +27 -58
- data/lib/bter.rb +2 -2
- metadata +18 -38
- data/lib/bter/request_logger.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e450fe92759644777b68b408c8233222342c3368
|
4
|
+
data.tar.gz: 06be7c0ea828bfe0c72d24147b3510befffdc9a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 950566bd7ab675f5ac58747e17cfc573de427e50ccd41f223dd4c14bff749579ec55efe0c08bb0f63714b9168242d708c5528e4fcb0832118b8d2d7f37d2d89b
|
7
|
+
data.tar.gz: 711817483e659b969d5d9641202b09e127c5aca1f4effedff60e67f6643c2e64d2ce4e97addec9d88b7c0f1e2cb102a9b8f8db824b2c07647cb750109a22d4a2
|
data/README.md
CHANGED
@@ -10,16 +10,21 @@ require 'bter'
|
|
10
10
|
```
|
11
11
|
The library has two parts , one for the public api and one for the trading one.
|
12
12
|
|
13
|
-
The public api has
|
14
|
-
and current trades for a given pair(check bter for the available pairs)
|
13
|
+
The public api has the following methods
|
15
14
|
|
16
15
|
```ruby
|
17
16
|
bt = Bter::Public.new
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
bt.pairs
|
18
|
+
bt.tickers
|
19
|
+
bt.ticker("btc_cny")
|
20
|
+
bt.depth("btc_cny")
|
21
|
+
bt.info
|
22
|
+
bt.details
|
23
|
+
bt.trades("btc_cny", tid) # alias .history
|
22
24
|
```
|
25
|
+
tid parameter is optional on trades method and if omitted will return the most recent 80 trade history records.
|
26
|
+
|
27
|
+
|
23
28
|
To use the trading api , you need to supply your key and secret
|
24
29
|
```ruby
|
25
30
|
bt = Bter::Trade.new
|
@@ -31,24 +36,13 @@ Then you can use the available methods:
|
|
31
36
|
```ruby
|
32
37
|
bt.get_info
|
33
38
|
bt.active_orders
|
39
|
+
bt.my_trades(pair)
|
34
40
|
bt.order_status(order_id)
|
35
41
|
bt.cancel_order(order_id)
|
36
42
|
bt.buy(pair, amount, rate)
|
37
43
|
bt.sell(pair, amount, rate)
|
38
44
|
```
|
39
|
-
|
40
|
-
rate parameter is optional on buy and sell methods.
|
41
|
-
|
42
|
-
|
43
|
-
You can enable the logger for public and trading requests.
|
44
|
-
It logs successful or failed requests and response info.(off by default)
|
45
|
-
```ruby
|
46
|
-
bt = Bter::Public.new
|
47
|
-
bt.logging :on
|
48
|
-
|
49
|
-
bt2 = Bter::Trade.new
|
50
|
-
bt2.logging :on
|
51
|
-
```
|
45
|
+
rate parameter is optional on buy and sell methods and if omitted the current rate will be used.
|
52
46
|
|
53
47
|
|
54
48
|
Also check the two examples in the examples folder.
|
data/lib/bter/public.rb
CHANGED
@@ -1,45 +1,49 @@
|
|
1
|
+
require_relative 'request.rb'
|
2
|
+
|
1
3
|
module Bter
|
2
4
|
class Public
|
3
|
-
|
4
|
-
def
|
5
|
-
|
5
|
+
include Request
|
6
|
+
def pairs
|
7
|
+
query = public_request("pairs")
|
8
|
+
JSON.parse(query, {:symbolize_names => true})
|
6
9
|
end
|
7
|
-
|
8
|
-
def logging(p)
|
9
|
-
if p == :on
|
10
|
-
@logging = true
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def public_request(method, pair)
|
15
|
-
request = Typhoeus::Request.new("https://data.bter.com/api/1/#{method}/#{pair}")
|
16
|
-
if @logging
|
17
|
-
RequestLogger.error_log(request)
|
18
|
-
end
|
19
|
-
hydra = Typhoeus::Hydra.hydra
|
20
|
-
hydra.queue(request)
|
21
|
-
hydra.run
|
22
|
-
response = request.response
|
23
|
-
if @logging
|
24
|
-
RequestLogger.info_log(response.code, response.total_time, response.headers_hash)
|
25
|
-
end
|
26
|
-
response.body
|
27
|
-
end
|
28
|
-
|
10
|
+
|
29
11
|
def ticker(pair)
|
30
|
-
query = public_request
|
31
|
-
|
12
|
+
query = public_request("ticker", pair)
|
13
|
+
JSON.parse(query, {:symbolize_names => true})
|
14
|
+
end
|
15
|
+
|
16
|
+
def tickers
|
17
|
+
query = public_request("tickers")
|
18
|
+
JSON.parse(query, {:symbolize_names => true})
|
32
19
|
end
|
33
20
|
|
34
21
|
def depth(pair)
|
35
|
-
query = public_request
|
36
|
-
|
22
|
+
query = public_request("depth", pair)
|
23
|
+
JSON.parse(query, {:symbolize_names => true})
|
37
24
|
end
|
38
|
-
|
39
|
-
def
|
40
|
-
query = public_request
|
41
|
-
|
25
|
+
|
26
|
+
def info
|
27
|
+
query = public_request("marketinfo")
|
28
|
+
JSON.parse(query, {:symbolize_names => true})
|
29
|
+
end
|
30
|
+
|
31
|
+
def details
|
32
|
+
query = public_request("markelist")
|
33
|
+
JSON.parse(query, {:symbolize_names => true})
|
34
|
+
end
|
35
|
+
|
36
|
+
def trades(pair, tid='')
|
37
|
+
query = public_request("trade", pair + "/#{tid}")
|
38
|
+
JSON.parse(query, {:symbolize_names => true})
|
39
|
+
end
|
40
|
+
|
41
|
+
def logging(log)
|
42
|
+
raise "Logger is no longer available , please remove it"
|
42
43
|
end
|
43
44
|
|
45
|
+
alias_method :market_info, :info
|
46
|
+
alias_method :marke_list, :details
|
47
|
+
alias_method :history, :trades
|
44
48
|
end
|
45
49
|
end
|
data/lib/bter/request.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Bter
|
2
|
+
module Request
|
3
|
+
extend self
|
4
|
+
PUBLIC_URL = 'https://data.bter.com/api/1'
|
5
|
+
TRADE_URL = 'https://bter.com/api/1/private'
|
6
|
+
|
7
|
+
def public_request(method, pair='')
|
8
|
+
HTTParty.get("#{PUBLIC_URL}/#{method}/#{pair}").body
|
9
|
+
end
|
10
|
+
|
11
|
+
def trade_request(method, params=nil)
|
12
|
+
if params.nil?
|
13
|
+
@params = {:method => method}
|
14
|
+
else
|
15
|
+
@params = {:method => method}
|
16
|
+
params.each do |param|
|
17
|
+
@params.merge!(param)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
HTTParty.post(
|
21
|
+
"#{TRADE_URL}/#{method}",
|
22
|
+
:body => @params,
|
23
|
+
:headers => {
|
24
|
+
'KEY' => @key,
|
25
|
+
'Sign' => sign,
|
26
|
+
"Content-type" => "application/x-www-form-urlencoded",
|
27
|
+
"Accept" => "application/x-www-form-urlencoded"
|
28
|
+
}
|
29
|
+
).body
|
30
|
+
end
|
31
|
+
|
32
|
+
def sign
|
33
|
+
hmac = OpenSSL::HMAC.new(@secret,OpenSSL::Digest::SHA512.new)
|
34
|
+
@params = @params.collect {|k,v| "#{k}=#{v}"}.join('&')
|
35
|
+
hmac.update(@params).to_s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/bter/trading.rb
CHANGED
@@ -1,68 +1,21 @@
|
|
1
|
+
require_relative 'request.rb'
|
1
2
|
|
2
3
|
module Bter
|
3
4
|
class Trade
|
5
|
+
include Request
|
4
6
|
|
5
7
|
attr_accessor :key, :secret
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@logging = false
|
9
|
-
end
|
10
|
-
|
11
|
-
def logging(p)
|
12
|
-
if p == :on
|
13
|
-
@logging = true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def trade_request(method, params=nil)
|
18
|
-
if params.nil?
|
19
|
-
@params = {:method => method}
|
20
|
-
else
|
21
|
-
@params = {:method => method}
|
22
|
-
params.each do |param|
|
23
|
-
@params.merge!(param)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
request = Typhoeus::Request.new(
|
27
|
-
"https://bter.com/api/1/private/#{method}",
|
28
|
-
method: :post,
|
29
|
-
body: @params,
|
30
|
-
headers: { Key: @key, Sign: sign }
|
31
|
-
)
|
32
|
-
if @logging
|
33
|
-
RequestLogger.error_log(request)
|
34
|
-
end
|
35
|
-
hydra = Typhoeus::Hydra.hydra
|
36
|
-
hydra.queue(request)
|
37
|
-
hydra.run
|
38
|
-
response = request.response
|
39
|
-
if @logging
|
40
|
-
RequestLogger.info_log(response.code, response.total_time, response.headers_hash)
|
41
|
-
end
|
42
|
-
response.body
|
43
|
-
end
|
44
|
-
|
45
|
-
def sign
|
46
|
-
hmac = OpenSSL::HMAC.new(@secret,OpenSSL::Digest::SHA512.new)
|
47
|
-
@params = @params.collect {|k,v| "#{k}=#{v}"}.join('&')
|
48
|
-
signed = hmac.update @params
|
49
|
-
end
|
50
8
|
|
51
9
|
def get_info
|
52
|
-
query = trade_request
|
53
|
-
|
10
|
+
query = trade_request("getfunds")
|
11
|
+
JSON.parse(query, {:symbolize_names => true})
|
54
12
|
end
|
55
13
|
|
56
14
|
def active_orders
|
57
|
-
query = trade_request
|
58
|
-
|
15
|
+
query = trade_request("orderlist")
|
16
|
+
JSON.parse(query, {:symbolize_names => true})
|
59
17
|
end
|
60
18
|
|
61
|
-
def trade(*params)
|
62
|
-
query = trade_request "placeorder", params
|
63
|
-
info = JSON.parse query, {:symbolize_names => true}
|
64
|
-
end
|
65
|
-
|
66
19
|
#abstract the trade to buy and sell
|
67
20
|
def buy(pair, amount, rate=nil)
|
68
21
|
rate ||= get_rate(pair)
|
@@ -75,17 +28,33 @@ module Bter
|
|
75
28
|
end
|
76
29
|
|
77
30
|
def order_status(order_id)
|
78
|
-
query = trade_request
|
79
|
-
|
31
|
+
query = trade_request("getorder", [{:order_id => order_id}])
|
32
|
+
JSON.parse(query, {:symbolize_names => true})
|
80
33
|
end
|
81
34
|
|
82
35
|
def cancel_order(order_id)
|
83
|
-
query = trade_request
|
84
|
-
|
36
|
+
query = trade_request("cancelorder", [{:order_id => order_id}])
|
37
|
+
JSON.parse(query, {:symbolize_names => true})
|
38
|
+
end
|
39
|
+
|
40
|
+
def my_trades(pair)
|
41
|
+
query = trade_request("mytrades", [{:pair => pair}])
|
42
|
+
JSON.parse(query, {:symbolize_names => true})
|
85
43
|
end
|
86
44
|
|
45
|
+
#soon to be removed
|
46
|
+
def logging(log)
|
47
|
+
raise "Logger is no longer available , please remove it"
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def trade(*params)
|
52
|
+
query = trade_request("placeorder", params)
|
53
|
+
JSON.parse(query, {:symbolize_names => true})
|
54
|
+
end
|
55
|
+
|
87
56
|
def get_rate(pair)
|
88
|
-
Public.new.ticker(pair).values_at(:last).flatten
|
57
|
+
Public.new.ticker(pair).values_at(:last).flatten.first
|
89
58
|
end
|
90
59
|
|
91
60
|
end
|
data/lib/bter.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'json'
|
3
|
-
require '
|
3
|
+
require 'httparty'
|
4
4
|
require 'openssl'
|
5
5
|
|
6
6
|
require_relative 'bter/public.rb'
|
7
7
|
require_relative 'bter/trading.rb'
|
8
|
-
require_relative 'bter/
|
8
|
+
require_relative 'bter/request.rb'
|
9
9
|
|
10
10
|
module Bter
|
11
11
|
|
metadata
CHANGED
@@ -1,75 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bter-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zisis Maras
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.8'
|
20
|
-
- -
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.8.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ~>
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.8'
|
30
|
-
- -
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.8.1
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: httparty
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - ~>
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0.
|
40
|
-
- -
|
39
|
+
version: '0.13'
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.
|
42
|
+
version: 0.13.1
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - ~>
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '0.
|
50
|
-
- -
|
49
|
+
version: '0.13'
|
50
|
+
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 0.
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: logger
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - ~>
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.2'
|
60
|
-
- - '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 1.2.8
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '1.2'
|
70
|
-
- - '>='
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 1.2.8
|
52
|
+
version: 0.13.1
|
73
53
|
description: Ruby api for the bter.com cryptocurrency exchange
|
74
54
|
email: zisismaras@gmail.com
|
75
55
|
executables: []
|
@@ -81,7 +61,7 @@ files:
|
|
81
61
|
- README.md
|
82
62
|
- lib/bter.rb
|
83
63
|
- lib/bter/public.rb
|
84
|
-
- lib/bter/
|
64
|
+
- lib/bter/request.rb
|
85
65
|
- lib/bter/trading.rb
|
86
66
|
homepage: https://github.com/zisismaras/bter-ruby
|
87
67
|
licenses:
|
@@ -93,12 +73,12 @@ require_paths:
|
|
93
73
|
- lib
|
94
74
|
required_ruby_version: !ruby/object:Gem::Requirement
|
95
75
|
requirements:
|
96
|
-
- -
|
76
|
+
- - ">="
|
97
77
|
- !ruby/object:Gem::Version
|
98
78
|
version: '0'
|
99
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
80
|
requirements:
|
101
|
-
- -
|
81
|
+
- - ">="
|
102
82
|
- !ruby/object:Gem::Version
|
103
83
|
version: '0'
|
104
84
|
requirements: []
|
data/lib/bter/request_logger.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'logger'
|
2
|
-
|
3
|
-
module Bter
|
4
|
-
module RequestLogger
|
5
|
-
extend self
|
6
|
-
|
7
|
-
def error_log(request)
|
8
|
-
logger = Logger.new('logfile.log')
|
9
|
-
logger.level = Logger::INFO
|
10
|
-
|
11
|
-
request.on_complete do |response|
|
12
|
-
if response.success?
|
13
|
-
logger.info("Success")
|
14
|
-
true
|
15
|
-
elsif response.timed_out?
|
16
|
-
logger.error("Got a time out")
|
17
|
-
false
|
18
|
-
elsif response.code == 0
|
19
|
-
logger.error(response.return_message)
|
20
|
-
false
|
21
|
-
else
|
22
|
-
logger.error("HTTP request failed: " + response.code.to_s)
|
23
|
-
false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def info_log(code, total_time, header_hash)
|
29
|
-
logger = Logger.new('logfile.log')
|
30
|
-
logger.level = Logger::INFO
|
31
|
-
logger.info("response code : #{code}")
|
32
|
-
logger.info("Total_time: #{total_time}")
|
33
|
-
logger.info("Header_hash: #{header_hash}")
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|