Passed
Push — master ( f0b58d...371a9b )
by Fabian
02:51
created

KrakenApi   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 253
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 253
ccs 63
cts 63
cp 1
rs 10
wmc 19

18 Methods

Rating   Name   Duplication   Size   Complexity  
A addOrder() 0 5 1
A getAccountBalance() 0 5 1
A getTradesHistory() 0 5 1
A getTradableAssetPairs() 0 8 2
A getTradeBalance() 0 5 1
A getClosedOrders() 0 12 1
A setRequest() 0 3 1
A getTicker() 0 5 1
A getServerTime() 0 5 1
A doRequest() 0 3 1
A getOpenOrders() 0 5 1
A getAssets() 0 5 1
A getRecentTrades() 0 5 1
A getOrderBook() 0 5 1
A getSpreadData() 0 5 1
A __construct() 0 11 1
A getOrdersInfo() 0 5 1
A getOHLCData() 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\OHLCData\OHLCDataRequest;
23
use HanischIt\KrakenApi\Model\OHLCData\OHLCDataResponse;
24
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersRequest;
25
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersResponse;
26
use HanischIt\KrakenApi\Model\OrderBook\OrderBookRequest;
27
use HanischIt\KrakenApi\Model\OrderBook\OrderBookResponse;
28
use HanischIt\KrakenApi\Model\OrdersInfo\OrdersInfoRequest;
29
use HanischIt\KrakenApi\Model\OrdersInfo\OrdersInfoResponse;
30
use HanischIt\KrakenApi\Model\RecentTrades\RecentTradesRequest;
31
use HanischIt\KrakenApi\Model\RecentTrades\RecentTradesResponse;
32
use HanischIt\KrakenApi\Model\RequestInterface;
33
use HanischIt\KrakenApi\Model\RequestOptions;
34
use HanischIt\KrakenApi\Model\ResponseInterface;
35
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
36
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
37
use HanischIt\KrakenApi\Model\SpreadData\SpreadDataRequest;
38
use HanischIt\KrakenApi\Model\SpreadData\SpreadDataResponse;
39
use HanischIt\KrakenApi\Model\TradableAssetPairs\TradableAssetPairsRequest;
40
use HanischIt\KrakenApi\Model\TradableAssetPairs\TradableAssetPairsResponse;
41
use HanischIt\KrakenApi\Model\TradeBalance\TradeBalanceRequest;
42
use HanischIt\KrakenApi\Model\TradeBalance\TradeBalanceResponse;
43
use HanischIt\KrakenApi\Model\TradesHistory\TradesHistoryRequest;
44
use HanischIt\KrakenApi\Model\TradesHistory\TradesHistoryResponse;
45
use HanischIt\KrakenApi\Service\RequestService\GetRequest;
46
use HanischIt\KrakenApi\Service\RequestService\Nonce;
47
use HanischIt\KrakenApi\Service\RequestService\PostRequest;
48
use HanischIt\KrakenApi\Service\RequestService\Request;
49
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
50
51
/**
52
 * Class KrakenApi
53
 *
54
 * @package HanischIt\KrakenApi
55
 */
