qbtrade/pkg/exchange/okex/okexapi/market.go

103 lines
2.1 KiB
Go
Raw Permalink Normal View History

2024-06-27 14:42:38 +00:00
package okexapi
import (
"context"
"encoding/json"
"fmt"
"net/url"
)
type MarketTickersRequest struct {
client *RestClient
instType string
}
func (r *MarketTickersRequest) InstrumentType(instType string) *MarketTickersRequest {
r.instType = instType
return r
}
func (r *MarketTickersRequest) Do(ctx context.Context) ([]MarketTicker, error) {
// SPOT, SWAP, FUTURES, OPTION
var params = url.Values{}
params.Add("instType", string(r.instType))
req, err := r.client.NewRequest(ctx, "GET", "/api/v5/market/tickers", params, nil)
if err != nil {
return nil, err
}
response, err := r.client.SendRequest(req)
if err != nil {
return nil, err
}
var apiResponse APIResponse
if err := response.DecodeJSON(&apiResponse); err != nil {
return nil, err
}
var data []MarketTicker
if err := json.Unmarshal(apiResponse.Data, &data); err != nil {
return nil, err
}
return data, nil
}
type MarketTickerRequest struct {
client *RestClient
instId string
}
func (r *MarketTickerRequest) InstrumentID(instId string) *MarketTickerRequest {
r.instId = instId
return r
}
func (r *MarketTickerRequest) Do(ctx context.Context) (*MarketTicker, error) {
// SPOT, SWAP, FUTURES, OPTION
var params = url.Values{}
params.Add("instId", r.instId)
req, err := r.client.NewRequest(ctx, "GET", "/api/v5/market/ticker", params, nil)
if err != nil {
return nil, err
}
response, err := r.client.SendRequest(req)
if err != nil {
return nil, err
}
var apiResponse APIResponse
if err := response.DecodeJSON(&apiResponse); err != nil {
return nil, err
}
var data []MarketTicker
if err := json.Unmarshal(apiResponse.Data, &data); err != nil {
return nil, err
}
if len(data) == 0 {
return nil, fmt.Errorf("ticker of %s not found", r.instId)
}
return &data[0], nil
}
func (c *RestClient) NewMarketTickerRequest(instId string) *MarketTickerRequest {
return &MarketTickerRequest{
client: c,
instId: instId,
}
}
func (c *RestClient) NewMarketTickersRequest(instType string) *MarketTickersRequest {
return &MarketTickersRequest{
client: c,
instType: instType,
}
}