private async Task <List <dynamic> > GetPageDataGLNW(string url, List <dynamic> results) { int iCount = 0; var config = Configuration.Default.WithDefaultLoader(); var context = BrowsingContext.New(config); var document = await context.OpenAsync(url); // Debug //_logger.LogInformation(document.DocumentElement.OuterHtml); // var Remittance = document.QuerySelectorAll("div[id^=gn-widget-remittance]"); var Gold = document.QuerySelectorAll("div[id^=gn-gold-rate]"); //var Silver = document.QuerySelectorAll("div[id^=gn-widget-silver]"); //var Fuel = document.QuerySelectorAll("div[id^=gn-fuel-price]"); //var Commodity = document.QuerySelectorAll("div[id^=gn-widget-commodity]"); foreach (var _GoldItem in Gold) { iCount = 0; var _GoldRows = _GoldItem.QuerySelectorAll("tr"); foreach (var _GoldRow in _GoldRows) { mGoldRate _GoldRate = new mGoldRate(); if (iCount == 0) { iCount++; continue; } var _Goldth = _GoldRow.QuerySelectorAll("th"); var _Goldtd = _GoldRow.QuerySelectorAll("td"); _GoldRate.GoldCarat = _Goldth[0].TextContent.Trim(); if (_Goldtd.Count() >= 0 && _Goldtd[0].TextContent != null && _Goldtd[0].TextContent.Trim() != "") { _GoldRate.GoldPriceMorning = Convert.ToDouble(_Goldtd[0].TextContent.Trim()); } if (_Goldtd.Count() >= 1 && _Goldtd[1].TextContent != null && _Goldtd[1].TextContent.Trim() != "") { _GoldRate.GoldPriceAfternoon = Convert.ToDouble(_Goldtd[1].TextContent.Trim()); } if (_Goldtd.Count() >= 2 && _Goldtd[2].TextContent != null && _Goldtd[2].TextContent.Trim() != "") { _GoldRate.GoldPriceEvening = Convert.ToDouble(_Goldtd[2].TextContent.Trim()); } if (_Goldtd.Count() >= 3 && _Goldtd[3].TextContent != null && _Goldtd[3].TextContent.Trim() != "") { _GoldRate.GoldPriceYesterday = Convert.ToDouble(_Goldtd[3].TextContent.Trim()); } _GoldRate.UpdatedDateTime = DateTime.Now; results.Add(_GoldRate); } } return(results); }
private async Task <List <dynamic> > GetPageData(string url, List <dynamic> results) { var config = Configuration.Default.WithDefaultLoader(); var context = BrowsingContext.New(config); var document = await context.OpenAsync(url); // Debug //_logger.LogInformation(document.DocumentElement.OuterHtml); var advertrows = document.QuerySelectorAll("table"); foreach (var row in advertrows) { var GoldRow = document.QuerySelectorAll("tr"); int iCount = 0; foreach (var item in GoldRow) { if (iCount == 0) { iCount++; continue; } // Create a container object mGoldRate _GoldRate = new mGoldRate(); string ItemContaint = item.TextContent; List <string> lstValue = new List <string>(); lstValue = ItemContaint.Replace('\t', '\n').Split('\n').ToList(); foreach (var listValue in lstValue) { if (listValue != null && listValue.Trim() != "") { if (listValue.ToUpper().Contains("K")) { _GoldRate.GoldCarat = listValue.Trim(); } if (listValue.ToUpper().Contains("AED")) { _GoldRate.GoldPriceMorning = Convert.ToDouble(listValue.Replace("AED", "").Replace(" ", "")); } _GoldRate.UpdatedDateTime = DateTime.Now; } } if (_GoldRate.GoldCarat != null && _GoldRate.GoldCarat.Trim() != "") { results.Add(_GoldRate); } } } // Check if a next page link is present return(results); }
private async Task <JsonResult> CheckForUpdatesGLNW(string url, string mailTitle) { // We create the container for the data we want List <dynamic> dyGoldRate = new List <dynamic>(); /** * GetPageData will recursively fill the container with data * and the await keyword guarantees that nothing else is done * before that operation is complete. */ await GetPageDataGLNW(url, dyGoldRate); DateTime currentTime = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Arabian Standard Time")); DateTime DtpMorningTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 09, 00, 00); DateTime DtpLunchTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 15, 00, 00); DateTime DtpEveningTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 19, 00, 00); DateTime DtpMidNightTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 23, 59, 00); var mCurrentDateGoldRate = dbGoldRateContext.mGoldRates.AsEnumerable().Where(mg => mg.UpdatedDateTime.Value != null && mg.UpdatedDateTime.HasValue == true && mg.UpdatedDateTime.Value.ToLongDateString() == currentTime.ToLongDateString()).ToList(); if (currentTime >= DtpMorningTime && currentTime < DtpLunchTime) { if (mCurrentDateGoldRate.Count <= 0) { foreach (var item in dyGoldRate) { dbGoldRateContext.mGoldRates.Add(item as mGoldRate); } } else { foreach (mGoldRate item in dyGoldRate) { mGoldRate CrGold = mCurrentDateGoldRate.Where(cr => cr.GoldCarat == item.GoldCarat && cr.GoldPriceMorning == 0 && cr.GoldPriceYesterday == 0).FirstOrDefault(); if (CrGold == null || CrGold.iID <= 0) { continue; } CrGold.GoldPriceMorning = item.GoldPriceMorning; dbGoldRateContext.mGoldRates.Add(CrGold); } } if (dbGoldRateContext.mGoldRates.Count() > 0) { dbGoldRateContext.SaveChanges(); } } else if (currentTime >= DtpLunchTime && currentTime < DtpEveningTime) { foreach (mGoldRate item in dyGoldRate) { mGoldRate CrGold = mCurrentDateGoldRate.Where(cr => cr.GoldCarat == item.GoldCarat && cr.GoldPriceAfternoon == 0).FirstOrDefault(); if (CrGold == null || CrGold.iID <= 0) { continue; } CrGold.GoldPriceAfternoon = item.GoldPriceAfternoon; dbGoldRateContext.mGoldRates.Add(CrGold); } if (dbGoldRateContext.mGoldRates.Count() > 0) { dbGoldRateContext.SaveChanges(); } } else if (currentTime >= DtpEveningTime && currentTime < DtpMidNightTime) { foreach (mGoldRate item in dyGoldRate) { mGoldRate CrGold = mCurrentDateGoldRate.Where(cr => cr.GoldCarat == item.GoldCarat && cr.GoldPriceEvening == 0).FirstOrDefault(); if (CrGold == null || CrGold.iID <= 0) { continue; } CrGold.GoldPriceEvening = item.GoldPriceEvening; dbGoldRateContext.mGoldRates.Add(CrGold); } if (dbGoldRateContext.mGoldRates.Count() > 0) { dbGoldRateContext.SaveChanges(); } } //else if (currentTime > (DtpMidNightTime.AddDays(-1)) && currentTime < DtpMorningTime) //{ // foreach (var item in dyGoldRate) // { // dbGoldRateContext.mGoldRates.Add(item as mGoldRate); // } // if (dbGoldRateContext.mGoldRates.Count() > 0) // { // dbGoldRateContext.SaveChanges(); // } //} return(Json(dyGoldRate.ToList())); // TODO: Diff the data }