Работа с API криптобиржи Yobit на golang - Получение доступных пар
Все примеры работают с go version go1.9.2 linux/amd64
Работа с открытым API
Получение информации о доступных валютных парах
Посмотрим, что написано в документации:
Пример запроса: https://yobit.net/api/3/info
Пример ответа:
{
"server_time":1418654531,
"pairs":{
"ltc_btc":{
"decimal_places":8,
"min_price":0.00000001,
"max_price":10000,
"min_amount":0.0001,
"hidden":0,
"fee":0.2
}
...
}
}
В первую очередь для работы с json-api нам потребуется создать структуры данных, в котрые мы будем разбирать полученный JSON.
Для хранения каждой пары будем использовать структуру:
type InfoPair struct {
DecimalPlaces int `json:"decimal_places"`
MinPrice float64 `json:"min_price"`
MaxPrice float64 `json:"max_price"`
MinAmount float64 `json:"min_amount"`
MinTotal float64 `json:"min_total"`
Hidden int `json:"hidden"`
Fee float64 `json:"fee"`
FeeBuyer float64 `json:"fee_buyer"`
FeeSeller float64 `json:"fee_seller"`
}
А для хранения всего ответа создадим такую структуру
type Info struct {
ServerTime uint64 `json:"server_time"`
Pairs map[string]InfoPair `json:"pairs"`
}
И для того, чтобы правильно её инициализировать вместе с созданием мапы, будем использовать функцию
func NewInfo() Info {
info := Info{}
info.Pairs = make(map[string]InfoPair)
return info
}
Отлично!
Теперь перейдем к написанию кода, который вернет нам список с сервера.
Для начала добавим константу с доменом
const (
domain = "https://yobit.io"
)
Тут можно менять зону на .net
или .io
в зависимости от того, что у вас лучше работает.
Создадим заготовку для функции, которая будет загружать данные. Функция будет возвращать информацию о торговых парах и ошибку, либо nil
, если все прошло успешно.
func LoadInfo() (info Info, err error) {
info := NewInfo()
return info, nil
}
Загрузить данные с сервера в данном случае достаточно просто. Но, как всегда, очень много буков:
resp, err := http.Get(domain + "/api/3/info")
if nil != err {
return info, err
}
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body)
if nil != err {
return info, err
}
И полученный с биржи JSON теперь нужно превратить в структуру Info
:
err = json.Unmarshal(body, &info)
Код всей функции будет выглядеть вот так:
import (
"net/http"
"encoding/json"
"io/ioutil"
)
func LoadInfo() (info Info, err error) {
info = NewInfo()
resp, err := http.Get(domain + "/api/3/info")
if nil != err {
return info, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if nil != err {
return info, err
}
err = json.Unmarshal(body, &info)
return
}
Использовать её можно так:
info, err := yobit.LoadInfo()
if nil != err {
panic(err)
}
for pair, infoPair := range info.Pairs {
...
}
Автор: keltanas
comments powered by Disqus