Completed
Push — master ( bd4ff0...d83768 )
by Fabian
03:55
created

KrakenApi   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 204
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
dl 0
loc 204
ccs 0
cts 81
cp 0
rs 10
c 0
b 0
f 0
wmc 14

13 Methods

Rating   Name   Duplication   Size   Complexity  
A addOrder() 0 5 1
A getAccountBalance() 0 5 1
A getTradableAssetPairs() 0 8 2
A getClosedOrders() 0 12 1
A getTicker() 0 5 1
A getServerTime() 0 5 1
A doRequest() 0 8 1
A getOpenOrders() 0 5 1
A getAssets() 0 5 1
A getRecentTrades() 0 5 1
A getOrderBook() 0 5 1
A __construct() 0 8 1
A getSpreadData() 0 5 1
1
<?php
2
/**
3
 * @author  Fabian Hanisch
4
 * @since   16.07.2017 02:56
5
 * @version 1.0
6
 */
7
8
namespace HanischIt\KrakenApi;
9
10
use HanischIt\KrakenApi\External\HttpClient;
11
use HanischIt\KrakenApi\Model\AccountBalance\AccountBalanceRequest;
12
use HanischIt\KrakenApi\Model\AccountBalance\AccountBalanceResponse;
13
use HanischIt\KrakenApi\Model\AddOrder\AddOrderRequest;
14
use HanischIt\KrakenApi\Model\AddOrder\AddOrderResponse;
15
use HanischIt\KrakenApi\Model\Assets\AssetsRequest;
16
use HanischIt\KrakenApi\Model\Assets\AssetsResponse;
17
use HanischIt\KrakenApi\Model\ClosedOrders\ClosedOrdersRequest;
18
use HanischIt\KrakenApi\Model\ClosedOrders\ClosedOrdersResponse;
19
use HanischIt\KrakenApi\Model\GetTicker\TickerRequest;
20
use HanischIt\KrakenApi\Model\GetTicker\TickerResponse;
21
use HanischIt\KrakenApi\Model\Header;
22
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersRequest;
23
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersResponse;
24
use HanischIt\KrakenApi\Model\OrderBook\OrderBookRequest;
25
use HanischIt\KrakenApi\Model\OrderBook\OrderBookResponse;
26
use HanischIt\KrakenApi\Model\RecentTrades\RecentTradesRequest;
27
use HanischIt\KrakenApi\Model\RecentTrades\RecentTradesResponse;
28
use HanischIt\KrakenApi\Model\RequestInterface;
29
use HanischIt\KrakenApi\Model\RequestOptions;
30
use HanischIt\KrakenApi\Model\ResponseInterface;
31
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
32
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
33
use HanischIt\KrakenApi\Model\SpreadData\SpreadDataRequest;
34
use HanischIt\KrakenApi\Model\SpreadData\SpreadDataResponse;
35
use HanischIt\KrakenApi\Model\TradableAssetPairs\TradableAssetPairsRequest;
36
use HanischIt\KrakenApi\Model\TradableAssetPairs\TradableAssetPairsResponse;
37
use HanischIt\KrakenApi\Service\RequestService\Nonce;
38
use HanischIt\KrakenApi\Service\RequestService\Request;
39
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
40
41
/**
42
 * Class KrakenApi
43
 *
44
 * @package HanischIt\KrakenApi
45
 */
