The next generation of the Teknik Services. Written in ASP.NET.
https://www.teknik.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.7 KiB
75 lines
2.7 KiB
using Newtonsoft.Json; |
|
using Newtonsoft.Json.Linq; |
|
using System; |
|
using System.IO; |
|
using System.Net; |
|
using System.Text; |
|
|
|
namespace Teknik.Utilities |
|
{ |
|
public static class CurrencyHelper |
|
{ |
|
private static decimal m_CurrentBTCPrice = 0; |
|
private static DateTime m_LastBTCQuery = DateTime.MinValue; |
|
private static TimeSpan m_MaxBTCQueryTime = new TimeSpan(1, 0, 0); // Max query of every hour |
|
|
|
/// <summary> |
|
/// Gets the exchange rate for a given currency relative to USD |
|
/// </summary> |
|
/// <param name="target"></param> |
|
/// <returns></returns> |
|
public static decimal GetExchangeRate(CurrencyType target) |
|
{ |
|
decimal exchangeRate = 1; |
|
switch (target) |
|
{ |
|
case CurrencyType.USD: |
|
exchangeRate = 1; |
|
break; |
|
case CurrencyType.BTC: |
|
// get BTC usd price |
|
exchangeRate = GetBTCPrice(); |
|
break; |
|
} |
|
|
|
return exchangeRate; |
|
} |
|
|
|
public static decimal GetBTCPrice() |
|
{ |
|
DateTime curTime = DateTime.Now; |
|
if (curTime - m_LastBTCQuery > m_MaxBTCQueryTime) |
|
{ |
|
m_LastBTCQuery = curTime; |
|
string url = "http://api.bitcoincharts.com/v1/weighted_prices.json"; |
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); |
|
try |
|
{ |
|
WebResponse response = request.GetResponse(); |
|
using (Stream responseStream = response.GetResponseStream()) |
|
{ |
|
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); |
|
string jsonResult = reader.ReadToEnd(); |
|
JObject result = JsonConvert.DeserializeObject<JObject>(jsonResult); |
|
if (result["USD"] != null) |
|
{ |
|
string priceStr = result["USD"]["24h"].ToString(); |
|
decimal.TryParse(priceStr, out m_CurrentBTCPrice); |
|
} |
|
} |
|
} |
|
catch (WebException ex) |
|
{ |
|
WebResponse errorResponse = ex.Response; |
|
using (Stream responseStream = errorResponse.GetResponseStream()) |
|
{ |
|
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); |
|
String errorText = reader.ReadToEnd(); |
|
} |
|
} |
|
} |
|
|
|
return m_CurrentBTCPrice; |
|
} |
|
} |
|
}
|
|
|