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)); }
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); }; }
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; } }
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 }); }
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 }); }
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); }
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); }