public List <CovidGlobalCaseCountDADto> FetchGlobalCasesFromAPI(Metrics metrics, Locations location) { WebRequest request = WebRequest.Create(configuration.GetSection("AppSettings")["covidConfirmedCasesAPI"]); if (metrics == Metrics.DEATHS) { request = WebRequest.Create(configuration.GetSection("AppSettings")["covidDeathsAPI"]); } else if (metrics == Metrics.RECOVERIES) { request = WebRequest.Create(configuration.GetSection("AppSettings")["covidRecoveriesAPI"]); } request.Method = "GET"; WebResponse response = request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader readerStream = new StreamReader(dataStream); Console.WriteLine(((HttpWebResponse)response).StatusDescription); string responseFromServer = readerStream.ReadToEnd(); //Console.WriteLine(responseFromServer); response.Close(); TextReader reader = new StringReader(responseFromServer); CsvReader csvReader = new CsvReader(reader, CultureInfo.InvariantCulture); dynamic records = csvReader.GetRecords <dynamic>(); List <CovidGlobalCaseCountBLDto> bALCaseCountRecords = new List <CovidGlobalCaseCountBLDto>(); Date latestDate = covidDataRepository.GetLastUpdateDate(metrics.ToDALMetrics(), location.ToDALocations()).Date; //IDictionary<string, object> caseCounts = new IDictionary; string csvRecordCompositeKey = ""; int counterKeys = 0; foreach (var rec in records) { counterKeys = 0; csvRecordCompositeKey = ""; foreach (KeyValuePair <string, object> count in rec) { if (count.Key == "Province/State" || count.Key == "Country/Region" || count.Key == "Lat" || count.Key == "Long") { csvRecordCompositeKey += (string)count.Value == "" ? "Null" + "_" : count.Value + "_"; } if (counterKeys > 3) { if (DateTime.Compare(DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture), latestDate) > 0) { CovidGlobalCaseCountBLDto caseRecord = new CovidGlobalCaseCountBLDto(); caseRecord.Date = DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture); caseRecord.Count = Convert.ToInt32(count.Value); caseRecord.dbCompositeKey = csvRecordCompositeKey.Remove(csvRecordCompositeKey.Length - 1); bALCaseCountRecords.Add(caseRecord); } } counterKeys++; } } var dALCaseCountRecords = Utils.Utilities.MapCaseCountsBLDTOtoDADTO(bALCaseCountRecords); return(dALCaseCountRecords); }
public List <CovidCaseCountBLDto> FetchCasesFromAPI(Metrics metrics) { WebRequest request = WebRequest.Create(ConfigurationManager.AppSettings["covidConfirmedCasesAPI"]); if (metrics == Metrics.DEATHS) { request = WebRequest.Create(ConfigurationManager.AppSettings["covidDeathsAPI"]); } else if (metrics == Metrics.RECOVERIES) { request = WebRequest.Create(ConfigurationManager.AppSettings["covidRecoveriesAPI"]); } request.Method = "GET"; WebResponse response = request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader readerStream = new StreamReader(dataStream); Console.WriteLine(((HttpWebResponse)response).StatusDescription); string responseFromServer = readerStream.ReadToEnd(); //Console.WriteLine(responseFromServer); response.Close(); TextReader reader = new StringReader(responseFromServer); CsvReader csvReader = new CsvReader(reader, CultureInfo.InvariantCulture); dynamic records = csvReader.GetRecords <dynamic>(); List <CovidCaseCountBLDto> bALCaseCountRecords = new List <CovidCaseCountBLDto>(); int id = 1; Date latestDate = covidDataRepository.GetLastUpdateDate(metrics).Date; foreach (var rec in records) { IDictionary <string, object> caseCounts = rec; foreach (var count in caseCounts) { if (count.Key != "Province/State" && count.Key != "Country/Region" && count.Key != "Lat" && count.Key != "Long" && DateTime.Compare(DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture), latestDate) > 0) { CovidCaseCountBLDto caseRecord = new CovidCaseCountBLDto { Id = id, Date = DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture), Count = Convert.ToInt32(count.Value) }; bALCaseCountRecords.Add(caseRecord); } } id++; } return(bALCaseCountRecords); }