Работа с 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 {
    ...
}

Создано:
Автор:
« Назад на главную

comments powered by Disqus
Fork me on GitHub