public void CanGetSeries() { const string response = @"<?xml version=""1.0"" encoding=""utf-8"" ?> <seriess realtime_start=""2012-04-26"" realtime_end=""2012-04-26""> <series id=""CPIAUCNS"" realtime_start=""2012-04-26"" realtime_end=""2012-04-26"" title=""Consumer Price Index for All Urban Consumers: All Items"" observation_start=""1913-01-01"" observation_end=""2012-03-01"" frequency=""Monthly"" frequency_short=""M"" units=""Index 1982-84=100"" units_short=""Index 1982-84=100"" seasonal_adjustment=""Not Seasonally Adjusted"" seasonal_adjustment_short=""NSA"" last_updated=""2012-04-13 08:53:00-05"" popularity=""78"" notes=""Handbook of Methods - (http://www.bls.gov/opub/hom/pdf/homch17.pdf) Understanding the CPI: Frequently Asked Questions - (http://stats.bls.gov:80/cpi/cpifaq.htm)""/> </seriess>"; var downloader = new MockDownloader(response); var fred = new Fred("key", downloader); var series = fred.GetSeries("CPIAUCNS"); var expectedUrl = "http://api.stlouisfed.org/fred/series?api_key=key&series_id=CPIAUCNS" + RealtimeNow; Assert.AreEqual(expectedUrl, downloader.Url); Assert.AreEqual("CPIAUCNS", series.Id); Assert.AreEqual("Consumer Price Index for All Urban Consumers: All Items", series.Title); Assert.AreEqual(new DateTime(2012, 4, 26), series.RealtimeStart); Assert.AreEqual(new DateTime(2012, 4, 26), series.RealtimeEnd); Assert.AreEqual(new DateTime(1913, 1, 1), series.ObservationStart); Assert.AreEqual(new DateTime(2012, 3, 1), series.ObservationEnd); Assert.AreEqual(Frequency.Monthly, series.Frequency); Assert.AreEqual("Index 1982-84=100", series.Units); Assert.AreEqual(false, series.SeasonalAdjusted); var expectedDate = new DateTime(2012, 4, 13, 13, 53, 0, DateTimeKind.Utc); Assert.AreEqual(expectedDate.ToLocalTime(), series.LastUpdated); Assert.AreEqual(78, series.Popularity); Assert.AreEqual("Handbook of Methods - (http://www.bls.gov/opub/hom/pdf/homch17.pdf) Understanding the CPI: Frequently Asked Questions - (http://stats.bls.gov:80/cpi/cpifaq.htm)", series.Notes); }
static void Main(string[] args) { var fred = new Fred("661c0a90e914477da5a7518293de5f8e"); int startYear; int endYear; int startMonth; int endMonth; int deflateYear = 0; var data = new Dictionary <string, IList <Observation> > { }; //get year of rGDP dollars //if (data.ContainsKey("rGDP")) { //var series = data["rGDP"]; var series = fred.GetSeries("GDPC1"); var units = series.Units; //Console.WriteLine("Units: "); //Console.WriteLine(units); //string resultString = Regex.Match(units, @"\d+").Value; deflateYear = extractNumber(series.Units); Console.WriteLine("deflate year: {0}", deflateYear.ToString()); } string entry; WriteLine("Pushing ENTER accepts default values"); Write("Enter start year [2005]: "); entry = ReadLine(); if (entry == "") { entry = "2005"; } startYear = Convert.ToInt32(entry); WriteLine("Enter end year [2015] "); Write("years must cover rGDP real year to deinflate: "); entry = ReadLine(); if (entry == "") { entry = "2015"; } endYear = Convert.ToInt32(entry); Write("Enter start month, ex. Jan = 1 or Oct = [10]: "); entry = ReadLine(); if (entry == "") { entry = "10"; } startMonth = Convert.ToInt32(entry); Write("Enter end month, ex. Jan = 1 or Oct = [10]: "); entry = ReadLine(); if (entry == "") { entry = "10"; } endMonth = Convert.ToInt32(entry); DateTime startDate = new DateTime(startYear, startMonth, 1); DateTime endDate = new DateTime(endYear, endMonth, DateTime.DaysInMonth(endYear, endMonth)); //can't use # in GetSeriesObservations. Ignores the dates. //my names string[] dataNames = new string[] { "rGDP", "pSaveRate", "fedFundRate", "empPopRatio", "consConfIndex", "consPriceIndex", "housingSeries" }; //online series names string[] obsNames = new string[] { "GDPC1", "PSAVERT", "DFF", "EMRATIO", "UMCSENT", "CP0000USM086NEST", "SPCS20RSA" }; int dataCounter = 0; //create lists as FredAPI objects foreach (var instance in dataNames) { if (dataNames[dataCounter] == "rGDP") { data.Add(dataNames[dataCounter], fred.GetSeriesObservations(obsNames[dataCounter], startDate, endDate).ToList()); } else { data.Add(dataNames[dataCounter], fred.GetSeriesObservations(obsNames[dataCounter], startDate, endDate, frequency: Frequency.Monthly).ToList()); } dataCounter++; } ; //MinMaxDates(ref data); //convert data to sortedList (the DateTime becomes key of the SortedList), the string is the Key of the Dictionary. var sortedDataList = new Dictionary <string, SortedList <DateTime, double?> > { }; dataCounter = 0; foreach (var obData in data) { var list = obData.Value; sortedDataList.Add(dataNames[dataCounter], new SortedList <DateTime, double?>(list.ToDictionary(x => x.Date, x => x.Value))); dataCounter++; } //print data before changes //PrintData(sortedDataList); - will crash now because of gaps in rGDP //insert records (into rGDP) //ideally might want to have this second. FillInGaps(ref sortedDataList); //identify minmax dates, and trim list, if ran before FillInGaps, rGDP doesn't populate up till HighestDate2 MinMaxDates(ref sortedDataList); PrintData(sortedDataList); PrintDataToFile(sortedDataList, "preConversion"); //deInflate deInflate(ref sortedDataList, deflateYear); PrintData(sortedDataList); PrintDataToFile(sortedDataList, "postConversion"); parseData(sortedDataList, args); }