示例#1
0
        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());
        }
示例#2
0
        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());
    }
示例#4
0
 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
                }));
            }
        }
示例#6
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);
        }