Add multi-tickers endpoint
This commit is contained in:
parent
6a9852c463
commit
0c82bbdcbe
@ -190,6 +190,7 @@ func (s *PublicServer) ConnectFullPublicInterface() {
|
|||||||
serveMux.HandleFunc(path+"api/v2/feestats/", s.jsonHandler(s.apiFeeStats, apiV2))
|
serveMux.HandleFunc(path+"api/v2/feestats/", s.jsonHandler(s.apiFeeStats, apiV2))
|
||||||
serveMux.HandleFunc(path+"api/v2/balancehistory/", s.jsonHandler(s.apiBalanceHistory, apiDefault))
|
serveMux.HandleFunc(path+"api/v2/balancehistory/", s.jsonHandler(s.apiBalanceHistory, apiDefault))
|
||||||
serveMux.HandleFunc(path+"api/v2/tickers/", s.jsonHandler(s.apiTickers, apiV2))
|
serveMux.HandleFunc(path+"api/v2/tickers/", s.jsonHandler(s.apiTickers, apiV2))
|
||||||
|
serveMux.HandleFunc(path+"api/v2/multi-tickers/", s.jsonHandler(s.apiMultiTickers, apiV2))
|
||||||
serveMux.HandleFunc(path+"api/v2/tickers-list/", s.jsonHandler(s.apiTickersList, apiV2))
|
serveMux.HandleFunc(path+"api/v2/tickers-list/", s.jsonHandler(s.apiTickersList, apiV2))
|
||||||
// socket.io interface
|
// socket.io interface
|
||||||
serveMux.Handle(path+"socket.io/", s.socketio.GetHandler())
|
serveMux.Handle(path+"socket.io/", s.socketio.GetHandler())
|
||||||
@ -1210,7 +1211,7 @@ func (s *PublicServer) apiTickers(r *http.Request, apiVersion int) (interface{},
|
|||||||
|
|
||||||
timestamp, err := strconv.ParseInt(timestampString, 10, 64)
|
timestamp, err := strconv.ParseInt(timestampString, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, api.NewAPIError("Parameter \"timestamp\" is not a valid Unix timestamp.", true)
|
return nil, api.NewAPIError("Parameter 'timestamp' is not a valid Unix timestamp.", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
resultTickers, err := s.api.GetFiatRatesForTimestamps([]int64{timestamp}, currencies)
|
resultTickers, err := s.api.GetFiatRatesForTimestamps([]int64{timestamp}, currencies)
|
||||||
@ -1229,6 +1230,38 @@ func (s *PublicServer) apiTickers(r *http.Request, apiVersion int) (interface{},
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// apiMultiTickers returns FiatRates ticker prices for the specified comma separated list of timestamps.
|
||||||
|
func (s *PublicServer) apiMultiTickers(r *http.Request, apiVersion int) (interface{}, error) {
|
||||||
|
var result []db.ResultTickerAsString
|
||||||
|
var err error
|
||||||
|
|
||||||
|
currency := strings.ToLower(r.URL.Query().Get("currency"))
|
||||||
|
var currencies []string
|
||||||
|
if currency != "" {
|
||||||
|
currencies = []string{currency}
|
||||||
|
}
|
||||||
|
if timestampString := r.URL.Query().Get("timestamp"); timestampString != "" {
|
||||||
|
// Get tickers for specified timestamp
|
||||||
|
s.metrics.ExplorerViews.With(common.Labels{"action": "api-multi-tickers-date"}).Inc()
|
||||||
|
timestamps := strings.Split(timestampString, ",")
|
||||||
|
t := make([]int64, len(timestamps))
|
||||||
|
for i := range timestamps {
|
||||||
|
t[i], err = strconv.ParseInt(timestamps[i], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, api.NewAPIError("Parameter 'timestamp' does not contain a valid Unix timestamp.", true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultTickers, err := s.api.GetFiatRatesForTimestamps(t, currencies)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result = resultTickers.Tickers
|
||||||
|
} else {
|
||||||
|
return nil, api.NewAPIError("Parameter 'timestamp' is missing.", true)
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
type resultEstimateFeeAsString struct {
|
type resultEstimateFeeAsString struct {
|
||||||
Result string `json:"result"`
|
Result string `json:"result"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -565,7 +565,7 @@ func httpTestsBitcoinType(t *testing.T, ts *httptest.Server) {
|
|||||||
status: http.StatusBadRequest,
|
status: http.StatusBadRequest,
|
||||||
contentType: "application/json; charset=utf-8",
|
contentType: "application/json; charset=utf-8",
|
||||||
body: []string{
|
body: []string{
|
||||||
`{"error":"Parameter \"timestamp\" is not a valid Unix timestamp."}`,
|
`{"error":"Parameter 'timestamp' is not a valid Unix timestamp."}`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -595,6 +595,24 @@ func httpTestsBitcoinType(t *testing.T, ts *httptest.Server) {
|
|||||||
`{"ts":1574344800,"rates":{"eur":7100}}`,
|
`{"ts":1574344800,"rates":{"eur":7100}}`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "apiMultiFiatRates all currencies",
|
||||||
|
r: newGetRequest(ts.URL + "/api/v2/multi-tickers?timestamp=1574344800,1574346615"),
|
||||||
|
status: http.StatusOK,
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
body: []string{
|
||||||
|
`[{"ts":1574344800,"rates":{"eur":7100,"usd":7814.5}},{"ts":1574346615,"rates":{"eur":7134.1,"usd":7914.5}}]`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "apiMultiFiatRates get EUR rate",
|
||||||
|
r: newGetRequest(ts.URL + "/api/v2/multi-tickers?timestamp=1574344800,1574346615¤cy=eur"),
|
||||||
|
status: http.StatusOK,
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
body: []string{
|
||||||
|
`[{"ts":1574344800,"rates":{"eur":7100}},{"ts":1574346615,"rates":{"eur":7134.1}}]`,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "apiFiatRates get closest rate",
|
name: "apiFiatRates get closest rate",
|
||||||
r: newGetRequest(ts.URL + "/api/v2/tickers?timestamp=1357045200¤cy=usd"),
|
r: newGetRequest(ts.URL + "/api/v2/tickers?timestamp=1357045200¤cy=usd"),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user