Exemple #1
0
        public IActionResult Index()
        {
            var viewModel = new TennisViewModel();

            var weatherForecaster = new WeatherForecaster();
            var currentWeather    = weatherForecaster.GetCurrentWeather();

            switch (currentWeather.WeatherCondition)
            {
            case WeatherCondition.Sun:
                viewModel.WeatherDescription = "It's sunny right now. " +
                                               "A great day for tennis.";
                break;

            case WeatherCondition.Rain:
                viewModel.WeatherDescription = "We're sorry but it's raining " +
                                               "here. No outdoor courts in use.";
                break;

            default:
                viewModel.WeatherDescription = "We don't have the latest weather " +
                                               "information right now, please check again later.";
                break;
            }

            return(View(viewModel));
        }
Exemple #2
0
        public IEnumerable <WeatherForecast> Get()
        {
            System.Threading.Thread.Sleep(2000); // for dramatic effect during demo
            var forecaster = new WeatherForecaster();

            return(forecaster.GetForecast());
        }
        private void InitializeData(MigrationBuilder migrationBuilder)
        {
            var galaxy = Galaxy.GetVulcanosFerengisBetasoidesGalaxy();

            var days = new WeatherForecaster(galaxy.Planets, galaxy.Sun).GetDayWeatherForecastForYears(10);

            foreach (var d in days)
            {
                string[] columns = { "Day", "Weather" };
                object[] values  = { d.Day, d.Weather.Description };

                migrationBuilder.InsertData("DayWeathers", columns, values);
            }
        }
        //[TestMethod]
        public void GetFiveSummariesFromDatabase()
        {
            // Arrange
            var builder = new DbContextOptionsBuilder <WebServiceDBContext>();

            builder.UseSqlServer("Data Source = (localdb)\\MSSQLLocalDB; Initial Catalog = WeatherForecaster");

            using (var dbContext = new WebServiceDBContext(builder.Options))
            {
                var forecaster = new WeatherForecaster(dbContext);

                // Act
                var weatherSummaries = forecaster.WeatherSummariesFromDatabase().Result;

                // Assert
                Assert.IsTrue(weatherSummaries.Count == 5);
            };
        }
        public void GenerateFiveRandomSummaries()
        {
            // Arrange
            var builder = new DbContextOptionsBuilder <WebServiceDBContext>();

            builder.UseSqlServer("Data Source = (localdb)\\MSSQLLocalDB; Initial Catalog = WeatherForecaster");

            using (var dbContext = new WebServiceDBContext(builder.Options))
            {
                var forecaster = new WeatherForecaster(dbContext);

                // Act
                var weatherSummaries = forecaster.WeatherSummaires();

                // Assert
                Assert.IsTrue(weatherSummaries.Length == 5);
            };
        }
