Completed
Push — master ( 866668...e2e181 )
by Fabian
03:25
created

KrakenApi::getOrderBook()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 9.4285
c 0
b 0
f 0
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\GetRequest;
38
use HanischIt\KrakenApi\Service\RequestService\Nonce;
39
use HanischIt\KrakenApi\Service\RequestService\PostRequest;
40
use HanischIt\KrakenApi\Service\RequestService\Request;
41
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
42
43
/**
44
 * Class KrakenApi
45
 *
46
 * @package HanischIt\KrakenApi
47
 */
48
class KrakenApi
49
{
50
    /**
51
     * @var RequestOptions
52
     */
53
    private $requestOptions;
54
    /**
55
     * @var Header
56
     */
57
    private $header;
58
    /**
59
     * @var Request
60
     */
61
    private $request;
62
63
    /**
64
     * KrakenApi constructor.
65
     *
66
     * @param string $apiKey
67
     * @param string $apiSign
68
     * @param string $version
69
     * @param string $endpoint
70
     */
71 11
    public function __construct($apiKey, $apiSign, $version = '0', $endpoint = 'https://api.kraken.com/')
72
    {
73 11
        $httpClient = new HttpClient(['verify' => false]);
74 11
        $requestHeader = new RequestHeader();
75 11
        $nonce = new Nonce();
76
77 11
        $this->requestOptions = new RequestOptions($endpoint, $version);
78 11
        $postRequest = new PostRequest($httpClient, $requestHeader, $nonce);
79 11
        $getRequest = new GetRequest($httpClient, $requestHeader);
80 11
        $this->request = new Request($postRequest, $getRequest);
81 11
        $this->header = new Header($apiKey, $apiSign);
82 11
    }
83
84
    /**
85
     * @param Request $request
86
     */
87 11
    public function setRequest(Request $request)
88
    {
89 11
        $this->request = $request;
90 11
    }
91
92
    /**
93
     * @return ServerTimeResponse|ResponseInterface
94
     */
95 1
    public function getServerTime()
96
    {
97 1
        $serverTimeRequest = new ServerTimeRequest();
98
99 1
        return $this->doRequest($serverTimeRequest);
100
    }
101
102
    /**
103
     * @return AccountBalanceResponse|ResponseInterface
104
     */
105 1
    public function getAccountBalance()
106
    {
107 1
        $accountBalanceRequest = new AccountBalanceRequest();
108
109 1
        return $this->doRequest($accountBalanceRequest);
110
    }
111
112
    /**
113
     * @param string $pair
114
     * @param string $type
115
     * @param string $orderType
116
     * @param null|float $price
117
     * @param null|float $volume
118
     *
119
     * @return ResponseInterface|AddOrderResponse
120
     */
121 1
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
122
    {
123 1
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
124
125 1
        return $this->doRequest($addOrderRequest);
126
    }
127
128
    /**
129
     * @return ResponseInterface|AssetsResponse
130
     */
131 1
    public function getAssets()
132
    {
133 1
        $assetsRequest = new AssetsRequest();
134
135 1
        return $this->doRequest($assetsRequest);
136
    }
137
138
    /**
139
     * @param array $assetNames
140
     *
141
     * @return ResponseInterface|TickerResponse
142
     */
143 1
    public function getTicker(array $assetNames)
144
    {
145 1
        $tickerRequest = new TickerRequest($assetNames);
146
147 1
        return $this->doRequest($tickerRequest);
148
    }
149
150
    /**
151
     * @param string $assetPair
152
     * @param int|null $count
153
     *
154
     * @return ResponseInterface|OrderBookResponse
155
     */
156 1
    public function getOrderBook($assetPair, $count = null)
157
    {
158 1
        $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

158
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
159
160 1
        return $this->doRequest($orderBookRequest);
161
    }
162
163
    /**
164
     * @param bool $trades
165
     * @param null $userref
166
     *
167
     * @return ResponseInterface|OpenOrdersResponse
168
     */
169 1
    public function getOpenOrders($trades = false, $userref = null)
170
    {
171 1
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
172
173 1
        return $this->doRequest($orderBookRequest);
174
    }
175
176
    /**
177
     * @param bool $trades
178
     * @param null $userref
179
     * @param null|string $start
180
     * @param null|string $end
181
     * @param null|int $ofs
182
     * @param null|string $closetime
183
     *
184
     * @return ClosedOrdersResponse|ResponseInterface
185
     */
186 1
    public function getClosedOrders(
187
        $trades = false,
188
        $userref = null,
189
        $start = null,
190
        $end = null,
191
        $ofs = null,
192
        $closetime = null
193
    )
194
    {
195 1
        $orderBookRequest = new ClosedOrdersRequest($trades, $userref, $start, $end, $ofs, $closetime);
196
197 1
        return $this->doRequest($orderBookRequest);
198
    }
199
200
    /**
201
     * @param string $assetPair
202
     * @param null|string $since
203
     *
204
     * @return ResponseInterface|RecentTradesResponse
205
     */
206 1
    public function getRecentTrades($assetPair, $since = null)
207
    {
208 1
        $recentTradeRequest = new RecentTradesRequest($assetPair, $since);
209
210 1
        return $this->doRequest($recentTradeRequest);
211
    }
212
213
    /**
214
     * @param string $assetPair
215
     * @param string $since
216
     * @return ResponseInterface|SpreadDataResponse
217
     */
218 1
    public function getSpreadData($assetPair, $since = null)
219
    {
220 1
        $spreadDataRequest = new SpreadDataRequest($assetPair, $since);
221
222 1
        return $this->doRequest($spreadDataRequest);
223
    }
224
225
    /**
226
     * @param string $info
227
     * @param array|null $assetPairs
228
     * @return ResponseInterface|TradableAssetPairsResponse
229
     */
230 1
    public function getTradableAssetPairs($info, array $assetPairs = null)
231
    {
232 1
        if (null !== $assetPairs) {
233 1
            $assetPairs = implode(',', $assetPairs);
234 1
        }
235 1
        $tradableAssetPairs = new TradableAssetPairsRequest($info, $assetPairs);
236
237 1
        return $this->doRequest($tradableAssetPairs);
238
    }
239
240
    /**
241
     * @param RequestInterface $requestInterface
242
     *
243
     * @return ResponseInterface
244
     */
245 11
    private function doRequest(RequestInterface $requestInterface)
246
    {
247 11
        return $this->request->execute($requestInterface, $this->requestOptions, $this->header);
248
    }
249
}
250