Функция на Python 3, обращающаяся к API бирж

Цена договорная • безналичный расчёт, электронные деньги
19 февраля 2017, 10:54 • 3 отклика • 59 просмотров
Нужен функция (модуль) на Python 3, которая принимала бы в качестве аргумента (словарь) имена и соответствующие адреса API криптобирж и возвращала:
1. Словарь с bids, где:
1.1. key - exhange_name (наименования бирж)
1.2. value - list c релевантными rate (цена) и amount (объем)
Пример: rates_bids = {'bitfinex': [1017, 0.12], 'poloniex':[1016.0, 0.52], 'bittrex': [1014, 1.21]}, количество ключей == количество бирж
2. Словарь asks, где:
2.1. key - exhange_name (наименования бирж)
2.2. value - list c релевантными rate(цена) и amount (объем)
Пример: rates_asks = {'bittrex': [1015, 0.41], 'poloniex': [1016.0, 0.52]}, количество ключей == количество бирж
В словари rates_bids и rates_asks записывают по одной (верхней, лучшей) котировке из каждой биржи.
3. Минимальный ask_min = ['poloniex', 1016.0, 0.52] (exhange_name, rate, amount - имя биржи с минимальной котировкой продажи, собственно котировка (цена) и объем котировки). Вместо list можно и словарь. Пример: ask_min = {'bitfinex': [1017, 0.12]}
4. Максимальный bid_max = ['bitfinex', 1015.5, 0.342] (exhange_name, rate, amount - имя биржи с максимальной котировкой покупки, собственно котировка (цена) и объем котировки). Вместо list можно и словарь. Пример: bid_max = {'bitfinex': [1017, 0.12]}

Время работы - 0.4 sec * n, n - количество url
Успешным считается сценарий (success_counter >=n - n*0.4), когда количество бирж, с которых получены полные котировки, - не менее 0.6 от имеющихся в списке.
if success_counter >=n - n*0.4: success = True
Полными считаются котировки, в которых есть корректные значения и по bid (rate and amount), и по ask (rate and amount).
if success != True: bid_max = "", ask_min = "" => переменным присвается значение '"" и запускается еще один цикл.
В противном случае возвращаются корректные значения bid_max и ask_min, функция завершается.

Вряд ли получится написать код, программно разбирающий json-ответы от каждой из бирж и приводящий эти ответы к единому формату, из-за существенных различий в отдаваемых биржами ответах. Поэтому на данный момент обсуждается только десять бирж из приложенного списка. Но функция на вход должна принимать именно словарь с ключами - именами бирж и значениями - url запроса. Причина: удобство редактирования будущих запросов (изменение валютной пары, например).
Список бирж:
https://www.quoine.com/, https://www.okcoin.com/, https://www.bitfinex.com/, https://www.kraken.com/,
https://cex.io/, https://btc-e.nz, https://bittrex.com/, https://www.gdax.com/, https://www.bitstamp.net/,
https://gemini.com/
request_link = {'https://cex.io/': 'https://cex.io/api/order_book/BTC/USD/?depth=1', 'https://www.okcoin.com/': 'https://api.bitfinex.com/v1/book/BTCUSD?limit_b...', 'https://www.kraken.com/': 'https://api.kraken.com/0/public/Depth?pair=XXBT...', 'https://www.gdax.com/': 'https://api.gdax.com/products/BTC-USD/book?level=1', 'https://www.bitstamp.net/': 'https://www.bitstamp.net/api/v2/ticker/btcusd/', 'https://www.quoine.com/': 'https://api.quoine.com/products/1/price_levels?0', 'https://bittrex.com/': 'https://bittrex.com/api/v1.1/public/getorderboo...', 'https://btc-e.nz': 'https://btc-e.nz/api/3/depth/btc_usd?limit=1', 'https://gemini.com/': '\xa0https://api.gemini.com/v1/book/btcusd', 'https://www.bitfinex.com/': 'https://api.bitfinex.com/v1/book/BTCUSD?limit_b...}

Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
Работаю с Дмитрием больше месяца.
Ответственный и инициативный, вникает в задачу и по-настоящему пробует ее решить.
И, конечно, он - хороший разработчик.
Спасибо, Дмитрий!
7 лет назад
Оперативно, вежливо, никаких проблем с оплатой.
Спасибо!
~ 7 лет назад