mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-07 07:26:48 +00:00
Introduce request package and integrate with exchanges
This commit is contained in:
committed by
Adrian Gallagher
parent
52dfddbb18
commit
7fc9d20fd7
@@ -3,6 +3,7 @@ package kraken
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -11,6 +12,7 @@ import (
|
||||
"github.com/thrasher-/gocryptotrader/common"
|
||||
"github.com/thrasher-/gocryptotrader/config"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges/request"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges/ticker"
|
||||
)
|
||||
|
||||
@@ -38,6 +40,9 @@ const (
|
||||
krakenTradeVolume = "TradeVolume"
|
||||
krakenOrderCancel = "CancelOrder"
|
||||
krakenOrderPlace = "AddOrder"
|
||||
|
||||
krakenAuthRate = 0
|
||||
krakenUnauthRate = 0
|
||||
)
|
||||
|
||||
// Kraken is the overarching type across the alphapoint package
|
||||
@@ -45,6 +50,7 @@ type Kraken struct {
|
||||
exchange.Base
|
||||
CryptoFee, FiatFee float64
|
||||
Ticker map[string]Ticker
|
||||
*request.Handler
|
||||
}
|
||||
|
||||
// SetDefaults sets current default settings
|
||||
@@ -64,6 +70,8 @@ func (k *Kraken) SetDefaults() {
|
||||
k.ConfigCurrencyPairFormat.Uppercase = true
|
||||
k.AssetTypes = []string{ticker.Spot}
|
||||
k.SupportsAutoPairUpdating = true
|
||||
k.Handler = new(request.Handler)
|
||||
k.SetRequestHandler(k.Name, krakenAuthRate, krakenUnauthRate, new(http.Client))
|
||||
}
|
||||
|
||||
// Setup sets current exchange configuration
|
||||
@@ -108,7 +116,7 @@ func (k *Kraken) GetServerTime(unixTime bool) (interface{}, error) {
|
||||
var result GeneralResponse
|
||||
path := fmt.Sprintf("%s/%s/public/%s", krakenAPIURL, krakenAPIVersion, krakenServerTime)
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, k.Verbose, &result)
|
||||
err := k.SendHTTPRequest(path, &result)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("getServerTime() error %s", err)
|
||||
}
|
||||
@@ -124,7 +132,7 @@ func (k *Kraken) GetAssets() (interface{}, error) {
|
||||
var result GeneralResponse
|
||||
path := fmt.Sprintf("%s/%s/public/%s", krakenAPIURL, krakenAPIVersion, krakenAssets)
|
||||
|
||||
return result.Result, common.SendHTTPGetRequest(path, true, k.Verbose, &result)
|
||||
return result.Result, k.SendHTTPRequest(path, &result)
|
||||
}
|
||||
|
||||
// GetAssetPairs returns a full asset pair list
|
||||
@@ -137,7 +145,7 @@ func (k *Kraken) GetAssetPairs() (map[string]AssetPairs, error) {
|
||||
response := Response{}
|
||||
path := fmt.Sprintf("%s/%s/public/%s", krakenAPIURL, krakenAPIVersion, krakenAssetPairs)
|
||||
|
||||
return response.Result, common.SendHTTPGetRequest(path, true, k.Verbose, &response)
|
||||
return response.Result, k.SendHTTPRequest(path, &response)
|
||||
}
|
||||
|
||||
// GetTicker returns ticker information from kraken
|
||||
@@ -154,7 +162,7 @@ func (k *Kraken) GetTicker(symbol string) (Ticker, error) {
|
||||
resp := Response{}
|
||||
path := fmt.Sprintf("%s/%s/public/%s?%s", krakenAPIURL, krakenAPIVersion, krakenTicker, values.Encode())
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, k.Verbose, &resp)
|
||||
err := k.SendHTTPRequest(path, &resp)
|
||||
if err != nil {
|
||||
return ticker, err
|
||||
}
|
||||
@@ -192,7 +200,7 @@ func (k *Kraken) GetOHLC(symbol string) ([]OpenHighLowClose, error) {
|
||||
|
||||
path := fmt.Sprintf("%s/%s/public/%s?%s", krakenAPIURL, krakenAPIVersion, krakenOHLC, values.Encode())
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, k.Verbose, &result)
|
||||
err := k.SendHTTPRequest(path, &result)
|
||||
if err != nil {
|
||||
return OHLC, err
|
||||
}
|
||||
@@ -238,7 +246,7 @@ func (k *Kraken) GetDepth(symbol string) (Orderbook, error) {
|
||||
|
||||
path := fmt.Sprintf("%s/%s/public/%s?%s", krakenAPIURL, krakenAPIVersion, krakenDepth, values.Encode())
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, k.Verbose, &result)
|
||||
err := k.SendHTTPRequest(path, &result)
|
||||
if err != nil {
|
||||
return orderBook, err
|
||||
}
|
||||
@@ -297,7 +305,7 @@ func (k *Kraken) GetTrades(symbol string) ([]RecentTrades, error) {
|
||||
|
||||
path := fmt.Sprintf("%s/%s/public/%s?%s", krakenAPIURL, krakenAPIVersion, krakenTrades, values.Encode())
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, k.Verbose, &result)
|
||||
err := k.SendHTTPRequest(path, &result)
|
||||
if err != nil {
|
||||
return recentTrades, err
|
||||
}
|
||||
@@ -338,7 +346,7 @@ func (k *Kraken) GetSpread(symbol string) ([]Spread, error) {
|
||||
|
||||
path := fmt.Sprintf("%s/%s/public/%s?%s", krakenAPIURL, krakenAPIVersion, krakenSpread, values.Encode())
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, k.Verbose, &response)
|
||||
err := k.SendHTTPRequest(path, &response)
|
||||
if err != nil {
|
||||
return peanutButter, err
|
||||
}
|
||||
@@ -568,6 +576,11 @@ func (k *Kraken) CancelOrder(orderID int64) (interface{}, error) {
|
||||
return k.SendAuthenticatedHTTPRequest(krakenOrderCancel, values)
|
||||
}
|
||||
|
||||
// SendHTTPRequest sends an unauthenticated HTTP requests
|
||||
func (k *Kraken) SendHTTPRequest(path string, result interface{}) error {
|
||||
return k.SendPayload("GET", path, nil, nil, result, false, k.Verbose)
|
||||
}
|
||||
|
||||
// SendAuthenticatedHTTPRequest sends an authenticated HTTP request
|
||||
func (k *Kraken) SendAuthenticatedHTTPRequest(method string, values url.Values) (interface{}, error) {
|
||||
if !k.AuthenticatedAPISupport {
|
||||
@@ -599,20 +612,11 @@ func (k *Kraken) SendAuthenticatedHTTPRequest(method string, values url.Values)
|
||||
headers["API-Key"] = k.APIKey
|
||||
headers["API-Sign"] = signature
|
||||
|
||||
rawResp, err := common.SendHTTPRequest("POST", krakenAPIURL+path, headers, strings.NewReader(values.Encode()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if k.Verbose {
|
||||
log.Printf("Received raw: \n%s\n", rawResp)
|
||||
}
|
||||
|
||||
var resp interface{}
|
||||
|
||||
err = common.JSONDecode([]byte(rawResp), &resp)
|
||||
err = k.SendPayload("POST", krakenAPIURL+path, headers, strings.NewReader(values.Encode()), &resp, true, k.Verbose)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return resp, err
|
||||
}
|
||||
|
||||
data := resp.(map[string]interface{})
|
||||
|
||||
Reference in New Issue
Block a user