예제 #1
0
        private static void GetWeatherForDay(DateTime day, ModelMadness db)
        {
            string url =
                "http://www.wunderground.com/history/airport/KNYC/`/DailyHistory.html?req_city=New+York&req_state=NY&req_statename=New+York&MR=1";

            url = url.Replace("`", day.Year + "/" + day.Month + "/" + day.Day);
            AgentAction   action   = new AgentAction(url, false);
            AgentDocument document = AgentHandler.Instance.PerformAction(new AgentSession(), action);
            int           startIdx = document.ResponseString.IndexOf("Mean Temperature");

            startIdx = document.ResponseString.IndexOf("<span class=\"b\">", startIdx) + "<span class=\"b\">".Length;
            int endidx = document.ResponseString.IndexOf("<", startIdx);
            int actual = int.Parse(document.ResponseString.Substring(startIdx, endidx - startIdx));

            startIdx = document.ResponseString.IndexOf("<span class=\"b\">", startIdx) + "<span class=\"b\">".Length;
            endidx   = document.ResponseString.IndexOf("<", startIdx);
            int     average = int.Parse(document.ResponseString.Substring(startIdx, endidx - startIdx));
            Weather weather = new Weather
            {
                day      = day,
                from_avg = actual - average
            };

            db.AddToWeathers(weather);
            db.SaveChanges();
            Console.WriteLine(day.ToString("d") + " was off by " + (actual - average) + " degrees on wall street");
        }
예제 #2
0
        private void ScrapePage(string pageName)
        {
            Console.WriteLine("Doing page " + pageName);

            string        url      = @"http://www.nyse.com/about/listed/lc_ny_name_`.js".Replace("`", pageName);
            AgentSession  session  = new AgentSession();
            AgentAction   action   = new AgentAction(url, false);
            AgentDocument document = AgentHandler.Instance.PerformAction(session, action);

            string[] segments = document.ResponseString.Split(']');

            foreach (string segment in segments)
            {
                int startIdx = segment.IndexOf("\"") + 1;
                if (startIdx == 0)
                {
                    continue;
                }
                int    endIdx      = segment.IndexOf("\"", startIdx);
                string stockTicker = segment.Substring(startIdx, endIdx - startIdx);

                startIdx = segment.IndexOf("\"", endIdx + 1) + 1;
                endIdx   = segment.IndexOf("\"", startIdx);

                string companyName = segment.Substring(startIdx, endIdx - startIdx);

                startIdx = segment.IndexOf("\"", endIdx + 1) + 1;
                endIdx   = segment.IndexOf("\"", startIdx);

                string country = segment.Substring(startIdx, endIdx - startIdx);
                ;
                StockName name = new StockName
                {
                    Stock        = stockTicker,
                    Company_Name = companyName,
                    Country      = country,
                    Exchange     = "NYSE"
                };
                if (!Madness.StockNames.Any(x => x.Stock == stockTicker))
                {
                    Console.WriteLine("Found new stock: " + stockTicker);

                    Madness.AddToStockNames(name);
                }
            }
        }
예제 #3
0
        public static void Historical()
        {
            AgentAction   action    = new AgentAction("http://web.archive.org/web/*/http://raptureready.com/rap2.html", false);
            AgentDocument document  = AgentHandler.Instance.PerformAction(new AgentSession(), action);
            string        indexPage = document.ResponseString;
            int           startIdx  = indexPage.IndexOf("Feb 13, 2004");

            startIdx = indexPage.IndexOf("<a href=\"", startIdx) + 9;
            int stopIdx = indexPage.IndexOf("TEXT FOLLOWING URL");

            while (startIdx < stopIdx)
            {
                int    endIdx  = indexPage.IndexOf("\"", startIdx);
                string dateURL = indexPage.Substring(startIdx, endIdx - startIdx);

                SavePage(dateURL);

                startIdx = indexPage.IndexOf("<a href=\"", startIdx) + 9;
            }
        }