56
class KrakenApi
57
{
58
    /**
59
     * @var RequestOptions
60
     */
61
    private $requestOptions;
62
    /**
63
     * @var Header
64
     */
65
    private $header;
66
    /**
67
     * @var Request
68
     */
69
    private $request;
70
71
    /**
72
     * KrakenApi constructor.
73
     *
74
     * @param string $apiKey
75
     * @param string $apiSign
76
     * @param string $version
77
     * @param string $endpoint
78
     */
79 15
    public function __construct($apiKey, $apiSign, $version = '0', $endpoint = 'https://api.kraken.com/')
80
    {
81 15
        $httpClient = new HttpClient(['verify' => false]);
82 15
        $requestHeader = new RequestHeader();
83 15
        $nonce = new Nonce();
84
85 15
        $this->requestOptions = new RequestOptions($endpoint, $version);
86 15
        $postRequest = new PostRequest($httpClient, $requestHeader, $nonce);
87 15
        $getRequest = new GetRequest($httpClient, $requestHeader);
88 15
        $this->request = new Request($postRequest, $getRequest);
89 15
        $this->header = new Header($apiKey, $apiSign);
90 15
    }
91
92
    /**
93
     * @param Request $request
94
     */
95 15
    public function setRequest(Request $request)
96
    {
97 15
        $this->request = $request;
98 15
    }
99
100
    /**
101
     * @return ServerTimeResponse|ResponseInterface
102
     */
103 1
    public function getServerTime()
104
    {
105 1
        $serverTimeRequest = new ServerTimeRequest();
106
107 1
        return $this->doRequest($serverTimeRequest);
108
    }
109
110
    /**
111
     * @return AccountBalanceResponse|ResponseInterface
112
     */
113 1
    public function getAccountBalance()
114
    {
115 1
        $accountBalanceRequest = new AccountBalanceRequest();
116
117 1
        return $this->doRequest($accountBalanceRequest);
118
    }
119
120
    /**
121
     * @param string $pair
122
     * @param string $type
123
     * @param string $orderType
124
     * @param null|float $price
125
     * @param null|float $volume
126
     *
127
     * @return ResponseInterface|AddOrderResponse
128
     */
129 1
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
130
    {
131 1
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
132
133 1
        return $this->doRequest($addOrderRequest);
134
    }
135
136
    /**
137
     * @return ResponseInterface|AssetsResponse
138
     */
139 1
    public function getAssets()
140
    {
141 1
        $assetsRequest = new AssetsRequest();
142
143 1
        return $this->doRequest($assetsRequest);
144
    }
145
146
    /**
147
     * @param array $assetNames
148
     *
149
     * @return ResponseInterface|TickerResponse
150
     */
151 1
    public function getTicker(array $assetNames)
152
    {
153 1
        $tickerRequest = new TickerRequest($assetNames);
154
155 1
        return $this->doRequest($tickerRequest);
156
    }
157
158
    /**
159
     * @param string $assetPair
160
     * @param int|null $count
161
     *
162
     * @return ResponseInterface|OrderBookResponse
163
     */
164 1
    public function getOrderBook($assetPair, $count = null)
165
    {
166 1
        $orderBookRequest = new OrderBookRequest($assetPair, $count);
167
168 1
        return $this->doRequest($orderBookRequest);
169
    }
170
171
    /**
172
     * @param bool $trades
173
     * @param null $userref
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $userref is correct as it would always require null to be passed?
Loading history...
174
     *
175
     * @return ResponseInterface|OpenOrdersResponse
176
     */
177 1
    public function getOpenOrders($trades = false, $userref = null)
178
    {
179 1
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
180
181 1
        return $this->doRequest($orderBookRequest);
182
    }
183
184
    /**
185
     * @param bool $trades
186
     * @param null $userref
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $userref is correct as it would always require null to be passed?
Loading history...
187
     * @param null|string $start
188
     * @param null|string $end
189
     * @param null|int $ofs
190
     * @param null|string $closetime
191
     *
192
     * @return ClosedOrdersResponse|ResponseInterface
193
     */
194 1
    public function getClosedOrders(
195
        $trades = false,
196
        $userref = null,
197
        $start = null,
198
        $end = null,
199
        $ofs = null,
200
        $closetime = null
201
    )
202
    {
203 1
        $orderBookRequest = new ClosedOrdersRequest($trades, $userref, $start, $end, $ofs, $closetime);
204
205 1
        return $this->doRequest($orderBookRequest);
206
    }
207
208
    /**
209
     * @param string $assetPair
210
     * @param null|string $since
211
     *
212
     * @return ResponseInterface|RecentTradesResponse
213
     */
214 1
    public function getRecentTrades($assetPair, $since = null)
215
    {
216 1
        $recentTradeRequest = new RecentTradesRequest($assetPair, $since);
217
218 1
        return $this->doRequest($recentTradeRequest);
219
    }
220
221
    /**
222
     * @param string $assetPair
223
     * @param string $since
224
     * @return ResponseInterface|SpreadDataResponse
225
     */
226 1
    public function getSpreadData($assetPair, $since = null)
227
    {
228 1
        $spreadDataRequest = new SpreadDataRequest($assetPair, $since);
229
230 1
        return $this->doRequest($spreadDataRequest);
231
    }
232
233
    /**
234
     * @param string $info
235
     * @param array|null $assetPairs
236
     * @return ResponseInterface|TradableAssetPairsResponse
237
     */
238 1
    public function getTradableAssetPairs($info, array $assetPairs = null)
239
    {
240 1
        if (null !== $assetPairs) {
241 1
            $assetPairs = implode(',', $assetPairs);
242 1
        }
243 1
        $tradableAssetPairs = new TradableAssetPairsRequest($info, $assetPairs);
244
245 1
        return $this->doRequest($tradableAssetPairs);
246
    }
247
248
    /**
249
     * @param string $assetPair
250
     * @param null|int $interval
251
     * @param null|int $since
252
     * @return ResponseInterface|OHLCDataResponse
253
     */
254 1
    public function getOHLCData($assetPair, $interval = null, $since = null)
255
    {
256 1
        $ohlcDataRequest = new OHLCDataRequest($assetPair, $interval, $since);
257
258 1
        return $this->doRequest($ohlcDataRequest);
259
    }
260
261
    /**
262
     * @param array|null $txids
263
     * @param bool $trades
264
     * @param null|string $userref
265
     * @return ResponseInterface|OrdersInfoResponse
266
     */
267 1
    public function getOrdersInfo(array $txids, $trades = false, $userref = null)
268
    {
269 1
        $ordersInfoRequest = new OrdersInfoRequest($txids, $trades, $userref);
270
271 1
        return $this->doRequest($ordersInfoRequest);
272
    }
273
274
    /**
275
     * @param string $type
276
     * @param bool $trades
277
     * @param null $start
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $ofs is correct as it would always require null to be passed?
Loading history...
Documentation Bug introduced by
Are you sure the doc-type for parameter $start is correct as it would always require null to be passed?
Loading history...
Documentation Bug introduced by
Are you sure the doc-type for parameter $end is correct as it would always require null to be passed?
Loading history...
278
     * @param null $end
279
     * @param null $ofs
280
     * @return ResponseInterface|TradesHistoryResponse
281
     */
282 1
    public function getTradesHistory($type = 'all', $trades = false, $start = null, $end = null, $ofs = null)
283
    {
284 1
        $tradesHistoryRequest = new TradesHistoryRequest($type, $trades, $start, $end, $ofs);
285
286 1
        return $this->doRequest($tradesHistoryRequest);
287
    }
288
289
    /**
290
     * @param string|null $aclass
291
     * @param string|null $asset
292
     * @return ResponseInterface|TradeBalanceResponse
293
     */
294 1
    public function getTradeBalance($aclass = null, $asset = null)
295
    {
296 1
        $tradeBalanceRequest = new TradeBalanceRequest($aclass, $asset);
297
298 1
        return $this->doRequest($tradeBalanceRequest);
299
    }
300
301
    /**
302
     * @param RequestInterface $requestInterface
303
     *
304
     * @return ResponseInterface
305
     */
306 15
    private function doRequest(RequestInterface $requestInterface)
307
    {
308 15
        return $this->request->execute($requestInterface, $this->requestOptions, $this->header);
309
    }
310
}
311