Passed
Push — master ( 7e6ab9...0e6fd8 )
by Fabian
01:51
created

KrakenApi::getTicker()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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

151
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
152
153
        return $this->doRequest($orderBookRequest);
154
    }
155
156
    /**
157
     * @param bool $trades
158
     * @param null $userref
159
     *
160
     * @return ResponseInterface|OpenOrdersResponse
161
     */
162
    public function getOpenOrders($trades = false, $userref = null)
163
    {
164
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
165
166
        return $this->doRequest($orderBookRequest);
167
    }
168
169
    /**
170
     * @param bool        $trades
171
     * @param null        $userref
172
     * @param null|string $start
173
     * @param null|string $end
174
     * @param null|int    $ofs
175
     * @param null|string $closetime
176
     *
177
     * @return ClosedOrdersResponse|ResponseInterface
178
     */
179
    public function getClosedOrders($trades = false, $userref = null, $start = null, $end = null, $ofs = null, $closetime = null)
180
    {
181
        $orderBookRequest = new ClosedOrdersRequest($trades, $userref, $start, $end, $ofs, $closetime);
182
183
        return $this->doRequest($orderBookRequest);
184
    }
185
186
    /**
187
     * @param string      $assetPair
188
     * @param null|string $since
189
     *
190
     * @return ResponseInterface|RecentTradesResponse
191
     */
192
    public function getRecentTrades($assetPair, $since = null)
193
    {
194
        $recentTradeRequest = new RecentTradesRequest($assetPair, $since);
195
196
        return $this->doRequest($recentTradeRequest);
197
    }
198
199
    /**
200
     * @param RequestInterface $requestInterface
201
     *
202
     * @return ResponseInterface
203
     */
204
    private function doRequest(RequestInterface $requestInterface)
205
    {
206
        $requestOptions = new RequestOptions($this->endpoint, $this->version);
207
        $header = new Header($this->apiKey, $this->apiSign);
208
        $nonce = new Nonce();
209
        $request = new Request($this->httpClient, $this->requestHeader, $nonce);
210
211
        return $request->execute($requestInterface, $requestOptions, $header);
212
    }
213
}
214