Работаем с API биржи EXMO
- Web https://exmo.me/ - через браузер для юзеров
- API - https://api.exmo.com - для приложений и других серверов
- Запрос балансов валют в кошельке
- Запрос текущих средних курсов обмена на рубли
- Поочередное умножение балансов на их рублёвые курсы с вычетом комиссии за сделку
- Сложение полученных в п. 3 чисел
- Вычет из суммы комиссии за вывод средств на Яндекс.Деньги
require 'net/https'
require 'uri'
require 'json'
require 'uri'
require 'json'
class Exmo
def initialize(key,secret)
@KEY = key
@SECRET = secret
end
def initialize(key,secret)
@KEY = key
@SECRET = secret
end
- название метода (trades - на получение сделок, ticker - статистика цен, и т.д.) - обязательный параметр
- параметры, например валюта + цена + объем для метода order_create (для создания ордера на покупку/продажу)
def request(method, params = {})
Дополнительно во всех запросах должен находиться обязательный POST-параметр nonce с инкрементным числовым значением (>0). Это значение не должно повторяться или уменьшаться.
nonce = Time.now.strftime("%s%6N")
params['nonce'] = nonce
params['nonce'] = nonce
URL — необходимо использовать следующий адрес https://api.exmo.com/v1/{api_name} где api_name - это наименование API метода
api_name хранится в переменной method полученных аргументов uri = URI.parse(['https://api.exmo.com/v1', method].join('/'))
post_data = URI.encode_www_form(params)
post_data = URI.encode_www_form(params)
Авторизация осуществляется с помощью отправки на сервер следующих заголовков:
Key — Публичный ключ, его нужно взять настройках профиля пользователя
(пример: K-7cc97c89aed2a2fd9ed7792d48d63f65800c447b)
Sign — POST данные (param=val¶m1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя
Key — Публичный ключ, его нужно взять настройках профиля пользователя
(пример: K-7cc97c89aed2a2fd9ed7792d48d63f65800c447b)
Sign — POST данные (param=val¶m1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя
digest = OpenSSL::Digest.new('sha512')
sign = OpenSSL::HMAC.hexdigest(digest, @SECRET, post_data)
headers = {'Sign' => sign, 'Key' => @KEY}
sign = OpenSSL::HMAC.hexdigest(digest, @SECRET, post_data)
headers = {'Sign' => sign, 'Key' => @KEY}
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
req = Net::HTTP::Post.new(uri.path, headers)
req.body = post_data
http.use_ssl = true if uri.scheme == 'https'
req = Net::HTTP::Post.new(uri.path, headers)
req.body = post_data
response = http.request(req)
JSON.load response.body.to_s
end
JSON.load response.body.to_s
end
KEY = "K-dnugio89hgu54h48systopthebest9uh556i94h54jhp49"
SECRET = "S-mekgnbehappy4h8j6hijrtpgh498hji54of56uho4ihjtu94hj"
exmo = Exmo.new(KEY, SECRET)
puts exmo.request("trades",{pair: "BTC_USD"})["BTC_USD"][0]
SECRET = "S-mekgnbehappy4h8j6hijrtpgh498hji54of56uho4ihjtu94hj"
exmo = Exmo.new(KEY, SECRET)
puts exmo.request("trades",{pair: "BTC_USD"})["BTC_USD"][0]
Запрос балансов валют в кошелькеЗапрос текущих средних курсов обмена на рубли- Поочередное умножение балансов на их рублёвые курсы с вычетом комиссии за сделку
- Сложение полученных в п. 3 чисел
- Вычет из суммы комиссии за вывод средств на Яндекс.Деньги
def get_summ_in_rubles
user_info = request("user_info")
ticker = request('ticker')
ticker = request('ticker')
yandex_rub = 0.0
user_info["balances"].each do |key,val|
user_info["balances"].each do |key,val|
unless val == "0"
price = ticker["#{key}_RUB"]["avg"]
price = ticker["#{key}_RUB"]["avg"]
summ = val.to_f * price.to_f # summ in rubles
summ -= summ*0.002 # summ in rubles after exchange
summ -= summ*0.002 # summ in rubles after exchange
yandex_rub += summ
end
end
end
end
yandex_rub -= yandex_rub*0.03 # RUBLES after withdraw
end
end
Комментарии 1