class Abot::Whitelist::BinanceCap

Constants

DEFAULT_COINS
FIAT

Public Class Methods

send_req(base_list:, top_number:) click to toggle source
# File lib/abot/whitelist/binance_cap.rb, line 13
def send_req(base_list:, top_number:)
  self.base_uri 'https://www.binance.com'

  path = '/exchange-api/v2/public/asset-service/product/get-products'
  response = get(path)
  process!(response: response || '{}', base_list: base_list, top_number: top_number)
end

Private Class Methods

process!(response:, base_list:, top_number:) click to toggle source
# File lib/abot/whitelist/binance_cap.rb, line 23
def process!(response:, base_list:, top_number:)
  result = top(response: response, top_number: top_number).map { |m| base_list.include?(m) ? m : nil }.compact
  puts "base list: #{base_list}"
  puts "+++++++++++++++++++++++++++++++++++++++++++++"
  puts "coins (count = #{result.count}) from the base list in the top #{top_number} by capitalization:"
  puts result.join(' ')
end
serialized_response(response:) click to toggle source
# File lib/abot/whitelist/binance_cap.rb, line 44
def serialized_response(response:)
  begin
    JSON.parse(response.body, symbolize_names: true)
  rescue JSON::ParserError => error
    # binance 500 errors are html format
    raise Error.new(message: error)
  end
end
top(response:, top_number:) click to toggle source
# File lib/abot/whitelist/binance_cap.rb, line 31
def top(response:, top_number:)
  all_coins = usdt_coins(response: response).map { |s| [s[:b], (s[:cs].to_f * s[:c].to_f)] }
                                            .sort_by { |s| s[1] }
                                            .reverse
                                            .map { |m| m[0] }
  result = (all_coins - FIAT)[0..((top_number - 1) - DEFAULT_COINS.count)]
  result + DEFAULT_COINS
end
usdt_coins(response:) click to toggle source
# File lib/abot/whitelist/binance_cap.rb, line 40
def usdt_coins(response:)
  serialized_response(response: response)[:data].select { |s| s[:q] == 'USDT' }
end