Узнаем текущую цену криптовалюты с помощью API

10.02.2018

Для написания даже самого простого бота, который будет хоть каким-то образом пытаться приносить прибыль на волатильности курса криптовалют (ага, конечно) или же автоматически ставить на определенные события в каком-то виде спорта, в котором вы являетесь непревзойденным экспертом(таких большинство, очевидно), вам в любом случае нужно будет разобраться в API биржи, чтобы программно автоматизировать вашу золотонесущую стратегию.

Сама задача - написать бота звучит достаточно сложно, но если разбить ее на составные подзадачи и постепенно их решать, то может что-нибудь и получится (но это не точно). Поэтому начинать будем с первичным знакомством с API интересующей биржи и написанием хоть чего-нибудь. Кажется очевидным, что все держатели своих цифровых монет любят часами напролет следить за быстропадующим курсом монеты, поэтому идея написания простейшего узнавателя цены какой-либо крипты звучит интересно. А так как все мы знаем, что сила в Dimecoin, то встречайте: узнаватель цены Dimecoin.

За этот месяц удалось познакомиться с двумя криптовалютными биржами: livecoin и yobit. Каждая из них умеет как торговать Dimecoin-ом, так и предоставлять API для взаимодействия. Путем глубоко анализа (посмотрел одним глазом на одну, другим - на другую) выбор пал на API йобита. Необходимый нам запрос по цене Dimecoin-а выполняется вот такой командой: https://yobit.net/api/3/ticker/dime_rur, которая вернет следующий JSON:

{"dime_rur":
{
"high":0.0049499,
"low":0.00400111,
"avg":0.0044755,
"vol":117309.39103531,
"vol_cur":26228934.80427515,
"last":0.00400111,
"buy":0.00424344,
"sell":0.00464051,
"updated":1517774146
}
}

Данных возвращается не так много, но на самом деле нам достаточно знать значение поля "last", содержащего текущую цену.

Итак, интересующий нас запрос найден, теперь пора это дело автоматизировать и как-нибудь более наглядно отобразить. На самом деле для решения такой задачи подойдет практически любой язык программирования. В рамках этой статьи остановимся на
Python 3. Порог вхождения для данного языка программирования низкий, а код получается во многом лаконичный и понятный даже тому, кто никогда на нём не писал.

Рассмотрим какая же функция получится на выходе:

import requests
import json

def get_coin_price(first, second):
pair = "{0}_{1}".format(first, second)

url = "https://yobit.net/api/3/ticker/{0}".format(pair)
obj = requests.get(url).text
data = json.loads(obj)

try:
item = data[pair]
res = item['last']
except:
res = "Failed to get price"

return res

Данная функция принимает на вход два параметра, содержащие значения необходимых нам валют. Мы хотим знать, сколько стоит 1 дайм ("dime") в рублях ("rur"). Затем на основе полученных параметров формируем запрос к бирже yobit через API и получаем ответ в виде JSON-объекта. Пытаемся получить значение поля "last" и если это сделать удается, возвращаем значение, а если не удается - сообщение об ошибке "Failed to get price".

Проверяем как работает функция и выводим результат в консоль:

print(get_coin_price("dime", "rur"))

Отлично, в консоли результат печатается, но какой же это узнаватель цены, если у него нет пользовательского интерфейса? Попробуем это исправить! Язык программирования Python поддерживает большое количество различных библиотек, упрощающих процесс создания окошек и кнопочек. Для минимального варианта вполне хватит библиотеки tkinter.

На выходе получаем следующий код:

from tkinter import *

root = Tk()
root.title("Dimecoin price checker")
root.resizable(0,0)

Label(root,
text="DIME_RUR: {0}".format(get_coin_price("dime", "rur")),
font="Verdana 16 bold").pack()

root.mainloop()

Создаем форму, добавляем заголовок, не разрешаем форме растягиваться (узнаватель у нас минималистичный, ему это не нужно), добавляем метку с заголовком и значением полученной цены и на последнем шаге отображаем полученную форму. Запускаем и видим следующий результат:

Красивостей, конечно, не завезли, но с другой стороны у нас это не курсы дизайнеров, тут серьезные люди собрались: сплошные криптоаналитики да криптотрейдеры.

Улучшений можно вводить большое количество, но мне кажется, что на сегодня с основной задачей мы справились: научились общаться с биржей при помощи змей и рисовать все это дело в окошках не самого большого размера.