# frozen_string_literal: true require('openssl') require('base64') require('curb') require('json') # @author Hernani Rodrigues Vaz module Cns # classe para acesso dados centralized exchanges class Apice # @example trades_de # { # trades: [{ # trade_id: 'XUWWD3', # trading_pair: 'btceur', # is_external_wallet_trade: false, # type: 'sell', # amount_currency_to_trade: '0.1', # price: 430, # volume_currency_to_pay: 43, # volume_currency_to_pay_after_fee: 42.79, # amount_currency_to_trade_after_fee: 0.099, # fee_currency_to_pay: 0.22, # fee_currency_to_trade: '0.00100000', # created_at: '2014-03-22T08:14:48+01:00', # successfully_finished_at: '2014-03-25T14:03:22+01:00', # state: 1, # is_trade_marked_as_paid: true, # trade_marked_as_paid_at: '2014-03-22T08:20:01+01:00', # payment_method: 1, # my_rating_for_trading_partner: 'positive', # trading_partner_information: { # username: 'emax2000', # is_kyc_full: false, # trust_level: 'bronze', # amount_trades: 4, # rating: 100, # bank_name: 'CASSA DI RISPARMIO DI CIVITAVECCHIA SPA', # bic: 'CRFIIT2CXXX', # seat_of_bank: 'IT' # } # }, {}], # page: { current: 1, last: 2 }, # errors: [], # credits: 22 # } # @param [Integer] pag pagina dos dados # @param [Array] ary acumulador dos dados # @param [String] uri Uniform Resource Identifier do pedido HTTP # @return [Array] lista completa trades bitcoinde def trades_de(pag = 0, ary = [], uri = 'https://api.bitcoin.de/v4/trades') p = "#{uri}?#{URI.encode_www_form(state: 1, page: pag + 1)}" r = JSON.parse( Curl.get(p) { |h| h.headers = hde(p) }.body, symbolize_names: true ) ary += r[:trades] r[:page][:current] < r[:page][:last] ? trades_de(pag + 1, ary) : ary rescue StandardError ary end # @example deposits_de # { # deposits: [ # { # deposit_id: '177245', # txid: '84f9e85bc5709cd471e3d58a7d0f42d2c4a7bbd888cabf844e200efbf0a7fda2', # address: '1KK6HhG3quojFS4CY1mPcbyrjQ8BMDQxmT', # amount: '0.13283', # confirmations: 6, # state: 2, # created_at: '2014-01-31T22:01:30+01:00' # }, # {} # ], # page: { current: 1, last: 1 }, # errors: [], # credits: 23 # } # @param (see trades_de) # @return [Array] lista completa uniformizada depositos bitcoinde def deposits_de(pag = 0, ary = [], uri = 'https://api.bitcoin.de/v4/btc/deposits') p = "#{uri}?#{URI.encode_www_form(state: 2, page: pag + 1)}" r = JSON.parse( Curl.get(p) { |h| h.headers = hde(p) }.body, symbolize_names: true ) ary += deposits_unif_de(r) r[:page][:current] < r[:page][:last] ? deposits_de(pag + 1, ary) : ary rescue StandardError ary end # @example withdrawals_de # { # withdrawals: [ # { # withdrawal_id: '136605', # address: '1K9YMDDrmMV25EoYNqi7KUEK57Kn3TCNUJ', # amount: '0.120087', # network_fee: '0', # comment: '', # created_at: '2014-02-05T13:01:09+01:00', # txid: '6264fe528116fcb87c812a306ca8409eecfec8fa941546c86f98984b882c8042', # transferred_at: '2014-02-05T13:05:17+01:00', # state: 1 # }, # {} # ], # page: { current: 1, last: 2 }, # errors: [], # credits: 23 # } # @param (see deposits_de) # @return [Array] lista completa uniformizada withdrawals bitcoinde def withdrawals_de(pag = 0, ary = [], uri = 'https://api.bitcoin.de/v4/btc/withdrawals') p = "#{uri}?#{URI.encode_www_form(state: 1, page: pag + 1)}" r = JSON.parse( Curl.get(p) { |h| h.headers = hde(p) }.body, symbolize_names: true ) ary += withdrawals_unif_de(r) r[:page][:current] < r[:page][:last] ? withdrawals_de(pag + 1, ary) : ary rescue StandardError ary end # @example ledger_fr # [ # { # uuid: '50551e61-4e74-4ae7-85fd-9c2040542818', # currency_amount: nil, # state: 'executed', # btc_fee: '0.0', # currency_fee: '0.0', # created_at: '2014-03-04T09:00Z', # updated_at: '2014-03-04T09:00Z', # currency: 'EUR', # comment: '5723', # amount: '100.0', # type: 'WireDeposit', # account_operations: [{ # uuid: 'b5058a68-cf99-4438-86d3-e773eba418ec', # name: 'wire_deposit', # amount: '100.0', # currency: 'EUR', # created_at: '2014-03-04T09:00Z', # created_at_int: 1_393_923_644, # is_trading_account: false # }, {}] # }, # {} # ] # @param (see trades_de) # @return [Array] lista ledger paymium def ledger_fr(pag = 0, ary = [], uri = 'https://paymium.com/api/v1/user/orders') r = JSON.parse( Curl.get(uri, offset: pag) { |h| h.headers = hfr("#{uri}?#{URI.encode_www_form(offset: pag)}") }.body, symbolize_names: true ) r.empty? ? ary : ledger_fr(pag + r.size, ary + r) rescue StandardError ary end # @example ledger_mt # { # transactions: [ # { # id: 305_445, # date: '2014-03-06T10:59:13.000Z', # type: 'withdraw', # price: 97.47, # currency: 'EUR', # fund_id: nil, # order_id: nil, # trade_id: nil, # note: 'BOV withdraw', # transfer_detail: nil # }, # {} # ], # meta: { # total_count: nil, # first: { page: 1, href: 'https://api.therocktrading.com/v1/transactions?page=1' }, # previous: nil, # current: { page: 1, href: 'https://api.therocktrading.com/v1/transactions?page=1' }, # next: { page: 2, href: 'https://api.therocktrading.com/v1/transactions?page=2' }, # last: nil # } # } # @param (see trades_de) # @return [Array] lista ledger therock def ledger_mt(pag = 1, ary = [], uri = 'https://api.therocktrading.com/v1/transactions') r = JSON.parse( Curl.get(uri, page: pag) { |h| h.headers = hmt("#{uri}?#{URI.encode_www_form(page: pag)}") }.body, symbolize_names: true )[:transactions] r.empty? ? ary : ledger_mt(pag + r.size, ary + r) rescue StandardError ary end # @example trades_us # { # error: [], # result: { # trades: { # "TVINF5-TIOUB-YFNGKE": { # ordertxid: 'ORPSUW-YKP4F-UJZOC6', # pair: 'XETHXXBT', # time: 1_463_435_684.8387, # type: 'buy', # ordertype: 'market', # price: '0.024989', # cost: '1.193973', # fee: '0.003104', # vol: '47.77994129', # margin: '0.000000', # misc: '' # }, # "OUTRO-TRADE-ID": {} # }, # count: 157 # } # } # @param [Integer] ofs offset dos dados # @param [Hash] has acumulador dos dados # @param (see account_us) # @return [Hash] dados trades kraken def trades_us(ofs = 0, has = {}, urb = 'https://api.kraken.com/0/private', uri = 'TradesHistory', non = nnc) r = JSON.parse( Curl.post("#{urb}/#{uri}", nonce: non, ofs: ofs) { |h| h.headers = hus(uri, nonce: non, ofs: ofs) }.body, symbolize_names: true )[:result] has.merge!(r[:trades]) ofs += 50 ofs < r[:count] ? trades_us(ofs, has) : has rescue StandardError has end # @example ledger_us # { # error: [], # result: { # ledger: { # "LXXURB-ITI7S-CXVERS": { # refid: 'ACCHF3A-RIBBMO-VYBESY', # time: 1_543_278_716.2775, # type: 'withdrawal', # subtype: '', # aclass: 'currency', # asset: 'ZEUR', # amount: '-15369.6200', # fee: '0.0900', # balance: '0.0062' # }, # "OUTRO-LEDGER-ID": {} # }, # count: 376 # } # } # @param (see trades_us) # @return [Hash] dados ledger kraken def ledger_us(ofs = 0, has = {}, urb = 'https://api.kraken.com/0/private', uri = 'Ledgers', non = nnc) r = JSON.parse( Curl.post("#{urb}/#{uri}", nonce: non, ofs: ofs) { |h| h.headers = hus(uri, nonce: non, ofs: ofs) }.body, symbolize_names: true )[:result] has.merge!(r[:ledger]) ofs += 50 ofs < r[:count] ? ledger_us(ofs, has) : has rescue StandardError has end end end