btcpayserver/BTCPayServer.Rating/Providers/BitpayRateProvider.cs

36 lines
1.3 KiB
C#
Raw Normal View History

using System.Linq;
2017-09-13 15:47:34 +09:00
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
2018-05-03 03:32:42 +09:00
using BTCPayServer.Rating;
using System.Threading;
using System.Net.Http;
using Newtonsoft.Json.Linq;
2017-09-13 15:47:34 +09:00
namespace BTCPayServer.Services.Rates
2017-09-13 15:47:34 +09:00
{
public class BitpayRateProvider : IRateProvider, IHasExchangeName
{
2018-05-03 03:32:42 +09:00
public const string BitpayName = "bitpay";
private readonly HttpClient _httpClient;
public BitpayRateProvider(HttpClient httpClient)
{
_httpClient = httpClient ?? new HttpClient();
}
2017-09-13 15:47:34 +09:00
public string ExchangeName => BitpayName;
public async Task<ExchangeRates> GetRatesAsync(CancellationToken cancellationToken)
{
var response = await _httpClient.GetAsync("https://bitpay.com/rates", cancellationToken);
var jarray = (JArray)(await response.Content.ReadAsAsync<JObject>(cancellationToken))["data"];
return new ExchangeRates(jarray
.Children<JObject>()
.Select(jobj => new ExchangeRate(ExchangeName, new CurrencyPair("BTC", jobj["code"].Value<string>()), new BidAsk(jobj["rate"].Value<decimal>())))
.Where(o => o.CurrencyPair.Right != "BTC")
.ToArray());
}
}
2017-09-13 15:47:34 +09:00
}