我希望获得相应警察值的比特币值并将其存储在表格或变量中。我得到了这个URL,我可以从中获得比特币的金额。我搜索了bitpay并找到了这个网址。
例如:
100.000 cop = 0,0248 btc
https://bitpay.com/downloads/bitpayApi.pdf
https://bitpay.com/api#resource-Rates
我试过了:
var 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#(后端)中的变量中得到结果。
我该如何做到这一点?
答案 0 :(得分: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);
}