123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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;
- }
- }
- }
|