public async Task UpdateExchange() { //get currency list needed for publish string Clist = ConfigurationManager.AppSettings["CurrencyList"]; string[] ListArray = Clist.Split(','); var Currencies = _context.CurrencyRates.ToList(); for (int i = 0; i < ListArray.Length; i++) { var client = new RestClient("https://www.google.com/finance/converter?a=1&from=" + ListArray[i] + "&to=INR&meta=" + Guid.NewGuid().ToString()); var request = new RestRequest(Method.GET); var queryResult = client.Execute(request); //[^<]+ var result = Regex.Matches(queryResult.Content, "<span class=\"?bld\"?>([^<]+)</span>")[0].Groups[1].Value; result = result.Substring(0, result.IndexOf(' ')); var CrrencyEntity = Currencies.Find(a => a.SourceCurrency == ListArray[i]); if (CrrencyEntity != null) { CrrencyEntity.UpdatedDate = DateTime.Now; CrrencyEntity.ExchangeRate = Convert.ToDecimal(result); } else { CurrencyExchangeRates NewCrrency = new CurrencyExchangeRates(); NewCrrency.CreatedDate = DateTime.Now; NewCrrency.UpdatedDate = DateTime.Now; NewCrrency.ExchangeRate = Convert.ToDecimal(result); NewCrrency.DestinationCurrency = "INR"; NewCrrency.SourceCurrency = ListArray[i]; _context.CurrencyRates.Add(NewCrrency); } } await Task.Run(() => _context.SaveChanges()); }
public static CurrencyExchangeRates GetLatestCurrencyExchangeRatesFromWebAPI(string BaseCurrencyCode, string TargetCurrencyCode) { CurrencyExchangeRates CurrencyExchangeRates = new CurrencyExchangeRates(); try { #region Get Latest Exchange Rates string URL_LatestExchangeRatesAPI_Base_To_Target = Constants.Constants.URL_LatestExchangeRatesAPI_Base_To_Target .Replace(Constants.Constants.BaseCurrency, BaseCurrencyCode) .Replace(Constants.Constants.TargetCurrency, TargetCurrencyCode); using (WebClient webClient = new WebClient()) { string jsonResponse = webClient.DownloadString(URL_LatestExchangeRatesAPI_Base_To_Target); //Get JSON Response String if (string.IsNullOrWhiteSpace(jsonResponse) == false) { //Convert JSON Response String To Object CurrencyExchangeRatesJSON jsonResponseObject = JsonConvert.DeserializeObject <CurrencyExchangeRatesJSON>(jsonResponse); if (jsonResponseObject != null && jsonResponseObject.Date.HasValue && jsonResponseObject.Rates.Count() > 0) { foreach (var eachRate in jsonResponseObject.Rates) //For Every Target Currency Exchange - Create And Store CurrencyExchangeRates Object { CurrencyExchangeRates = new CurrencyExchangeRates() { Date = jsonResponseObject.Date.Value.Date.ToString(Constants.Constants.DateFormat), BaseCurrencyCode = jsonResponseObject.Base, TargetCurrencyCode = eachRate.Key, ExchangeRate = eachRate.Value }; } } } } #endregion Get Latest Exchange Rates } catch (Exception ex) { throw ex; } return(CurrencyExchangeRates); }
public override string ToString() { var sb = new StringBuilder("PaidCallMetadataResult("); bool __first = true; if (CurrencyExchangeRates != null && __isset.currencyExchangeRates) { if (!__first) { sb.Append(", "); } __first = false; sb.Append("CurrencyExchangeRates: "); CurrencyExchangeRates.ToString(sb); } if (RecommendedCountryCodes != null && __isset.recommendedCountryCodes) { if (!__first) { sb.Append(", "); } __first = false; sb.Append("RecommendedCountryCodes: "); RecommendedCountryCodes.ToString(sb); } if (AdCountries != null && __isset.adCountries) { if (!__first) { sb.Append(", "); } __first = false; sb.Append("AdCountries: "); AdCountries.ToString(sb); } sb.Append(")"); return(sb.ToString()); }
internal CurrencyExchange(CurrencyExchangeRates rates, decimal amount) { this.rates = rates; this.amount = amount; }
public HttpResponseMessage rate([FromBody] APIInputParameter obj) { try { if (obj == null) { obj = new APIInputParameter() { amount = 1, CurrencyCode = "USD" }; } if (obj.CurrencyCode == null || obj.CurrencyCode.Length == 0) { obj.CurrencyCode = "USD"; obj.amount = 1; } if (obj.amount == 0) { obj.amount = 1; } string[] CurrArray = _SupportedCurrList.Split(','); bool flag = true; for (int i = 0; i < CurrArray.Length; i++) { if (CurrArray[i] == obj.CurrencyCode) { flag = true; } } if (flag) { var res = MemCache.Get("CachedRate"); if (res != null) { var excRate = res as List <CurrencyExchangeRates>; CurrencyExchangeRates exc = new CurrencyExchangeRates(); exc = excRate.Find(x => x.SourceCurrency == obj.CurrencyCode); ApiResponse resp = new ApiResponse(); resp.returncode = 1; resp.err = "success"; resp.SourceCurrency = obj.CurrencyCode; resp.ConversionRate = Math.Round(exc.ExchangeRate, 2).ToString("####.##"); resp.Amount = obj.amount; resp.Total = (Math.Round(exc.ExchangeRate, 2) * obj.amount).ToString("####.##"); resp.timestamp = exc.UpdatedDate.Ticks; return(Request.CreateResponse <ApiResponse>(HttpStatusCode.OK, resp)); } else { CurrencyContext _context = new CurrencyContext(); var CurrRate = _context.CurrencyRates.ToList().Where(x => x.SourceCurrency == obj.CurrencyCode).FirstOrDefault(); if (CurrRate != null) { ApiResponse resp = new ApiResponse(); resp.returncode = 1; resp.err = "success"; resp.SourceCurrency = obj.CurrencyCode ; resp.ConversionRate = Math.Round(CurrRate.ExchangeRate, 2).ToString("####.##"); resp.Amount = obj.amount; resp.Total = (Math.Round(CurrRate.ExchangeRate, 2) * obj.amount).ToString("####.##"); resp.timestamp = CurrRate.UpdatedDate.Ticks; MemCache.Add("CachedRate", _context.CurrencyRates.ToList(), DateTimeOffset.UtcNow.AddMinutes(2)); return(Request.CreateResponse <ApiResponse>(HttpStatusCode.OK, resp)); } else { return(Request.CreateResponse <ErrorDesc>(HttpStatusCode.OK, new ErrorDesc() { err = "Currency Rate not Updated!", returncode = 0 })); } } } else { return(Request.CreateResponse <ErrorDesc>(HttpStatusCode.OK, new ErrorDesc() { err = "Currency Code Not Supported!", returncode = 0 })); } } catch (Exception ex) { return(Request.CreateResponse <ErrorDesc>(HttpStatusCode.OK, new ErrorDesc() { err = ex.Message, returncode = 0 })); } }
public static List <CurrencyExchangeRates> GetHistoricCurrencyExchangeRatesFromWebAPI() { List <string> CurrencyCodesStringList = Constants.Constants.CurrencyKeyValuePairs.Select(type => type.Key).ToList(); List <CurrencyExchangeRates> CurrencyExchangeRatesList = new List <CurrencyExchangeRates>(); List <CurrencyExchangeRates> CurrencyExchangeRatesList_Distinct = new List <CurrencyExchangeRates>(); try { #region Get Historic Exchange Rates foreach (var eachBaseCurrencyCode in CurrencyCodesStringList) //Loop Through Every Base Currency That We Are Interested In { string Begin_Date = DateTime.Now.AddDays(-1 * Constants.Constants.HistoryDays).ToString(Constants.Constants.DateFormat); string End_Date = DateTime.Now.ToString(Constants.Constants.DateFormat); string commaSeparatedCurrencyCodesString = String.Join(",", CurrencyCodesStringList.Where(currencyCode => currencyCode != eachBaseCurrencyCode).ToList()); string URL_HistoricExchangeRatesAPI_Base = Constants.Constants.URL_HistoricExchangeRatesAPI_Base .Replace(Constants.Constants.BaseCurrency, eachBaseCurrencyCode) .Replace(Constants.Constants.Begin_Date, Begin_Date) .Replace(Constants.Constants.End_Date, End_Date) .Replace(Constants.Constants.TargetCurrency, commaSeparatedCurrencyCodesString); using (WebClient webClient = new WebClient()) { string jsonResponse = webClient.DownloadString(URL_HistoricExchangeRatesAPI_Base); //Get JSON Response String if (string.IsNullOrWhiteSpace(jsonResponse) == false) { //Convert JSON Response String To Object HistoricCurrencyExchangeRatesJSON jsonResponseObject = JsonConvert.DeserializeObject <HistoricCurrencyExchangeRatesJSON>(jsonResponse); if (jsonResponseObject != null && jsonResponseObject.Rates.Count() > 0) { foreach (var eachRate in jsonResponseObject.Rates) //For Every Target Currency Exchange - Create And Store CurrencyExchangeRates Object { foreach (var eachRateValue in eachRate.Value) //For Every Currency Exchange Value { CurrencyExchangeRates CurrencyExchangeRates = new CurrencyExchangeRates() { Date = eachRate.Key.ToString(Constants.Constants.DateFormat), BaseCurrencyCode = jsonResponseObject.Base, TargetCurrencyCode = eachRateValue.Key, ExchangeRate = eachRateValue.Value }; CurrencyExchangeRatesList.Add(CurrencyExchangeRates); } } } } } } #endregion Get Historic Exchange Rates #region Remove Duplicates foreach (var eachCurrencyExchangeRates in CurrencyExchangeRatesList) { if (CurrencyExchangeRatesList_Distinct .Where(type => type.Date == eachCurrencyExchangeRates.Date && type.BaseCurrencyCode == eachCurrencyExchangeRates.BaseCurrencyCode && type.TargetCurrencyCode == eachCurrencyExchangeRates.TargetCurrencyCode) .Any() == false) { CurrencyExchangeRatesList_Distinct.Add(eachCurrencyExchangeRates); } } #endregion Remove Duplicates } catch (Exception ex) { throw ex; } return(CurrencyExchangeRatesList_Distinct); }