diff --git a/BTCPayServer.Rating/Providers/YadioRateProvider.cs b/BTCPayServer.Rating/Providers/YadioRateProvider.cs new file mode 100644 index 000000000..b5bf177d7 --- /dev/null +++ b/BTCPayServer.Rating/Providers/YadioRateProvider.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using BTCPayServer.Rating; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; + +namespace BTCPayServer.Services.Rates +{ + public class YadioRateProvider : IRateProvider + { + private readonly HttpClient _httpClient; + public YadioRateProvider(HttpClient httpClient) + { + _httpClient = httpClient ?? new HttpClient(); + } + + public async Task GetRatesAsync(CancellationToken cancellationToken) + { + var response = await _httpClient.GetAsync("https://api.yadio.io/exrates/BTC", cancellationToken); + response.EnsureSuccessStatusCode(); + var jobj = await response.Content.ReadAsAsync(cancellationToken); + var results = jobj["BTC"]; + var list = new List(); + foreach (var item in results) + { + + string name = ((JProperty)item).Name; + int value = results[name].Value(); + + list.Add(new PairRate(new CurrencyPair("BTC", name), new BidAsk(value))); + } + + return list.ToArray(); + } + } +} diff --git a/BTCPayServer.Rating/Services/RateProviderFactory.cs b/BTCPayServer.Rating/Services/RateProviderFactory.cs index b1d3808ac..ce9fbf9fd 100644 --- a/BTCPayServer.Rating/Services/RateProviderFactory.cs +++ b/BTCPayServer.Rating/Services/RateProviderFactory.cs @@ -84,6 +84,7 @@ namespace BTCPayServer.Services.Rates yield return new AvailableRateProvider("coinbasepro", "Coinbase Pro", "https://api.pro.coinbase.com/products"); yield return new AvailableRateProvider("argoneum", "Argoneum", "https://rates.argoneum.net/rates"); + yield return new AvailableRateProvider("yadio", "Yadio", "https://api.yadio.io/exrates/BTC"); } void InitExchanges() { @@ -104,6 +105,7 @@ namespace BTCPayServer.Services.Rates Providers.Add("ripio", new RipioExchangeProvider(_httpClientFactory?.CreateClient("EXCHANGE_RIPIO"))); Providers.Add("cryptomarket", new CryptoMarketExchangeRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_CRYPTOMARKET"))); Providers.Add("bitflyer", new BitflyerRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITFLYER"))); + Providers.Add("yadio", new YadioRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_YADIO"))); // Providers.Add("argoneum", new ArgoneumRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_ARGONEUM"))); diff --git a/BTCPayServer.Tests/ThirdPartyTests.cs b/BTCPayServer.Tests/ThirdPartyTests.cs index 94dd9a711..4b0f6ed8a 100644 --- a/BTCPayServer.Tests/ThirdPartyTests.cs +++ b/BTCPayServer.Tests/ThirdPartyTests.cs @@ -126,6 +126,12 @@ namespace BTCPayServer.Tests e => e.CurrencyPair == new CurrencyPair("BTC", "CLP") && e.BidAsk.Bid > 1.0m); // 1 BTC will always be more than 1 CLP } + else if (name == "yadio") + { + Assert.Contains(exchangeRates.ByExchange[name], + e => e.CurrencyPair == new CurrencyPair("BTC", "LBP") && + e.BidAsk.Bid > 1.0m); // 1 BTC will always be more than 1 LBP (I hope) + } else { if (name == "kraken")