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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7f9aa86f298cf72a2d118c742effd439ff35941
4
- data.tar.gz: ba42ec7cac482ac8fce8c68fbbc85ffc0fa3c4c4
3
+ metadata.gz: 1cc764e2f30b28746ed6f8f8cf9ca8bf85eb42a7
4
+ data.tar.gz: 008a870e5dd22839c0698c8bd452f0d2dc9965b9
5
5
  SHA512:
6
- metadata.gz: 7b885fe39f78e7ed96c3ec18d0de9c050d0a6e745b5e278415f9be0cc727b9fee135ca81fadb7f9aa76ec5f18748a61f25c7ef523e92c2ed47f86b566dbe662c
7
- data.tar.gz: 71c75281c824bc1a32927676dd96dec6104ba0120e31fb4422dbf828b0ba38d27ec89458174983557a018f97e28b7c783c271d73324df91c8a664b8f66529b03
6
+ metadata.gz: 3fa1a80a992b0005a4387c5f461e0aec30dcb7f7abfc2441356f5dac223d891370ef280a18cf64be24da7313679e4fc3fe5cbb76f2838ba0b13ba36d3f1290c2
7
+ data.tar.gz: 6aecba2067265bd22cf899c93f72608077a70d51153d00f17e3314a2d013d059e965aa841ca8b588a455faf11b843d1737c38075acf46d0c9f0e85014ff65a1e
data/.gitignore CHANGED
@@ -90,3 +90,5 @@ crashlytics-build.properties
90
90
  fabric.properties
91
91
 
92
92
  .idea/*
93
+
94
+ Gemfile.lock
@@ -1,13 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kaesen (0.2.0)
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
@@ -52,6 +52,7 @@ b = Kaesen::Bitflyer.new
52
52
 
53
53
  ### Currently supported exchange markets to get market information:
54
54
 
55
+ + bitbank
55
56
  + bitFlyer Lightning
56
57
  + bitFlyer FX
57
58
  + BtcBox
@@ -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
@@ -8,6 +8,7 @@ require "kaesen/monetago"
8
8
  require "kaesen/kraken"
9
9
  require "kaesen/quoine"
10
10
  require "kaesen/lakebtc"
11
+ require "kaesen/bitbank"
11
12
  require "kaesen/client"
12
13
 
13
14
  # A module of the united wrapper for exchanging Japanese yen and Bitcoin and
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Kaesen
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
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.0
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-02-26 00:00:00.000000000 Z
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