kaesen 0.2.0 → 0.2.1
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/.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
|