예제 #1
0
        public async Task <List <ExchangeRateModel> > GetExchnageRates()
        {
            var result = new List <ExchangeRateModel>();

            string url = _settings.AbsaExchnageRateUrl;

            var request = new HttpRequestMessage(HttpMethod.Get, url);

            var client = _httpFactory.CreateClient();

            try
            {
                var response = await client.SendAsync(request);

                //Check success response
                if (response.IsSuccessStatusCode)
                {
                    var html = await response.Content.ReadAsStringAsync();

                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(html);

                    //Get table element from html
                    var tableNode = htmlDoc.DocumentNode.SelectNodes("//table")
                                    .FirstOrDefault();

                    //Get table headers
                    var headerRow = tableNode.SelectNodes("//tr/th")
                                    .Select(node => string.Intern(node.InnerText))
                                    .ToArray();

                    //Get Table values
                    var data = tableNode.SelectNodes("//tbody/tr")
                               .Select(rowNode => rowNode.SelectNodes("td")
                                       .Select(cellNode => cellNode.InnerText)
                                       .ToArray())
                               .ToList();

                    //Parse data to object
                    result = data.Select(row => new ExchangeRateModel(row[0], DateTime.Now.ToString("yyyy-MM-dd"))
                    {
                        Country      = row[1],
                        Multiplier   = row[2],
                        BuyTransfers = double.Parse(row[3], CultureInfo.InvariantCulture),
                        BuyCheques   = double.Parse(row[4], CultureInfo.InvariantCulture),
                        BuyNotes     = double.Parse(row[5], CultureInfo.InvariantCulture),
                        SellCheques  = double.Parse(row[6], CultureInfo.InvariantCulture),
                        SellNotes    = double.Parse(row[7], CultureInfo.InvariantCulture)
                    }).ToList();
                }


                foreach (var exchange in result)
                {
                    await _serviceBus.WriteToQueue(exchange);

                    await _azureTableStorage.InsertOrMergeExchangeRateAsync(exchange);
                }

                return(result.ToList());
            }
            catch
            {
                throw;
            }
        }