kaesen 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile.lock +14 -1
- data/README.md +1 -0
- data/kaesen.gemspec +2 -0
- data/lib/kaesen.rb +1 -0
- data/lib/kaesen/bitbank.rb +160 -0
- data/lib/kaesen/version.rb +1 -1
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cc764e2f30b28746ed6f8f8cf9ca8bf85eb42a7
|
4
|
+
data.tar.gz: 008a870e5dd22839c0698c8bd452f0d2dc9965b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fa1a80a992b0005a4387c5f461e0aec30dcb7f7abfc2441356f5dac223d891370ef280a18cf64be24da7313679e4fc3fe5cbb76f2838ba0b13ba36d3f1290c2
|
7
|
+
data.tar.gz: 6aecba2067265bd22cf899c93f72608077a70d51153d00f17e3314a2d013d059e965aa841ca8b588a455faf11b843d1737c38075acf46d0c9f0e85014ff65a1e
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kaesen (0.2.
|
4
|
+
kaesen (0.2.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
byebug (9.0.6)
|
10
|
+
coderay (1.1.1)
|
9
11
|
diff-lcs (1.3)
|
10
12
|
dotenv (2.2.0)
|
13
|
+
method_source (0.8.2)
|
14
|
+
pry (0.10.4)
|
15
|
+
coderay (~> 1.1.0)
|
16
|
+
method_source (~> 0.8.1)
|
17
|
+
slop (~> 3.4)
|
18
|
+
pry-byebug (3.4.2)
|
19
|
+
byebug (~> 9.0)
|
20
|
+
pry (~> 0.10)
|
11
21
|
rake (10.5.0)
|
12
22
|
rspec (3.5.0)
|
13
23
|
rspec-core (~> 3.5.0)
|
@@ -22,6 +32,7 @@ GEM
|
|
22
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
23
33
|
rspec-support (~> 3.5.0)
|
24
34
|
rspec-support (3.5.0)
|
35
|
+
slop (3.6.0)
|
25
36
|
|
26
37
|
PLATFORMS
|
27
38
|
ruby
|
@@ -30,6 +41,8 @@ DEPENDENCIES
|
|
30
41
|
bundler (~> 1.11)
|
31
42
|
dotenv
|
32
43
|
kaesen!
|
44
|
+
pry
|
45
|
+
pry-byebug
|
33
46
|
rake (~> 10.0)
|
34
47
|
rspec (~> 3.0)
|
35
48
|
|
data/README.md
CHANGED
data/kaesen.gemspec
CHANGED
@@ -31,4 +31,6 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency "rake", "~> 10.0"
|
32
32
|
spec.add_development_dependency "rspec", "~> 3.0"
|
33
33
|
spec.add_development_dependency "dotenv"
|
34
|
+
spec.add_development_dependency "pry"
|
35
|
+
spec.add_development_dependency "pry-byebug"
|
34
36
|
end
|
data/lib/kaesen.rb
CHANGED
@@ -0,0 +1,160 @@
|
|
1
|
+
require_relative 'market.rb'
|
2
|
+
require 'net/http'
|
3
|
+
require 'openssl'
|
4
|
+
require 'json'
|
5
|
+
require 'bigdecimal'
|
6
|
+
|
7
|
+
module Kaesen
|
8
|
+
# Bitbank Wrapper Class
|
9
|
+
# https://docs.bitbank.cc/
|
10
|
+
|
11
|
+
class Bitbank < Market
|
12
|
+
@@nonce = 0
|
13
|
+
|
14
|
+
def initialize(options = {})
|
15
|
+
super()
|
16
|
+
@name = "Bitbank"
|
17
|
+
@api_key = ENV["BITBANK_KEY"]
|
18
|
+
@api_secret = ENV["BITBANK_SECRET"]
|
19
|
+
@url_public = "https://public.bitbank.cc"
|
20
|
+
@url_private = "https://api.bitbank.cc/v1"
|
21
|
+
|
22
|
+
options.each do |key, value|
|
23
|
+
instance_variable_set("@#{key}", value)
|
24
|
+
end
|
25
|
+
yield(self) if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
#############################################################
|
29
|
+
# API for public information
|
30
|
+
#############################################################
|
31
|
+
|
32
|
+
# Get ticker information.
|
33
|
+
# @return [hash] ticker
|
34
|
+
# ask: [BigDecimal] 最良売気配値
|
35
|
+
# bid: [BigDecimal] 最良買気配値
|
36
|
+
# last: [BigDecimal] 最近値(?用語要チェック), last price
|
37
|
+
# high: [BigDecimal] 高値
|
38
|
+
# low: [BigDecimal] 安値
|
39
|
+
# volume: [BigDecimal] 取引量
|
40
|
+
# timestamp: [int] タイムスタンプ
|
41
|
+
# ltimestamp: [int] ローカルタイムスタンプ
|
42
|
+
def ticker
|
43
|
+
h = get_ssl(@url_public + "/btc_jpy/ticker")
|
44
|
+
h = h["data"]
|
45
|
+
{
|
46
|
+
"ask" => BigDecimal.new(h["sell"][0]),
|
47
|
+
"bid" => BigDecimal.new(h["buy"][0]),
|
48
|
+
"last" => BigDecimal.new(h["last"][0]),
|
49
|
+
"high" => BigDecimal.new(h["high"][1]), # of the previous 24 hours
|
50
|
+
"low" => BigDecimal.new(h["low"][1]), # of the previous 24 hours
|
51
|
+
"volume" => BigDecimal.new(h["vol"][1]), # of the previous 24 hours
|
52
|
+
"ltimestamp" => Time.now.to_i,
|
53
|
+
"timestamp" => h["timestamp"],
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
# Get order book.
|
58
|
+
# @abstract
|
59
|
+
# @return [hash] array of market depth
|
60
|
+
# asks: [Array] 売りオーダー
|
61
|
+
# price : [BigDecimal]
|
62
|
+
# size : [BigDecimal]
|
63
|
+
# bids: [Array] 買いオーダー
|
64
|
+
# price : [BigDecimal]
|
65
|
+
# size : [BigDecimal]
|
66
|
+
# ltimestamp: [int] ローカルタイムスタンプ
|
67
|
+
def depth
|
68
|
+
h = get_ssl(@url_public + "/btc_jpy/depth")
|
69
|
+
h = h["data"]
|
70
|
+
{
|
71
|
+
"asks" => h["asks"].map{|a,b| [BigDecimal.new(a.to_s), BigDecimal.new(b.to_s)]}, # to_s でないと誤差が生じる
|
72
|
+
"bids" => h["bids"].map{|a,b| [BigDecimal.new(a.to_s), BigDecimal.new(b.to_s)]}, # to_s でないと誤差が生じる
|
73
|
+
"ltimestamp" => Time.now.to_i,
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def initialize_https(uri)
|
80
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
81
|
+
https.use_ssl = true
|
82
|
+
https.open_timeout = 5
|
83
|
+
https.read_timeout = 15
|
84
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
85
|
+
https.verify_depth = 5
|
86
|
+
https
|
87
|
+
end
|
88
|
+
|
89
|
+
# Connect to address via https, and return json response.
|
90
|
+
def get_ssl(address)
|
91
|
+
uri = URI.parse(address)
|
92
|
+
|
93
|
+
begin
|
94
|
+
https = initialize_https(uri)
|
95
|
+
https.start {|w|
|
96
|
+
response = w.get(uri.request_uri)
|
97
|
+
case response
|
98
|
+
when Net::HTTPSuccess
|
99
|
+
json = JSON.parse(response.body)
|
100
|
+
raise JSONException, response.body if json == nil
|
101
|
+
return json
|
102
|
+
else
|
103
|
+
raise ConnectionFailedException, "Failed to connect to #{@name}."
|
104
|
+
end
|
105
|
+
}
|
106
|
+
rescue
|
107
|
+
raise
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def get_nonce
|
112
|
+
pre_nonce = @@nonce
|
113
|
+
next_nonce = (Time.now.to_i) * 100
|
114
|
+
|
115
|
+
if next_nonce <= pre_nonce
|
116
|
+
@@nonce = pre_nonce + 1
|
117
|
+
else
|
118
|
+
@@nonce = next_nonce
|
119
|
+
end
|
120
|
+
|
121
|
+
return @@nonce
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_sign(req)
|
125
|
+
secret = @api_secret
|
126
|
+
text = req.body
|
127
|
+
|
128
|
+
OpenSSL::HMAC::hexdigest(OpenSSL::Digest.new('sha512'), secret, text)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Connect to address via https, and return json response.
|
132
|
+
def post_ssl(address, data={})
|
133
|
+
uri = URI.parse(address)
|
134
|
+
data["nonce"] = get_nonce
|
135
|
+
|
136
|
+
begin
|
137
|
+
req = Net::HTTP::Post.new(uri)
|
138
|
+
req.set_form_data(data)
|
139
|
+
req["Key"] = @api_key
|
140
|
+
req["Sign"] = get_sign(req)
|
141
|
+
|
142
|
+
https = initialize_https(uri)
|
143
|
+
https.start {|w|
|
144
|
+
response = w.request(req)
|
145
|
+
case response
|
146
|
+
when Net::HTTPSuccess
|
147
|
+
json = JSON.parse(response.body)
|
148
|
+
raise JSONException, response.body if json == nil
|
149
|
+
return json
|
150
|
+
else
|
151
|
+
raise ConnectionFailedException, "Failed to connect to #{@name}: " + response.value
|
152
|
+
end
|
153
|
+
}
|
154
|
+
rescue
|
155
|
+
raise
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
end
|
data/lib/kaesen/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kaesen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- him0
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry-byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description: This is a module that exchanging Japanese yen and Bitcoin and collecting
|
70
98
|
market information.
|
71
99
|
email:
|
@@ -89,6 +117,7 @@ files:
|
|
89
117
|
- bin/setup
|
90
118
|
- kaesen.gemspec
|
91
119
|
- lib/kaesen.rb
|
120
|
+
- lib/kaesen/bitbank.rb
|
92
121
|
- lib/kaesen/bitflyer.rb
|
93
122
|
- lib/kaesen/bitflyerfx.rb
|
94
123
|
- lib/kaesen/btcbox.rb
|