-4

我想获取相应 cop 值的比特币值并将其存储在表或变量中。我得到了这个 URL,我可以从中获得美元金额的比特币值。我在 bitpay 上搜索并找到了这个 URL。

例如:

100.000 警察 = 0,0248 比特币

https://bitpay.com/rates/COP

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

https://bitpay.com/api#resource-Rates

我试过了:

变量 uri=

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#(后端)的变量中得到结果。

我怎样才能做到这一点?

4

1 回答 1

0

首先,您需要了解 API 如何响应您。它以始终以数据为前缀的 JSON 响应:{}。您可以使用 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);
        }
于 2018-01-02T20:27:48.333 回答