46
class KrakenApi
47
{
48
    /**
49
     * @var HttpClient
50
     */
51
    private $httpClient;
52
    /**
53
     * @var RequestHeader
54
     */
55
    private $requestHeader;
56
    /**
57
     * @var string
58
     */
59
    private $apiKey;
60
    /**
61
     * @var string
62
     */
63
    private $apiSign;
64
    /**
65
     * @var string
66
     */
67
    private $version;
68
    /**
69
     * @var string
70
     */
71
    private $endpoint;
72
73
    /**
74
     * KrakenApi constructor.
75
     *
76
     * @param string $apiKey
77
     * @param string $apiSign
78
     */
79
    public function __construct($apiKey, $apiSign)
80
    {
81
        $this->httpClient = new HttpClient(['verify' => false]);
82
        $this->requestHeader = new RequestHeader();
83
        $this->endpoint = 'https://api.kraken.com/';
84
        $this->version = '0';
85
        $this->apiKey = $apiKey;
86
        $this->apiSign = $apiSign;
87
    }
88
89
    /**
90
     * @return ServerTimeResponse|ResponseInterface
91
     */
92
    public function getServerTime()
93
    {
94
        $serverTimeRequest = new ServerTimeRequest();
95
96
        return $this->doRequest($serverTimeRequest);
97
    }
98
99
    /**
100
     * @return AccountBalanceResponse|ResponseInterface
101
     */
102
    public function getAccountBalance()
103
    {
104
        $accountBalanceRequest = new AccountBalanceRequest();
105
106
        return $this->doRequest($accountBalanceRequest);
107
    }
108
109
    /**
110
     * @param string $pair
111
     * @param string $type
112
     * @param string $orderType
113
     * @param null|float $price
114
     * @param null|float $volume
115
     *
116
     * @return ResponseInterface|AddOrderResponse
117
     */
118
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
119
    {
120
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
121
122
        return $this->doRequest($addOrderRequest);
123
    }
124
125
    /**
126
     * @return ResponseInterface|AssetsResponse
127
     */
128
    public function getAssets()
129
    {
130
        $assetsRequest = new AssetsRequest();
131
132
        return $this->doRequest($assetsRequest);
133
    }
134
135
    /**
136
     * @param array $assetNames
137
     *
138
     * @return ResponseInterface|TickerResponse
139
     */
140
    public function getTicker(array $assetNames)
141
    {
142
        $tickerRequest = new TickerRequest($assetNames);
143
144
        return $this->doRequest($tickerRequest);
145
    }
146
147
    /**
148
     * @param string $assetPair
149
     * @param int|null $count
150
     *
151
     * @return ResponseInterface|OrderBookResponse
152
     */
153
    public function getOrderBook($assetPair, $count = null)
154
    {
155
        $orderBookRequest = new OrderBookRequest($assetPair, $count);
0 ignored issues
show
Bug introduced by
It seems like $count can also be of type integer; however, parameter $count of HanischIt\KrakenApi\Mode...kRequest::__construct() does only seem to accept null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

155
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
156
157
        return $this->doRequest($orderBookRequest);
158
    }
159
160
    /**
161
     * @param bool $trades
162
     * @param null $userref
163
     *
164
     * @return ResponseInterface|OpenOrdersResponse
165
     */
166
    public function getOpenOrders($trades = false, $userref = null)
167
    {
168
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
169
170
        return $this->doRequest($orderBookRequest);
171
    }
172
173
    /**
174
     * @param bool $trades
175
     * @param null $userref
176
     * @param null|string $start
177
     * @param null|string $end
178
     * @param null|int $ofs
179
     * @param null|string $closetime
180
     *
181
     * @return ClosedOrdersResponse|ResponseInterface
182
     */
183
    public function getClosedOrders(
184
        $trades = false,
185
        $userref = null,
186
        $start = null,
187
        $end = null,
188
        $ofs = null,
189
        $closetime = null
190
    )
191
    {
192
        $orderBookRequest = new ClosedOrdersRequest($trades, $userref, $start, $end, $ofs, $closetime);
193
194
        return $this->doRequest($orderBookRequest);
195
    }
196
197
    /**
198
     * @param string $assetPair
199
     * @param null|string $since
200
     *
201
     * @return ResponseInterface|RecentTradesResponse
202
     */
203
    public function getRecentTrades($assetPair, $since = null)
204
    {
205
        $recentTradeRequest = new RecentTradesRequest($assetPair, $since);
206
207
        return $this->doRequest($recentTradeRequest);
208
    }
209
210
    /**
211
     * @param string $assetPair
212
     * @param string $since
213
     * @return ResponseInterface|SpreadDataResponse
214
     */
215
    public function getSpreadData($assetPair, $since = null)
216
    {
217
        $spreadDataRequest = new SpreadDataRequest($assetPair, $since);
218
219
        return $this->doRequest($spreadDataRequest);
220
    }
221
222
    /**
223
     * @param string $info
224
     * @param array|null $assetPairs
225
     * @return ResponseInterface|TradableAssetPairsResponse
226
     */
227
    public function getTradableAssetPairs($info, array $assetPairs = null)
228
    {
229
        if (null !== $assetPairs) {
230
            $assetPairs = implode(',', $assetPairs);
231
        }
232
        $tradableAssetPairs = new TradableAssetPairsRequest($info, $assetPairs);
0 ignored issues
show
Bug introduced by
It seems like $assetPairs can also be of type string; however, parameter $pair of HanischIt\KrakenApi\Mode...sRequest::__construct() does only seem to accept null|array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

232
        $tradableAssetPairs = new TradableAssetPairsRequest($info, /** @scrutinizer ignore-type */ $assetPairs);
Loading history...
233
234
        return $this->doRequest($tradableAssetPairs);
235
    }
236
237
    /**
238
     * @param RequestInterface $requestInterface
239
     *
240
     * @return ResponseInterface
241
     */
242
    private function doRequest(RequestInterface $requestInterface)
243
    {
244
        $requestOptions = new RequestOptions($this->endpoint, $this->version);
245
        $header = new Header($this->apiKey, $this->apiSign);
246
        $nonce = new Nonce();
247
        $request = new Request($this->httpClient, $this->requestHeader, $nonce);
248
249
        return $request->execute($requestInterface, $requestOptions, $header);
250
    }
251
}
252