summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Services')
-rw-r--r--Services/CurrencyClient.cs42
-rw-r--r--Services/ICurrencyClient.cs6
2 files changed, 48 insertions, 0 deletions
diff --git a/Services/CurrencyClient.cs b/Services/CurrencyClient.cs
new file mode 100644
index 0000000..ee6998b
--- /dev/null
+++ b/Services/CurrencyClient.cs
@@ -0,0 +1,42 @@
+using System.Diagnostics;
+using System.Text;
+using System.Xml.Linq;
+
+namespace ExcelAddIn.Services;
+
+public class CurrencyClient : ICurrencyClient
+{
+ private readonly HttpClient _httpClient;
+ private const string _requestAddress = @"https://www.cbr.ru/scripts/XML_daily.asp?date_req=";
+
+ public CurrencyClient(HttpClient httpClient)
+ {
+ _httpClient = httpClient;
+ }
+
+ public async Task<decimal?> GetCurrencyCourse(DateTime date)
+ {
+ string request = $"{_requestAddress}{date.Date:dd/MM/yyyy}";
+
+ HttpResponseMessage response = await _httpClient.GetAsync(request);
+ try
+ {
+ response.EnsureSuccessStatusCode();
+ var bytes = await response.Content.ReadAsByteArrayAsync();
+ var xml = Encoding.GetEncoding(1251).GetString(bytes);
+
+ XElement valCourses = XElement.Parse(xml);
+
+ decimal? exchangeRate = decimal.Parse(valCourses.Elements("Valute")
+ .Where(e => e.Element("Name").Value == "Евро")
+ .FirstOrDefault()
+ .Element("Value").Value);
+ return exchangeRate;
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.Message);
+ return null;
+ }
+ }
+}
diff --git a/Services/ICurrencyClient.cs b/Services/ICurrencyClient.cs
new file mode 100644
index 0000000..1e10473
--- /dev/null
+++ b/Services/ICurrencyClient.cs
@@ -0,0 +1,6 @@
+namespace ExcelAddIn.Services;
+
+public interface ICurrencyClient
+{
+ public Task<decimal?> GetCurrencyCourse(DateTime date);
+}