Exemple #6
0
 public void SaveHistoryCrawl(WeatherForecaster obj)
 {
     try
     {
         _context.ViewWeatherHistoryCrawl.Add(new ViewWeatherHistoryCrawl
         {
             City        = obj.Address,
             CreatedDate = DateTime.UtcNow,
             IpAddress   = Common.CommonHelper.getIpAccess(),
             Temperature = obj.TemperatureC + " __ " + obj.TemperatureF,
         });
         _context.SaveChanges();
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Exemple #7
0
        public dynamic GetWeatherPeriodsForecast(int years = 1)
        {
            var periods = new WeatherForecaster(_galaxy.Planets, _galaxy.Sun)
                          .GetWeatherPeriodsForecastForYears(years);

            var droughtPeriods = periods.Count(p => p.Weather.IsDrought());
            var rainyPeriods   = periods.Count(p => p.Weather.IsRain());
            var optimalPeriods = periods.Count(p => p.Weather.IsOptimal());
            var unknownPeriods = periods.Count(p => p.Weather.IsUnknown());

            var peakInfo = GetPeakInfo(periods);

            return(new {
                periodosDeSequia = droughtPeriods,
                periodosDeLluvia = rainyPeriods,
                periodosDeCondicionesOptimas = optimalPeriods,
                periodosDeCondicionesDesconocidas = unknownPeriods,
                diasPicoMaximoDeLluvia = peakInfo.PeakDays,
                valorPicoMaximoDeLluvia = peakInfo.PeakLevel
            });
        }
Exemple #8
0
        public dynamic GetWeatherDaysForecast(int years = 1)
        {
            var periods = new WeatherForecaster(_galaxy.Planets, _galaxy.Sun)
                          .GetWeatherPeriodsForecastForYears(years);

            int droughtDays = periods.Where(p => p.Weather.IsDrought()).Sum(p => p.GetDuration());
            int rainyDays   = periods.Where(p => p.Weather.IsRain()).Sum(p => p.GetDuration());
            int optimalDays = periods.Where(p => p.Weather.IsOptimal()).Sum(p => p.GetDuration());
            int unknownDays = periods.Where(p => p.Weather.IsUnknown()).Sum(p => p.GetDuration());

            var peakInfo = GetPeakInfo(periods);

            return(new
            {
                diasDeSequia = droughtDays,
                diasDeLluvia = rainyDays,
                diasDeCondicionesOptimas = optimalDays,
                diasDeCondicionesDesconocidas = unknownDays,
                diasPicoMaximoDeLluvia = peakInfo.PeakDays,
                valorPicoMaximoDeLluvia = peakInfo.PeakLevel
            });
        }
Exemple #9
0
        public IEnumerable <WeatherForecast> Get()
        {
            var forecaster = new WeatherForecaster();

            return(forecaster.GetForecast());
        }
        public EmptyResult Suggest()
        {
            string body = "";

            try
            {
                var active  = DatabaseManager.Instance.Periods.Where(x => x.IsActive).FirstOrDefault();
                var pending = DatabaseManager.Instance.Periods.Where(x => x.IsPending).FirstOrDefault();
                if (active == null)
                {
                    if (pending != null)
                    {
                        body = "Current period is pending for uploading rating document by all users. " +
                               "Period will start automatically after each user uploads the document.";
                    }
                    else
                    {
                        body = "There is no ongoing period. " +
                               "Please add a period with some day(s) to start rating step, then suggestion step.";
                    }
                }
                else
                {
                    var comparisonList = new List <Comparer>();
                    foreach (var restaurant in DatabaseManager.Instance.Restaurants.ToList())
                    {
                        var comparer = new Comparer();
                        comparer.Item = restaurant;
                        foreach (var rating in DatabaseManager.Instance.RatingHistories.Where(x => x.PeriodId == active.Id && x.RestaurantId == restaurant.Id).ToList())
                        {
                            comparer.Total   += rating.Taste ?? 0;
                            comparer.Divider += rating.Taste != null ? 1 : 0;
                            comparer.Total   += rating.Speed ?? 0;
                            comparer.Divider += rating.Speed != null ? 1 : 0;
                            comparer.Total   += rating.Service ?? 0;
                            comparer.Divider += rating.Service != null ? 1 : 0;
                        }
                        comparisonList.Add(comparer);
                    }
                    var  best             = new Comparer();
                    var  tempList         = new List <Comparer>(comparisonList);
                    var  lastSuggested    = DatabaseManager.Instance.SuggestionHistories.OrderByDescending(x => x.Id).FirstOrDefault();
                    var  weatherCondition = WeatherForecaster.Current();
                    bool carCheck         = DatabaseManager.Instance.SuggestionHistories.OrderByDescending(x => x.Id).Take(2).Any(x => x.Restaurant.CarOrWalk == "C");
                    bool found            = false;
                    while (!found && comparisonList.Count > 0)
                    {
                        best = comparisonList.Aggregate((rest1, rest2) => rest1.Average > rest2.Average ? rest1 : rest2);
                        // last suggested check
                        if (lastSuggested != null && lastSuggested.RestaurantId == best.Item.Id)
                        {
                            comparisonList.Remove(best);
                        }
                        // 2 car transportation in 3 days check
                        else if (carCheck && best.Item.CarOrWalk == "C")
                        {
                            comparisonList.Remove(best);
                        }
                        // weather condition check
                        else if (best.Item.WeatherDependency && best.Item.CarOrWalk == "W" && (weatherCondition == Weather.Rainy || weatherCondition == Weather.Snowy))
                        {
                            comparisonList.Remove(best);
                        }
                        else
                        {
                            found = true;
                        }
                    }
                    if (!found)
                    {
                        best = tempList.Aggregate((rest1, rest2) => rest1.Average > rest2.Average ? rest1 : rest2);
                    }
                    var suggestion = new SuggestionHistory();
                    suggestion.PeriodId     = active.Id;
                    suggestion.OrderNo      = active.Count + 1;
                    suggestion.RestaurantId = best.Item.Id;
                    active.Count++;
                    if (active.Count == active.Length)
                    {
                        active.IsActive = false;
                    }
                    DatabaseManager.Instance.SuggestionHistories.Add(suggestion);
                    DatabaseManager.Instance.SaveChanges();
                    body = active.Count + ".suggestion on period " + active.Id + " is " + best.Item.Title + ". " +
                           "Enjoy your lunch!";
                }
                Logger.Log(Logger.Success, "Suggestion/Suggest", body);
            }
            catch (Exception ex)
            {
                Logger.Log(Logger.Error, "Suggestion/Suggest", ex.Message);
            }
            finally
            {
                foreach (var user in DatabaseManager.Instance.Users.ToList())
                {
                    MailSender.SendMail(user.Mail, body);
                }
            }
            return(null);
        }
Exemple #11
0
        public WeatherForecaster CrawlDataFromLink(string link)
        {
            link = string.IsNullOrEmpty(link) ? "https://forecast.weather.gov/MapClick.php?lat=37.7772&lon=-105.5168#.XrUr2mgzaHv" : link;
            //RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"), Cron.Minutely);

            var urlbase = "https://forecast.weather.gov/";

            //Kiêm tra đường dẫn
            if (!link.Contains(urlbase))
            {
                return(null);
            }
            var objReturn = new WeatherForecaster();
            var htmlWeb   = new HtmlWeb()
            {
                AutoDetectEncoding = false,
            };

            try
            {
                var document      = htmlWeb.Load(link);
                var weatherDetail = document.DocumentNode.Descendants("div").FirstOrDefault(node => node.Attributes.Contains("id") && node.Attributes["id"].Value == "current_conditions_detail").Descendants("tr").ToList();
                //var weatherDetail1 = document.DocumentNode.SelectSingleNode("//div[@id=current_conditions_detail]");
                foreach (var item in weatherDetail)
                {
                    var td = item.ChildNodes.Where(x => x.Name == "td").ToList();
                    objReturn.WeatherDetail.Add(td[0].InnerText.ToString(), td[1].InnerText.ToString());
                }
                //< !--Graphic and temperatures -->
                var temperatures = document.DocumentNode.Descendants("div").FirstOrDefault(node => node.Attributes.Contains("id") && node.Attributes["id"].Value == "current_conditions-summary").ChildNodes.ToList();
                try
                {
                    objReturn.Image = urlbase + temperatures.FirstOrDefault(node => node.Attributes.Contains("src")).Attributes["src"].Value;
                }
                catch (Exception)
                {
                }
                var current             = document.DocumentNode.Descendants("div").FirstOrDefault(node => node.Attributes.Contains("id") && node.Attributes["id"].Value == "current-conditions").ChildNodes.ToList();
                var curentpanel_heading = current.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "panel-heading");
                objReturn.Address         = curentpanel_heading.Descendants("h2").FirstOrDefault().InnerText;
                objReturn.TemperatureF    = temperatures.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "myforecast-current-lrg").InnerText;
                objReturn.TemperatureC    = temperatures.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "myforecast-current-sm").InnerText;
                objReturn.ForecastCurrent = temperatures.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "myforecast-current").InnerText;
                //weather
                var listForecaseShort = document.DocumentNode.Descendants("ul").FirstOrDefault(node => node.Attributes.Contains("id") && node.Attributes["id"].Value == "seven-day-forecast-list").ChildNodes.ToList();
                foreach (var item in listForecaseShort)
                {
                    var data = item.ChildNodes.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "tombstone-container");
                    var obj  = new WeatherDetail();
                    obj.Time        = data.ChildNodes.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "period-name").InnerText;
                    obj.ShortDesc   = data.ChildNodes.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "short-desc").InnerText;
                    obj.Temp        = data.ChildNodes.FirstOrDefault(node => node.Attributes.Contains("class") && node.Attributes["class"].Value == "short-desc").NextSibling.InnerText;
                    obj.Image       = urlbase + data.ChildNodes.Descendants("img").FirstOrDefault(node => node.Attributes.Contains("src")).Attributes["src"].Value;
                    obj.Description = data.ChildNodes.Descendants("img").FirstOrDefault(node => node.Attributes.Contains("alt")).Attributes["alt"].Value;
                    objReturn.Weathers.Add(obj);
                }

                objReturn.Link = link;
            }
            catch (Exception)
            {
                return(null);
            }
            SaveHistoryCrawl(objReturn);
            return(objReturn);
        }