private static void WriteWorldResults(Region usRegion, List <VaccinationData> vaccinations) { // https://github.com/owid/covid-19-data/blob/master/public/data/vaccinations/vaccinations.csv var countdown = File.ReadAllLines(filePath + "Countdown.txt")[0].Split(';'); var countdownDay = DateTime.Parse(countdown[0]); var countdownEvent = countdown[1]; var previousId = File.ReadAllLines(filePath + "Previously.txt")[0].Split(' ')[1]; var previousURL = "https://www.shacknews.com/chatty?id=" + previousId; var checkDate = DateTime.Today.AddDays(-2); var txtFile = $"{DateTime.Now.ToString("MMdd")}_World.txt"; var lines = new List <string>(); var current = GetCurrentWorld(); var change = GetDailyResults(checkDate); var usChange = usRegion.Change(DateTime.Today.AddDays(-1)); var worldPopulation = 7742277000.0; usRegion.Population = 330079000.0; var worldVaccine = vaccinations.OrderByDescending(v => v.date).FirstOrDefault(); var worldVaccinePrevious = vaccinations.OrderByDescending(v => v.date).Skip(1).FirstOrDefault(); var worldVaccineChange = new VaccinationNumbers(DateTime.Today) { Total = worldVaccine.total_vaccinations - worldVaccinePrevious.total_vaccinations, Partial = worldVaccine.people_vaccinated - worldVaccinePrevious.people_vaccinated, Fully = worldVaccine.people_fully_vaccinated - worldVaccinePrevious.people_fully_vaccinated }; var worldVaccinePercents = new VaccinationNumbers(DateTime.Today) { Total = worldVaccine.total_vaccinations * 100.0 / worldPopulation, Partial = worldVaccine.people_vaccinated * 100.0 / worldPopulation, Fully = worldVaccine.people_fully_vaccinated * 100.0 / worldPopulation }; var usVaccine = usRegion.Vaccinations.OrderByDescending(v => v.Date).FirstOrDefault(); var usVaccinePercents = usRegion.VaccinePercentage(); lines.Add($"*[b{{Corona Bucket}}b]*: {(countdownDay - DateTime.Today).Days} Days Till {countdownEvent}"); lines.Add(""); lines.Add($"b{{World Wide}}b totals s[pop. {worldPopulation.ToString("N0", CultureInfo.CurrentCulture)}]s:"); lines.Add($"*[n[Total Doses Administered]n]*: {worldVaccine.total_vaccinations.ToString("N0", CultureInfo.CurrentCulture)} (+{worldVaccineChange.Total.ToString("N0", CultureInfo.CurrentCulture)})"); //lines.Add($"*[At Least 1st Dose]*: {worldVaccine.people_vaccinated.ToString("N0", CultureInfo.CurrentCulture)} s[{(worldVaccinePercents.Partial).ToString("N2", CultureInfo.CurrentCulture)}%]s (+{worldVaccineChange.Partial.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"*[b{{Fully Vaccinated}}b]*: {worldVaccine.people_fully_vaccinated.ToString("N0", CultureInfo.CurrentCulture)} s[{(worldVaccinePercents.Fully).ToString("N2", CultureInfo.CurrentCulture)}%]s (+{worldVaccineChange.Fully.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"y{{Cases}}y: {current.Confirmed.ToString("N0", CultureInfo.CurrentCulture)} (+{(current.Confirmed - change.Confirmed).ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"r{{Deaths}}r: {current.Deaths.ToString("N0", CultureInfo.CurrentCulture)} (+{(current.Deaths - change.Deaths).ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"g{{Recovered}}g: {current.Recovered.ToString("N0", CultureInfo.CurrentCulture)} (+{(current.Recovered - change.Recovered).ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"p[Unresolved]p: {current.Unresolved.ToString("N0", CultureInfo.CurrentCulture)} (+{(current.Unresolved - change.Unresolved).ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add(""); lines.Add($"r{{U}}rb[S]bb{{A}}b s[pop. {usRegion.Population.ToString("N0", CultureInfo.CurrentCulture)}]s totals:"); lines.Add($"*[Total Doses]*: {usVaccine.Total.ToString("N0", CultureInfo.CurrentCulture)} (+{usRegion.VaccineChange().Total.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"*[At Least 1st Dose]*: {usVaccine.Partial.ToString("N0", CultureInfo.CurrentCulture)} s[{(usVaccinePercents.Partial).ToString("N2", CultureInfo.CurrentCulture)}%]s (+{usRegion.VaccineChange().Partial.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"*[Fully Vaccinated]*: {usVaccine.Fully.ToString("N0", CultureInfo.CurrentCulture)} s[{(usVaccinePercents.Fully).ToString("N2", CultureInfo.CurrentCulture)}%]s (+{usRegion.VaccineChange().Fully.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"Cases: {usRegion.CurrentCases.Confirmed.ToString("N0", CultureInfo.CurrentCulture)} (+{usChange.Confirmed.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add($"Deaths: {usRegion.CurrentCases.Deaths.ToString("N0", CultureInfo.CurrentCulture)} (+{usChange.Deaths.ToString("N0", CultureInfo.CurrentCulture)})"); lines.Add(""); lines.Add("b{/[COOL NEW VISUALS!]/}b (thanks y{watcherxp}y)"); lines.Add("JHU’s Daily COVID-19 Data in Motion"); lines.Add("https://coronavirus.jhu.edu/covid-19-daily-video"); lines.Add(""); lines.Add("Johns Hopkins University COVID-19 Dashboard"); lines.Add("https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6"); lines.Add(""); lines.Add("NYTimes US Hotspot Tracker"); lines.Add("https://www.nytimes.com/interactive/2020/us/coronavirus-us-cases.html?#hotspots"); lines.Add(""); lines.Add("Folding @Home"); lines.Add("https://foldingathome.org/"); lines.Add("Join the Shacknews Folding@Home team to help fight COVID-19 https://apps.foldingathome.org/teamstats/team50784.html"); lines.Add(""); lines.Add($"#COVID19{DateTime.Today.ToString("yyyyMMdd")}"); lines.Add($"Previously in the bucket: {previousURL}"); File.WriteAllLines(Path.Combine(filePath, txtFile), lines); }
private static List <Region> SortResults(List <ResultData> resultData, List <VaccinationData> vacsList, List <VaccinationData> vacsUSList) { var regionList = new List <Region>(); var countryList = GetCountryList(); var stateList = GetStateList(); for (var i = startDate; i < DateTime.Today; i = i.AddDays(1)) { Console.WriteLine($"Sorting {i}"); var dayList = resultData.Where(d => d.date == i && d.confirmed != ""); foreach (var item in dayList) { var caseNumbers = new CaseNumbers(i); double.TryParse(item.confirmed, out double confirmed); double.TryParse(item.deaths, out double deaths); double.TryParse(item.recovered, out double recovered); caseNumbers.Confirmed = confirmed; caseNumbers.Deaths = deaths; caseNumbers.Recovered = recovered; var region = regionList.SingleOrDefault(r => r.Name == item.countryRegion); if (region == null) { region = new Region(item.countryRegion); var countryInfo = countryList.countries.SingleOrDefault(c => c.name == region.Name); if (countryInfo != null) { region.Iso2 = countryInfo.iso2; region.Iso3 = countryInfo.iso3; region.CurrentCases = GetCurrentCountry(region.Iso2); } foreach (var vac in vacsList.Where(v => v.iso_code == region.Iso3)) { var vaccineNumber = new VaccinationNumbers(vac.date); vaccineNumber.Total = vac.total_vaccinations; vaccineNumber.Daily = vac.daily_vaccinations_raw; vaccineNumber.Partial = vac.people_vaccinated; vaccineNumber.Fully = vac.people_fully_vaccinated; region.Vaccinations.Add(vaccineNumber); } if (region.Vaccinations.Count == 0) { region.Vaccinations.Add(new VaccinationNumbers(DateTime.Today.AddDays(-1))); } if (region.Vaccinations.SingleOrDefault(v => v.Date == DateTime.Today.AddDays(-1)) == null) { var previousVac = region.Vaccinations.OrderByDescending(v => v.Date).First(); var newVac = new VaccinationNumbers(DateTime.Today.AddDays(-1)); newVac.Total = previousVac.Total; newVac.Partial = previousVac.Partial; newVac.Fully = previousVac.Fully; region.Vaccinations.Add(newVac); } regionList.Add(region); } var stateName = item.provinceState; if (string.IsNullOrWhiteSpace(stateName)) { stateName = item.countryRegion; } var state = region.States.SingleOrDefault(s => s.Name == stateName); if (state == null) { state = new State(stateName); if (region.Iso2 == "US") { var stateInfo = stateList.states.SingleOrDefault(s => s.State == state.Name); if (stateInfo != null) { state.Abbr = stateList.states.SingleOrDefault(s => s.State == state.Name).Code; state.Population = stateList.states.SingleOrDefault(s => s.State == state.Name).Population; if (!string.IsNullOrWhiteSpace(state.Abbr)) { state.CurrentCases = GetCurrentState(state.Abbr); } } foreach (var vac in vacsUSList.Where(v => v.location.Contains(state.Name))) { var vaccineNumber = new VaccinationNumbers(vac.date); vaccineNumber.Total = vac.total_vaccinations; vaccineNumber.Daily = vac.daily_vaccinations_raw; vaccineNumber.Partial = vac.people_vaccinated; vaccineNumber.Fully = vac.people_fully_vaccinated; state.Vaccinations.Add(vaccineNumber); } if (state.Vaccinations.Count == 0) { state.Vaccinations.Add(new VaccinationNumbers(DateTime.Today.AddDays(-1))); } if (state.Vaccinations.Where(v => v.Date == DateTime.Today.AddDays(-1)) == null) { var previousVac = state.Vaccinations.OrderByDescending(v => v.Date).First(); var newVac = new VaccinationNumbers(DateTime.Today.AddDays(-1)); newVac.Total = previousVac.Total; newVac.Partial = previousVac.Partial; newVac.Fully = previousVac.Fully; state.Vaccinations.Add(newVac); } } state.Cases.Add(caseNumbers); region.States.Add(state); } else { var cases = state.Cases.SingleOrDefault(c => c.Date == caseNumbers.Date); if (cases == null) { state.Cases.Add(caseNumbers); } else { cases.Confirmed += caseNumbers.Confirmed; cases.Deaths += caseNumbers.Deaths; cases.Recovered += caseNumbers.Recovered; } } } } return(regionList); }