okcoin-ruby 0.0.2 → 0.0.3

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: f3a40254d50dbd3cceed2b4eb4e37e0dc105d595
4
- data.tar.gz: 99c7d16ea936763db7e4a81471de342f1f19a726
3
+ metadata.gz: 29b9ddcb048174c66dfe139614dad5cc16a579cd
4
+ data.tar.gz: d2f1dd779b0b1e8b8df576d922175e2a303a85ed
5
5
  SHA512:
6
- metadata.gz: 6ee3e7d4e30365e327fd601919bb4345172358e083667787a67086866d7657b638f5bf569f194e5fbfeb7b061807f7ce9ce1df0d49d662922eb334030dea0cac
7
- data.tar.gz: b1d7580c47604d113507c1178ff3183b889b054cfc3db3f9f49b1aedf71d6415cc20b0d01b688e5e45e8e10ad094a8eadea8b44eeb979e1fcedddc5ab67f519d
6
+ metadata.gz: ffc68b948ae4045634288d77331033b2d716a23962cff020e13f689ccb3a287738450b592f17ce65687719ac55cfaa1faf2615eca4ac314e2e147c318041c3c9
7
+ data.tar.gz: db614e11a9aade87684733d50e991152567d1b87fb63e788637f6fe31e12e434d0998c28376182c932543379852aeba6380bc1456bc1a04c0e68a633124af2af
data/README.md CHANGED
@@ -3,23 +3,33 @@ Supports REST and Websocket protocols
3
3
 
4
4
  ## Installation
5
5
 
6
- Add this line to your application's Gemfile:
6
+ Add these gems into your Gemfile:
7
7
 
8
8
  ```ruby
9
9
  gem 'okcoin-ruby'
10
+ gem 'celluloid-websocket-client', :github => 'ilyacherevkov/celluloid-websocket-client'
10
11
  ```
11
12
 
12
13
  And then execute:
13
14
 
14
- $ bundle
15
+ $ bundle install
15
16
 
16
- Or install it yourself as:
17
+ ## Usage
17
18
 
18
- $ gem install okcoin-ruby
19
+ ### 1. REST Example
20
+ ```
21
+ okcoin = Okcoin::Rest.new api_key: ENV['OKCOIN_APIKEY'], secret_key: ENV['OKCOIN_SECRET']
22
+ puts okcoin.user_info
23
+ ```
19
24
 
20
- ## Usage
25
+ ### 2. WebSocket Example
21
26
 
22
- Use it with REST and Websocket protocols
27
+ ```
28
+ okcoin = Okcoin::WS.new api_key: ENV['OKCOIN_APIKEY'], secret_key: ENV['OKCOIN_SECRET']
29
+ okcoin.userinfo
30
+ sleep 10
31
+ okcoin.close
32
+ ```
23
33
 
24
34
  ## Contributing
25
35
 
@@ -0,0 +1,4 @@
1
+ require 'curb'
2
+ require 'celluloid/websocket/client'
3
+ require 'okcoin/rest'
4
+ require 'okcoin/ws'
data/lib/okcoin/rest.rb CHANGED
@@ -1,5 +1,4 @@
1
- module Okcoin
2
- class Rest
1
+ class Okcoin::Rest
3
2
  BASE_URI = "https://www.okcoin.com/api"
4
3
  TIMEOUT = 0.5
5
4
 
@@ -116,6 +115,4 @@ module Okcoin
116
115
  query ? JSON.parse(Curl.get(BASE_URI + url, query).body_str) : JSON.parse(Curl.get(BASE_URI + url).body_str)
117
116
  end
118
117
  end
119
- end
120
-
121
118
  end
@@ -1,3 +1,3 @@
1
- module Okcoin
2
- VERSION = "0.0.2"
1
+ class Okcoin
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/okcoin/ws.rb ADDED
@@ -0,0 +1,74 @@
1
+ class Okcoin::WS
2
+ include Celluloid
3
+ BASE_URI = 'wss://real.okcoin.com:10440/websocket/okcoinapi'
4
+
5
+ def initialize(api_key: nil, secret_key: nil)
6
+ @driver = Celluloid::WebSocket::Client.new(BASE_URI, Celluloid::Actor.current)
7
+ @api_key = api_key
8
+ @secret_key = secret_key
9
+ end
10
+
11
+ public
12
+ # When WebSocket is opened, register callbacks
13
+ def on_open
14
+ puts "Websocket connection to #{BASE_URI} established succesfully"
15
+ end
16
+
17
+ # When raw WebSocket message is received
18
+ def on_message(msg)
19
+ puts "Message received: #{msg}"
20
+ end
21
+
22
+ # When WebSocket is closed
23
+ def on_close(code, reason)
24
+ puts "WebSocket connection closed: #{code.inspect}, #{reason.inspect}"
25
+ @driver.terminate
26
+ terminate
27
+ end
28
+
29
+ # close WebSocket connection
30
+ def close
31
+ @driver.close
32
+ end
33
+
34
+ def pingpong
35
+ every(5){ @driver.text "{'event':'ping'}" }
36
+ end
37
+
38
+ def userinfo
39
+ post_data = initial_post_data
40
+ emit(event: 'addChannel', channel: 'ok_spotusd_userinfo', post_data: post_data)
41
+ end
42
+
43
+ def futures_userinfo
44
+ post_data = initial_post_data
45
+ emit(event: 'addChannel', channel: 'ok_futureusd_userinfo', post_data: post_data)
46
+ end
47
+
48
+ def price_api(data)
49
+ @driver.text data
50
+ end
51
+
52
+ private
53
+
54
+ def initial_post_data
55
+ post_data = {}
56
+ post_data['api_key'] = @api_key
57
+ post_data
58
+ end
59
+
60
+ def sign(post_data:)
61
+ params_string = post_data.sort.collect{|k, v| "#{k}=#{v}"} * '&'
62
+ hashed_string = params_string + "&secret_key=#{@secret_key}"
63
+ signature = OpenSSL::Digest.new('md5', hashed_string).to_s.upcase
64
+ post_data['sign'] = signature
65
+ post_data = post_data.sort
66
+ post_data.collect! { |item| "'#{item[0]}':'#{item[1]}'" }
67
+ post_data = post_data.join(",")
68
+ end
69
+
70
+ def emit(event:, channel:, post_data: nil)
71
+ post_data = sign(post_data: post_data)
72
+ @driver.text "{'event':'#{event}', 'channel':'#{channel}', 'parameters': {#{post_data}}}"
73
+ end
74
+ end
data/okcoin-ruby.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Okcoin::VERSION
9
9
  spec.authors = ["Ilya Cherevkov"]
