示例#1
0
        public CurrencyConvertResponse FindRate(BaseCurrency crr)
        {
            var response = new CurrencyConvertResponse
            {
                IsSuccess = false,
                Message   = "Unknows",
                Rate      = 0m,
                Status    = Enum.Status.Unknown
            };

            var line = crr is Dollar ? "USD" : crr is Euro ? "EUR" : "ERROR";

            StringBuilder sb = new StringBuilder("http://api.fixer.io/latest?base=");

            sb.Append(line); // currency

            try
            {
                using (var client = new WebClient())
                {
                    var json = client.DownloadString(sb.ToString());
                    var rate = JsonConvert.DeserializeObject <FixerModel>(json);

                    response.IsSuccess = true;
                    response.Message   = "Well done kereta";
                    response.Rate      = rate.Rates.Try;
                    response.Status    = Enum.Status.Success;
                }
            }
            catch (Exception ex)
            {
                Logger.Error($"Error while calculation rate. ex : {ex.StackTrace} ex.Message = {ex.Message}");
                response.Status  = Enum.Status.Error;
                response.Message = "Error while calculation rate.";
            }


            Logger.Debug($"Response : {JsonConvert.SerializeObject(response)}");

            return(response);
        }
示例#2
0
        public CurrencyConvertResponse FindRate(BaseCurrency crr)
        {
            var response = new CurrencyConvertResponse
            {
                IsSuccess = false,
                Message   = "Unknows",
                Rate      = 0m,
                Status    = Enum.Status.Unknown
            };

            var line = crr is Dollar ? "USD/TRY" : crr is Euro ? "EUR/TRY" : "ERROR";


            var web = new HtmlWeb();
            var doc = web.Load("http://www.bloomberght.com/");

            var currencyRate = doc.DocumentNode.SelectNodes("//div[@class='line2']").FirstOrDefault(c => c.ParentNode.InnerHtml.Contains(line));

            if (currencyRate == null)
            {
                // log error
                Logger.Error($"CurrencyRate is null");

                return(response);
            }

            var rateContent = Regex.Replace(currencyRate.InnerText.ToLower(), @"\s+", string.Empty);

            rateContent = rateContent.Replace(",", ".");
            var rate = 0m;

            #region Exception Handling

            try
            {
                rate = Convert.ToDecimal(rateContent);
                Console.WriteLine("The string as a decimal is {0}.", rate);
            }
            catch (OverflowException ex)
            {
                Logger.Error($"Error while calculation rate, OverflowException", ex);
                response.Status  = Enum.Status.Error;
                response.Message = "The conversion from string to decimal overflowed.";
            }
            catch (FormatException ex)
            {
                Logger.Error($"Error while calculation rate, FormatException", ex);
                response.Status  = Enum.Status.Error;
                response.Message = "The string is not formatted as a decimal.";
            }
            catch (ArgumentNullException ex)
            {
                Logger.Error($"Error while calculation rate, ArgumentNullException", ex);
                response.Status  = Enum.Status.Error;
                response.Message = "The string is null.";
            }

            #endregion

            response.IsSuccess = true;
            response.Message   = "Well done kereta";
            response.Rate      = rate;
            response.Status    = Enum.Status.Success;

            Logger.Debug($"Response : {JsonConvert.SerializeObject(response)}");

            return(response);
        }