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 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