Optimize number of requests sent to Quadrigacx

This commit is contained in:
nicolas.dorier 2018-04-23 17:06:22 +09:00
parent 8a88b44e98
commit 18977f7265

View file

@ -42,22 +42,22 @@ namespace BTCPayServer.Services.Rates
public async Task<ICollection<Rate>> GetRatesAsync() public async Task<ICollection<Rate>> 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<Rate> result = new List<Rate>(); List<Rate> result = new List<Rate>();
// https://www.quadrigacx.com/api_info foreach (var prop in rates.Properties())
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))))
{ {
try var rate = new Rate();
{ var splitted = prop.Name.Split('_');
result.Add(new Rate() { Currency = q.Currency, Value = await q.Rate }); var crypto = splitted[0].ToUpperInvariant();
} if (crypto != CryptoCode)
catch(RateUnavailableException) { } continue;
rate.Currency = splitted[1].ToUpperInvariant();
TryToDecimal((JObject)prop.Value, out var v);
rate.Value = v;
result.Add(rate);
} }
return result; return result;
} }