coinmarketcap_lite 0.2.1 → 0.3.0

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
  SHA256:
3
- metadata.gz: 68234dfdf07f6973971b9c82192bc548f7bdfb8eb0c0585a4f571ea7bf301558
4
- data.tar.gz: da98756a882df408752d108394c8d8275f869f49a3c6f2d6cf1fcfbdb67b85bf
3
+ metadata.gz: 10d5a6d57b2a240ace834efb0b2bb971b78f166286f0a82c05ebc160fba748ae
4
+ data.tar.gz: 51c980988ab12110fb8ad0b5597599890a702ad9f1eafc0ac728ca34ef242e01
5
5
  SHA512:
6
- metadata.gz: eb714729a2f4ffedd74224f8fcec30e3420d47cad74e78e4e4c3fcfddcebcce68655a229945137d506e9b17d7f69624d37faa2a25204b6ba5b2c1c8ce3368b75
7
- data.tar.gz: de7e9d63c04ef172e653a88471a13508955d1bace9358686181b16ed822514da5d57807cb877050d951a7a4c2bcdeb5a45ef67b6c6b13da0eefc3e09cdc023c7
6
+ metadata.gz: ecbd394ed13c8806594c47babc2e05141e2016d532315bcbf4cc3c3f4e83930f85ff6ec79d04ecc8be4319ad8281d7a3bf4daeb44b1fd9cb7c1e00d570975220
7
+ data.tar.gz: 7c757e285d4c2bfc231976e0ec1494c823263561a517ca2278c0400049433cdf871970c9957ae88b926ee6d4535e6a0313141090fc1ad90d32e45b47375f80c2
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -2,18 +2,56 @@
2
2
 
3
3
  # file: coinmarketcap_lite.rb
4
4
 
5
- require 'net/http'
6
- require 'uri'
5
+
6
+ require 'excon'
7
+ require 'did_you_mean'
7
8
  require 'dynarex-password' # used by CoinmarketlitePlus
9
+ require 'remote_dwsregistry'
10
+
11
+ # see Coinmarketcap API documentation at
12
+ # https://coinmarketcap.com/api/documentation/v1
13
+
8
14
 
15
+ class CoinmarketcapLiteException < Exception
16
+ end
9
17
 
10
18
  class CoinmarketcapLite
19
+ using ColouredText
11
20
 
12
21
  def initialize(apikey: '', apiurl: 'https://pro-api.coinmarketcap.com',
13
- apibase: '/v1/cryptocurrency')
22
+ apibase: '/v1/cryptocurrency', filepath: '.', dym: true)
14
23
 
15
24
  @url_base = apiurl + apibase
16
- @apikey = apikey
25
+ @apikey = apikey
26
+ @filepath = filepath
27
+
28
+ file = 'coinmarketlite.dat'
29
+ if File.exists? file then
30
+
31
+ File.open(File.join(@filepath, file)) do |f|
32
+ @list = Marshal.load(f)
33
+ end
34
+
35
+ else
36
+
37
+ r = get_map()
38
+ puts 'r: ' +r.inspect[0..2000]
39
+ #exit
40
+ @list = r['data']
41
+
42
+ File.open(File.join(@filepath, file), 'w+') do |f|
43
+ Marshal.dump(@list, f)
44
+ end
45
+
46
+ end
47
+
48
+ if dym then
49
+
50
+ puts 'loading did_you_mean ...'.info if @debug
51
+
52
+ @dym = DidYouMean::SpellChecker.new(dictionary: @list.flat_map \
53
+ {|x| [x['symbol'], x['name']]})
54
+ end
17
55
 
18
56
  end
19
57
 
@@ -24,39 +62,86 @@ class CoinmarketcapLite
24
62
  if symbols.any? then
25
63
  get_map(symbols)
26
64
  else
