ApiClient::getXmlExchangesRates()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
/**
3
 * (c) itmedia.by <[email protected]>
4
 */
5
6
namespace Submarine\NbrbExchangeRatesBundle\Client;
7
8
use GuzzleHttp\Client;
9
10
11
class ApiClient
12
{
13
14
    const CACHE_KEY = 'nbrb-xml-cache';
15
16
17
    /**
18
     * Получение официального курса белорусского рубля по отношению к иностранным валютам на определенную дату
19
     *
20
     * @var string
21
     */
22
    private $urlExchangeRates = 'http://www.nbrb.by/Services/XmlExRates.aspx';
23
24
    /**
25
     * Получение динамики официального курса белорусского рубля по отношению к заданной иностранной валюте,
26
     * устанавливаемого Национальным банком Республики Беларусь (не более чем за 365 дней):
27
     *
28
     * @var string
29
     */
30
    private $urlExchangeRatesDynamic = 'http://www.nbrb.by/Services/XmlExRatesDyn.aspx';
31
32
    /**
33
     * @var Client
34
     */
35
    private $client;
36
37
    /**
38
     * @var int
39
     */
40
    private $httpConnectTimeout;
41
42
    /**
43
     * @var int
44
     */
45
    private $httpTimeout;
46
47
    /**
48
     * ApiClient constructor.
49
     * @param string $urlExchangeRates
50
     * @param string $urlExchangeRatesDynamic
51
     * @param int $httpConnectTimeout
52
     * @param int $httpTimeout
53
     */
54
    public function __construct($urlExchangeRates, $urlExchangeRatesDynamic, $httpConnectTimeout, $httpTimeout)
55
    {
56
        $this->urlExchangeRates = $urlExchangeRates;
57
        $this->urlExchangeRatesDynamic = $urlExchangeRatesDynamic;
58
        $this->httpConnectTimeout = $httpConnectTimeout;
59
        $this->httpTimeout = $httpTimeout;
60
    }
61
62
63
    /**
64
     * @return Client
65
     */
66
    public function getClient()
67
    {
68
        if (!$this->client) {
69
            $this->client = new Client();
70
        }
71
72
        return $this->client;
73
    }
74
75
76
    /**
77
     * Курсы валют за дату
78
     *
79
     * @param \DateTime $date
80
     * @param bool $quotName
81
     *
82
     * @return string
83
     *
84
     * @throws \Exception
85
     */
86
    public function getXmlExchangesRates(\DateTime $date, $quotName = false)
87
    {
88
89
        $query = [
90
            'ondate' => $date->format('m/d/Y')
91
        ];
92
93
        if ($quotName === true) {
94
            $query['mode'] = 1;
95
        }
96
97
        return $this->getResponseBody($this->urlExchangeRates, $query);
98
    }
99
100
101
    /**
102
     * Динамика курса
103
     *
104
     * @param $currencyId
105
     * @param \DateTime $firstDate
106
     * @param \DateTime $lastDate
107
     *
108
     * @return string
109
     *
110
     * @throws \Exception
111
     */
112
    public function getXmlExchangesRatesDynamic($currencyId, \DateTime $firstDate, \DateTime $lastDate)
113
    {
114
        $query = [
115
            'curId' => $currencyId,
116
            'fromDate' => $firstDate->format('m/d/Y'),
117
            'toDate' => $lastDate->format('m/d/Y'),
118
        ];
119
120
        return $this->getResponseBody($this->urlExchangeRatesDynamic, $query);
121
    }
122
123
124
    /**
125
     * Возвращает XML документ
126
     * @param $url
127
     * @param $query
128
     * @return string
129
     *
130
     * @throws \Exception
131
     */
132
    private function getResponseBody($url, $query)
133
    {
134
        $options = [];
135
        $options['query'] = $query;
136
        $options['connect_timeout'] = $this->httpConnectTimeout;
137
        $options['timeout'] = $this->httpTimeout;
138
139
        $response = $this->getClient()->get($url, $options);
140
141
        return $response->getBody()->read($response->getBody()->getSize());
142
    }
143
144
}