Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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
        }