Как получить значение биткойна для соответствующего значения COP в ASP.NET C#?

Я хочу получить значение биткойна для соответствующего значения копа и сохранить его в таблице или переменной. Я получил этот URL, с которого я могу получить значение биткойна для суммы в долларах США. Я искал на bitpay, и я нашел этот URL.

Например:

100.000 коп = 0,0248 бат

https://bitpay.com/rates/COP

https://bitpay.com/downloads/bitpayApi.pdf

https://bitpay.com/api

Я старался:

вар ури =

String.Format (" https://bitpay.com/rates/COP", Convert.ToDecimal (textBox1.Text));

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

        var result = Convert.ToDouble(data);

        textBox3.Text = data;

в конце, его значение COP, которое мы хотим конвертировать в биткойны. Я хочу получить результат в переменной в C# (бэкэнд).

Как я могу сделать это?

1 ответ

Во-первых, вам нужно понять, как API реагирует на вас. Он отвечает JSON, которому всегда предшествует data: {}. Вы можете использовать Newtonsoft.Json и метод JObject.Parse(), чтобы найти токен данных и выбрать его свойства. Затем вы можете десериализовать это с помощью Newtonsoft.Json в класс, который моделирует ставки. У тарифа есть код, имя и свойства тарифа.

Давайте объявим наш класс:

public class RateModel {
    public string Code { get; set; }

    public string Name { get; set; }

    public decimal Rate { get; set; }
}

Теперь нам нужно правильно вызвать API, чтобы получить ответ. Я сделал это в небольшом консольном приложении следующим образом:

private static void Main(string[] args) {
    try {
        string cryptoCurrencyCode = "BTC";
        string countryCurrencyCode = "COP";
        string uri = string.Format("https://bitpay.com/rates/{0}/{1}", cryptoCurrencyCode, countryCurrencyCode);

        var client = new WebClient();
        client.UseDefaultCredentials = true;

        //Everything is returned inside of a "data" property, so let's select that token.
        string data = JObject.Parse(client.DownloadString(uri)).SelectToken("data").ToString();
        var rate = JsonConvert.DeserializeObject<RateModel>(data);

        Console.WriteLine("1 {0} = {1} {2}", cryptoCurrencyCode, rate.Rate, countryCurrencyCode);
    } catch (Exception ex) {
        Console.WriteLine("Caught exception: {0}", ex.ToString());
    } finally {
        Console.WriteLine("Press Enter to exit.");
        Console.ReadLine();
    }
}

И, конечно, если все, что нас интересует, это скорость, и мы не заботимся о представлении каких-либо других данных, таких как имя или код, то мы могли бы опустить создание класса для размещения других данных и просто выбрать сам этот токен:

        var json = JObject.Parse(client.DownloadString(uri));
        decimal rate = 0;
        bool parsed = Decimal.TryParse(json.SelectToken("data").SelectToken("rate").ToString(), out rate);

        if(!parsed) {
            Console.WriteLine("Failed to parse the rate.");
        } else {
            Console.WriteLine("1 {0} = {1} {2}", cryptoCurrencyCode, rate, countryCurrencyCode);
        }
Другие вопросы по тегам