From c96ac659901e3aa97703fe00856cf14b5630887d Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Fri, 9 Jun 2023 07:27:43 +0300 Subject: Initial --- Services/CurrencyClient.cs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Services/CurrencyClient.cs (limited to 'Services/CurrencyClient.cs') 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 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; + } + } +} -- cgit v1.2.3