10
10
  spec.email = ["icherevkov@gmail.com"]
11
- spec.summary = %q{Simple Okcoin REST and Websocket API wrapper.}
12
- spec.description = %q{Okcoin Ruby REST and Websockets API wrapper. REST is handled with Curb and Websocket with CelluloidIO}
11
+ spec.summary = %q{A ruby library for okcoin.com}
12
+ spec.description = %q{A ruby library for okcoin.com}
13
13
  spec.homepage = "https://github.com/ilyacherevkov/okcoin-ruby"
14
14
  spec.license = "MIT"
15
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: okcoin-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Cherevkov
@@ -66,8 +66,7 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: Okcoin Ruby REST and Websockets API wrapper. REST is handled with Curb
70
- and Websocket with CelluloidIO
69
+ description: A ruby library for okcoin.com
71
70
  email:
72
71
  - icherevkov@gmail.com
73
72
  executables: []
@@ -79,10 +78,10 @@ files:
79
78
  - LICENSE.txt
80
79
  - README.md
81
80
  - Rakefile
82
- - lib/okcoin.rb
81
+ - lib/okcoin-ruby.rb
83
82
  - lib/okcoin/rest.rb
84
83
  - lib/okcoin/version.rb
85
- - lib/okcoin/websocket.rb
84
+ - lib/okcoin/ws.rb
86
85
  - okcoin-ruby.gemspec
87
86
  homepage: https://github.com/ilyacherevkov/okcoin-ruby
88
87
  licenses:
@@ -107,5 +106,5 @@ rubyforge_project:
107
106
  rubygems_version: 2.2.2
108
107
  signing_key:
109
108
  specification_version: 4
110
- summary: Simple Okcoin REST and Websocket API wrapper.
109
+ summary: A ruby library for okcoin.com
111
110
  test_files: []
data/lib/okcoin.rb DELETED
@@ -1,9 +0,0 @@
1
- require 'curb'
2
- require 'celluloid-websocket-client'
3
- require 'okcoin/version'
4
- require 'okcoin/rest'
5
- require 'okcoin/websocket'
6
-
7
- module Okcoin
8
-
9
- end
@@ -1,76 +0,0 @@
1
- module Okcoin
2
- class Websocket
3
- include Celluloid
4
- BASE_URI = 'wss://real.okcoin.com:10440/websocket/okcoinapi'
5
-
6
- def initialize(api_key: nil, secret_key: nil)
7
- @driver = Celluloid::WebSocket::Client.new(URL, Celluloid::Actor.current)
8
- @api_key = api_key
9
- @secret_key = secret_key
10
- end
11
-
12
- # When WebSocket is opened, register callbacks
13
- def on_open
14
- puts "Websocket connection to #{BASE_URI} established succesfully"
15
- end
16
-
17
- # When raw WebSocket message is received
18
- def on_message(msg)
19
- puts "Message received: #{msg}"
20
- end
21
-
22
- # When WebSocket is closed
23
- def on_close(code, reason)
24
- puts "WebSocket connection closed: #{code.inspect}, #{reason.inspect}"
25
- @driver.terminate
26
- terminate
27
- end
28
-
29
- # close WebSocket connection
30
- def close
31
- @driver.close
32
- end
33
-
34
- def pingpong
35
- every(5){ @driver.text "{'event':'ping'}" }
36
- end
37
-
38
- def userinfo
39
- post_data = initial_post_data
40
- emit(event: 'addChannel', channel: 'ok_spotusd_userinfo', post_data: post_data)
41
- end
42
-
43
- def futures_userinfo
44
- post_data = initial_post_data
45
- emit(event: 'addChannel', channel: 'ok_futureusd_userinfo', post_data: post_data)
46
- end
47
-
48
- def price_api(data)
49
- @driver.text data
50
- end
51
-
52
- private
53
-
54
- def initial_post_data
55
- post_data = {}
56
- post_data['api_key'] = @api_key
57
- post_data
58
- end
59
-
60
- def sign(post_data:)
61
- params_string = post_data.sort.collect{|k, v| "#{k}=#{v}"} * '&'
62
- hashed_string = params_string + "&secret_key=#{@secret_key}"
63
- signature = OpenSSL::Digest.new('md5', hashed_string).to_s.upcase
64
- post_data['sign'] = signature
65
- post_data = post_data.sort
66
- post_data.collect! { |item| "'#{item[0]}':'#{item[1]}'" }
67
- post_data = post_data.join(",")
68
- end
69
-
70
- def emit(event:, channel:, post_data: nil)
71
- post_data = sign(post_data: post_data)
72
- @driver.text "{'event':'#{event}', 'channel':'#{channel}', 'parameters': {#{post_data}}}"
73
- end
74
-
75
- end
76
- end