public bool Parse(string trContent) { string[] parts = trContent.Split(new string[] { "/td>" }, StringSplitOptions.RemoveEmptyEntries); // Symbol if (m_regexSymbol.IsMatch(parts[0])) m_symbol = TrimBrackets(m_regexSymbol.Matches(parts[0])[0].Value); else return false; // Name if (m_regexName.IsMatch(parts[1])) { m_name = TrimBrackets(m_regexName.Matches(parts[1])[0].Value); if (m_name.IndexOf("'") >= 0) { while (m_name.IndexOf("'") >= 0) { m_name = m_name.Replace("'", "{##}"); } } m_name = m_name.Replace("{##}", "''"); } else return false; // Last trade if (m_regexLastTrade.IsMatch(parts[2])) m_lastTrade = TrimBrackets(m_regexLastTrade.Matches(parts[2])[0].Value); else return false; if (m_regexLastTradeTime.IsMatch(parts[2])) m_lastTradeTime = TrimBrackets(m_regexLastTradeTime.Matches(parts[2])[0].Value); else return false; // Change if (m_regexChange.IsMatch(parts[3])) { MatchCollection mc = m_regexChange.Matches(parts[3]); m_change = mc[0].Value; m_changePercent = mc[1].Value; } else return false; // Volume if (m_regexVolume.IsMatch(parts[4])) m_volume = TrimBrackets(m_regexVolume.Matches(parts[4])[0].Value); else return false; // YahooCSV string ycsvUrl = string.Format("http://download.finance.yahoo.com/d/quotes.csv?s={0}&f=sl1d1t1c1ohgv&e=.csv", m_symbol); YahooCSV ycsv = new YahooCSV(); if (ycsv.Initialize(ycsvUrl)) { m_lastTrade = ycsv.fields[1]; m_change = ycsv.fields[4]; } else Console.WriteLine("StockObject.Parse: Error: failed to load {0}", ycsvUrl); return true; }
private static void ProcessYahooCSV(ref Config config) { Console.WriteLine("ProcessYahooCSV: processing ProcessYahooCSV..."); try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("ConfigYahooCSV.xml"); XmlNodeList nodeList = xmlDoc.SelectNodes("/Config/CSVS/CSV"); Console.WriteLine("ProcessYahooCSV: Number of nodes found {0}", nodeList.Count); XmlNodeList nodeListDelete = xmlDoc.SelectNodes("/Config/Delete/stype"); List<YahooCSV> csvList = new List<YahooCSV>(); foreach (XmlNode xn in nodeList) { YahooCSV ycsv = new YahooCSV(); // Read the attributes ycsv.url = xn.Attributes["url"].InnerText; ycsv.symbol = xn.Attributes["symbol"].InnerText; ycsv.stype = xn.Attributes["stype"].InnerText; ycsv.name = xn.Attributes["name"].InnerText; ycsv.fieldIndex = xn.Attributes["fieldIndex"].InnerText; ycsv.extraField = xn.Attributes["extraField"].InnerText; Console.Write(string.Format("ProcessYahooCSV: downloading {0}...", ycsv.url)); // Initialize if (ycsv.Initialize(ycsv.url)) { Console.WriteLine("DONE"); csvList.Add(ycsv); } else Console.WriteLine("Error: failed to load {0}", ycsv.url); } xmlDoc = null; // Write data into database DBConnection dbConnection = null; try { dbConnection = new DBConnection(config.connectionString); if (dbConnection.Connect()) { // Delete the records foreach (XmlNode xn in nodeListDelete) { string queryDelete = string.Format("DELETE FROM {0} WHERE stype=N'{1}'", "stock_summary", xn.Attributes["stype"].InnerText); int rowsDelete = dbConnection.ExecuteQuery(queryDelete); } // Insert all objects for (int i = 0; i < nodeList.Count; i++) { Console.Write(string.Format("ProcessYahooCSV: saving {0}...", csvList[i].url)); Console.WriteLine("DONE"); string queryInsert = csvList[i].CreateInsertQuery("stock_summary", nodeList[i]); int rowsInserted = dbConnection.ExecuteQuery(queryInsert); } // Close DB connection dbConnection.Close(); } } catch (Exception ex) { dbConnection.Close(); Console.WriteLine("Exception: {0}", ex.Message); } } catch (Exception ex) { Console.WriteLine("Exception: {0}", ex.Message); } }