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; } } }