如何在ASP.NET C#中获得相应USD值的比特币价值?

时间:2016-06-24 15:00:46

标签: c# asp.net bitcoin blockchain

我希望获得相应美元价值的比特币价值并将其存储在表格或变量中。我得到了这个URL,我可以从中获得USK金额的比特币值。我搜索了区块链,然后找到了这个网址。

例如:

500usd = 0.76105818 btc

我试过了:

https://blockchain.info/tobtc?currency=USD&value=500

最后,我们要在比特币中转换的美元价值。 我想在C#(后端)中的变量中得到结果。

我该如何做到这一点?

4 个答案:

答案 0 :(得分:2)

您只需要调用服务器并解析响应。

var uri = String.Format("https://blockchain.info/tobtc?currency=USD&value={0}", 500);

WebClient client = new WebClient();
client.UseDefaultCredentials = true;
var data = client.DownloadString(uri);

var result = Convert.ToDouble(data);

答案 1 :(得分:0)

安装包CoinMarketCapClient

使用CoinMarketCap;

public static async Task<double> GetBitcoinInUsd(double usd){
            //https://api.coinmarketcap.com/v1/ticker/bitcoin/
            CoinMarketCapClient client = CoinMarketCapClient.GetInstance();
            var entity = await client.GetTickerAsync("bitcoin");
            return entity.PriceUsd * usd;
}

答案 2 :(得分:0)

var uri = String.Format(@“https://blockchain.info/tobtc?currency=USD&value= {0}”,1);

WebClient客户端=新WebClient();

client.UseDefaultCredentials = true;

var data = client.DownloadString(uri);

var result = 1 / Convert.ToDouble(data.Replace('。',',')); //你将收到1 btc = result;

答案 3 :(得分:0)

有几种API,可让您请求加密货币和/或法定货币列表的价格。问题在于所有API都以完全不同的方式进行操作。随之而来的是,任何人都可以在任何给定时间停机,因此您需要内置一些容错能力。该代码应尝试使用一个API,如果失败,则移至下一个。当然,由于价格是主观的并且本地化到给定的国家,交易所等,这一事实使情况更加复杂。因此,获得准确的值非常困难。

以下是来自CryptoCurrency.Net(https://github.com/MelbourneDeveloper/CryptoCurrency.Net/blob/master/src/CryptoCurrency.Net/APIClients/PriceEstimationClients/CryptoCompareClient.cs)的示例加密比较客户端:

public class CryptoCompareClient : PriceEstimationClientBase, IPriceEstimationClient
    {
        public CryptoCompareClient(IRestClientFactory restClientFactory) : base(restClientFactory)
        {
            RESTClient = restClientFactory.CreateRESTClient(new Uri("https://min-api.cryptocompare.com"));
        }

        protected override Func<GetPricesArgs, Task<EstimatedPricesModel>> GetPricesFunc { get; } = async a =>
        {
            var retVal = new EstimatedPricesModel();

            if (a.Currencies.ToList().Count == 0)
            {
                return retVal;
            }

            retVal.LastUpdate = DateTime.Now;

            var symbolsPart = string.Join(",", a.Currencies.Select(c => c.Name));

            var priceJson = await a.RESTClient.GetAsync<string>($"data/pricemultifull?fsyms={symbolsPart}&tsyms={a.FiatCurrency}");

            var jObject = (JObject)JsonConvert.DeserializeObject(priceJson);

            var rawNode = (JObject)jObject.First.First;

            foreach (JProperty coinNode in rawNode.Children())
            {
                var fiatNode = (JProperty)coinNode.First().First;

                var allProperties = fiatNode.First.Children().Cast<JProperty>().ToList();

                var change24HourProperty = allProperties.FirstOrDefault(p => string.Compare(p.Name, "CHANGEPCT24HOUR", true) == 0);
                var priceProperty = allProperties.FirstOrDefault(p => string.Compare(p.Name, "PRICE", true) == 0);

                var price = (decimal)priceProperty.Value;
                var change24Hour = (decimal)change24HourProperty.Value;
                retVal.Result.Add(new CoinEstimate { CurrencySymbol = new CurrencySymbol(coinNode.Name), ChangePercentage24Hour = change24Hour, FiatEstimate = price, LastUpdate = DateTime.Now });
            }

            //Extreme hack. It's better to show zero than nothing at all and get the coins stuck
            foreach (var currency in a.Currencies)
            {
                if (retVal.Result.FirstOrDefault(ce => ce.CurrencySymbol.Equals(currency)) == null)
                {
                    retVal.Result.Add(new CoinEstimate { ChangePercentage24Hour = 0, CurrencySymbol = currency, FiatEstimate = 0, LastUpdate = DateTime.Now });
                }
            }

            return retVal;
        };
}

PriceEstimationManager将快速浏览API,直到找到有效的API(https://github.com/MelbourneDeveloper/CryptoCurrency.Net/blob/master/src/CryptoCurrency.Net/APIClients/PriceEstimationClients/PriceEstimationManager.cs):

public class PriceEstimationManager
{
    #region Fields
    private readonly Collection<IPriceEstimationClient> _Clients = new Collection<IPriceEstimationClient>();
    #endregion

    #region Constructor
    public PriceEstimationManager(IRestClientFactory restClientFactory)
    {
        foreach (var typeInfo in typeof(PriceEstimationManager).GetTypeInfo().Assembly.DefinedTypes)
        {
            var type = typeInfo.AsType();

            if (typeInfo.ImplementedInterfaces.Contains(typeof(IPriceEstimationClient)))
            {
                _Clients.Add((IPriceEstimationClient)Activator.CreateInstance(type, restClientFactory));
            }
        }
    }
    #endregion

    #region Public Methods

    /// <summary>
    /// TODO: This needs to be averaged. The two current clients give wildly different values. Need to include some Australian exchanges etc.
    /// </summary>
    public async Task<EstimatedPricesModel> GetPrices(IEnumerable<CurrencySymbol> currencySymbols, string fiatCurrency)
    {
        //Lets try a client that hasn't been used before if there is one
        var client = _Clients.FirstOrDefault(c => c.AverageCallTimespan.TotalMilliseconds == 0);
        var currencies = currencySymbols.ToList();
        if (client != null)
        {
            try
            {
                return await client.GetPrices(currencies, fiatCurrency);
            }
            catch
            {
                //Do nothing
            }
        }

        foreach (var client2 in _Clients.OrderBy(c => c.SuccessRate).ThenBy(c => c.AverageCallTimespan).ToList())
        {
            try
            {
                return await client2.GetPrices(currencies, fiatCurrency);
            }
            catch (Exception ex)
            {
                Logger.Log("Error Getting Prices", ex, nameof(PriceEstimationManager));
            }
        }

        throw new Exception("Can't get prices");
    }
    #endregion
}

在更高级别,您可以使用以下代码(https://github.com/MelbourneDeveloper/CryptoCurrency.Net/blob/master/src/CryptoCurrency.Net.UnitTests/PricingTests.cs):

public async Task GetUSDBitcoinPrice()
{
    var priceEstimationManager = new PriceEstimationManager(new RESTClientFactory());
    var estimatedPrice = await priceEstimationManager.GetPrices(new List<CurrencySymbol> { CurrencySymbol.Bitcoin }, "USD");
    Console.WriteLine($"Estimate: {estimatedPrice.Result.First().FiatEstimate}");
}

随着更多定价客户的加入,它将变得越来越可靠。