예제 #4
0
        public static void PullQuotes(DateTime start, DateTime stop, string stockName)
        {
            ModelMadness madness = new ModelMadness();
            StockName    stock   = (from q in madness.StockNames where q.Stock == stockName select q).First();

            Console.WriteLine("Working on " + stock.Stock);

            //http://ichart.finance.yahoo.com/table.csv?s=TKR&a=00&b=1&c=2000&d=01&e=18&f=2010&g=d&ignore=.csv

            string url = @"http://ichart.finance.yahoo.com/table.csv?s=" +
                         stock.Stock + "&a=" + TwoDig(start.Month - 1) + "&b=" + start.Day + "&c=" + start.Year +
                         "&d=" + TwoDig(stop.Month - 1) + "&e=" + stop.Day + "&f=" + stop.Year +
                         "&g=d&ignore=.csv";

            AgentSession session = new AgentSession();
            AgentAction  action  = new AgentAction(url, false);

            bool          found    = false;
            AgentDocument document = null;

            try
            {
                document = AgentHandler.Instance.PerformAction(session, action);
                found    = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + url + " - " + ex.Message);
            }

            if (!found)
            {
                return;
            }

            //Date,Open,High,Low,Close,Volume,Adj Close

            string[] rows = document.ResponseString.Split('\n');

            if (rows.Length < 2)
            {
                return;
            }

            for (int i = 1; i < rows.Length; i++)
            {
                string   row    = rows[i];
                string[] fields = row.Split(',');
                if (fields.Length < 7)
                {
                    Console.WriteLine((i - 2) + " records stored");
                    continue;
                }

                quote q = new quote
                {
                    day            = (DateTime) new DateTimeConverter().ConvertFrom(fields[0]),
                    open           = decimal.Parse(fields[1]),
                    high           = decimal.Parse(fields[2]),
                    low            = decimal.Parse(fields[3]),
                    close          = decimal.Parse(fields[4]),
                    volume         = long.Parse(fields[5]),
                    adjusted_close = decimal.Parse(fields[6]),
                    StockName      = stock
                };

                madness.AddToquotes(q);
            }

            madness.SaveChanges();
        }
예제 #5
0
        private static void SavePage(string raptureURL)
        {
            AgentAction action = new AgentAction(raptureURL, false);

            AgentDocument document   = null;
            int           errorCount = 0;

            while (errorCount < 5)
            {
                try
                {
                    document = AgentHandler.Instance.PerformAction(new AgentSession(), action);
                    break;
                }
                catch (Exception ex)
                {
                    errorCount++;
                }
            }

            int startIdx   = document.ResponseString.IndexOf("Rapture Index ") + "Rapture Index ".Length;
            int endIdx     = document.ResponseString.IndexOf("<", startIdx);
            int raptureIdx = int.Parse(document.ResponseString.Substring(startIdx, endIdx - startIdx));

            startIdx = document.ResponseString.IndexOf("Updated ") + "Updated ".Length;
            endIdx   = document.ResponseString.IndexOf("<", startIdx);
            string dateString = document.ResponseString.Substring(startIdx, endIdx - startIdx);

            dateString = dateString.Replace("Sept", "Sep");

            DateTime raptureDate = (DateTime) new DateTimeConverter().ConvertFrom(dateString);

            if (!DB.RaptureIndexes.Where(x => x.rapture_day.Equals(raptureDate)).Any())
            {
                int oil       = GetRaptureAmount(document.ResponseString, "Oil Supply", dateString);
                int debt      = GetRaptureAmount(document.ResponseString, "Debt and Trade", dateString);
                int weather   = GetRaptureAmount(document.ResponseString, "Wild Weather", dateString);
                int globalism = GetRaptureAmount(document.ResponseString, "Globalism", dateString);
                int economy   = GetRaptureAmount(document.ResponseString, "Economy", dateString);

                Console.WriteLine("Rapture on " + raptureDate.ToString("d") + " was " + raptureIdx + " - oil: " + oil + ", debt: " + debt +
                                  ", weather: " + weather + ", globalism: " + globalism + ", economy: " + economy);

                RaptureIndex rapture = new RaptureIndex
                {
                    rapture_day   = raptureDate,
                    rapture_index = raptureIdx,
                    oil           = oil,
                    debt          = debt,
                    weather       = weather,
                    globalism     = globalism,
                    economy       = economy
                };
                DB.AddToRaptureIndexes(rapture);
                DB.SaveChanges();
            }
            else
            {
                Console.WriteLine("Rapture already happened on " + raptureDate.ToString("d"));
            }
        }