27
- get_request('/listings/latest',
65
+ # return the top 100 coins latest prices
66
+ api_call('/listings/latest',
28
67
  {"convert" => "USD,BTC", "limit" => "1","start" => "1"})
29
68
  end
30
69
 
31
70
  end
71
+
72
+ def find_coin(coin_name)
32
73
 
33
- def get_historical_price()
34
- end
74
+ #return coin_name unless @autofind
35
75
 
36
- private
76
+ s = coin_name.to_s.downcase
77
+ puts 's: ' + s.inspect if @debug
78
+ r = @list.find {|coin| coin['symbol'].downcase == s || coin['name'].downcase == s}
79
+ puts 'r: ' + r.inspect if @debug
80
+
81
+ if r.nil? then
37
82
 
38
- def get_map(symbols=[])
83
+ if @dym then
84
+
85
+ suggestion = @dym.correct coin_name
86
+ raise CoinmarketcapLiteException, "unknown coin or token name. \n" \
87
+ + "Did you mean %s?" % [suggestion.first]
39
88
 
40
- get_request('/map?symbol=' + symbols.map {|x| x.to_s.upcase}).join(',')
89
+ else
90
+
91
+ raise CoinmarketcapLiteException, "unknown coin or token name."
92
+
93
+ end
94
+
95
+ end
96
+
97
+ r
41
98
 
42
99
  end
43
100
 
44
- def get_request(api, data={})
101
+ def find_id(name)
102
+ r = find_coin(name)
103
+ r['id']
104
+ end
105
+
106
+ def find_name(s)
107
+ r = find_coin s
108
+ r['name']
109
+ end
45
110
 
46
- uri = URI.parse(@url_base + api)
111
+ def get_historical_price()
112
+ end
113
+
114
+ def prices(coins=[])
115
+ a = quotes(coins)
116
+ end
117
+
118
+ def quotes(coins=[])
119
+
120
+ coins = [coins] if coins.is_a? String
121
+ ids = coins.map {|x| find_id(x)}
122
+ api_call '/quotes/latest?id=' + ids.compact.join(',')
123
+ end
47
124
 
48
- request = Net::HTTP::Get.new(uri)
49
- request["X-CMC_PRO_API_KEY"] = @apikey
50
- request["Accept"] = "application/json"
51
- request.set_form_data( data )
125
+ private
52
126
 
53
- req_options = {
54
- use_ssl: uri.scheme == "https",
55
- }
127
+ # returns the coin mapping info (i.e. symbol, slug, name etc.)
128
+ #
129
+ def get_map(symbols=[])
130
+ return get_request('/map') if symbols.empty?
131
+ api_call('/map?symbol=' + symbols.map {|x| x.to_s.upcase}).join(',')
56
132
 
57
- response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
58
- http.request(request)
59
- end
133
+ end
134
+
135
+ def api_call(api, data={})
136
+
137
+ url = @url_base + api
138
+ h = {}
139
+ h["X-CMC_PRO_API_KEY"] = @apikey
140
+ h["Accept"] = "application/json"
141
+ connection = Excon.new(url, :headers => h)
142
+ r = connection.request(:method => 'GET')
143
+ #return r
144
+ return JSON.parse(r.body)
60
145
 
61
146
  end
62
147
  end
@@ -64,7 +149,13 @@ end
64
149
 
65
150
  class CoinmarketcapLitePlus < CoinmarketcapLite
66
151
 
67
- def self.fetch_apikey(reg)
152
+ def self.fetch_apikey(regx)
153
+
154
+ reg = if regx.is_a? String then
155
+ RemoteDwsRegistry.new domain: regx
156
+ else
157
+ regx
158
+ end
68
159
 
69
160
  decipher = ->(lookup_file, s) {
70
161
  DynarexPassword.new.reverse_lookup(s, lookup_file)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coinmarketcap_lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,8 +35,28 @@ cert_chain:
35
35
  9pxUgkdUQ+NiNSK4rcJvdaDNZSKeZeodRiCckztoJb2bHj1kJRCtbIJMWMmT4QUs
36
36
  0H4+XrUgxuhbU9yiMh5hw2T5
37
37
  -----END CERTIFICATE-----
38
- date: 2021-05-04 00:00:00.000000000 Z
38
+ date: 2021-05-05 00:00:00.000000000 Z
39
39
  dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: excon
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.81.0
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.81'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.81.0
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.81'
40
60
  - !ruby/object:Gem::Dependency
41
61
  name: dynarex-password
42
62
  requirement: !ruby/object:Gem::Requirement
@@ -57,6 +77,26 @@ dependencies:
57
77
  - - "~>"
58
78
  - !ruby/object:Gem::Version
59
79
  version: '0.2'
80
+ - !ruby/object:Gem::Dependency
81
+ name: remote_dwsregistry
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '0.4'
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.4.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.4'
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 0.4.1
60
100
  description:
61
101
  email: digital.robertson@gmail.com
62
102
  executables: []
metadata.gz.sig CHANGED
Binary file