From 18977f7265b465d1a2ed9d755cac47ef36c59925 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Mon, 23 Apr 2018 17:06:22 +0900 Subject: [PATCH] Optimize number of requests sent to Quadrigacx --- .../Services/Rates/QuadrigacxRateProvider.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/BTCPayServer/Services/Rates/QuadrigacxRateProvider.cs b/BTCPayServer/Services/Rates/QuadrigacxRateProvider.cs index 28e08f8f0..34ae2b12d 100644 --- a/BTCPayServer/Services/Rates/QuadrigacxRateProvider.cs +++ b/BTCPayServer/Services/Rates/QuadrigacxRateProvider.cs @@ -42,22 +42,22 @@ namespace BTCPayServer.Services.Rates public async Task> GetRatesAsync() { + var response = await _Client.GetAsync($"https://api.quadrigacx.com/v2/ticker?book=all"); + response.EnsureSuccessStatusCode(); + var rates = JObject.Parse(await response.Content.ReadAsStringAsync()); + List result = new List(); - // https://www.quadrigacx.com/api_info - foreach(var q in new[] { (Crypto: "BTC", Currency:"CAD" ), - (Crypto: "BTC", Currency:"USD" ), - (Crypto: "ETH", Currency:"CAD" ), - (Crypto: "LTC", Currency:"CAD" ), - (Crypto: "BCH", Currency:"CAD" ), - (Crypto: "BTG", Currency:"CAD" ) } - .Where(c => CryptoCode == c.Crypto) - .Select(c => (Crypto: c.Crypto, Currency: c.Currency, Rate: GetRatesAsyncCore(c.Crypto, c.Currency)))) + foreach (var prop in rates.Properties()) { - try - { - result.Add(new Rate() { Currency = q.Currency, Value = await q.Rate }); - } - catch(RateUnavailableException) { } + var rate = new Rate(); + var splitted = prop.Name.Split('_'); + var crypto = splitted[0].ToUpperInvariant(); + if (crypto != CryptoCode) + continue; + rate.Currency = splitted[1].ToUpperInvariant(); + TryToDecimal((JObject)prop.Value, out var v); + rate.Value = v; + result.Add(rate); } return result; }