coinmarketcap_lite 0.2.1 → 0.3.0

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