public IEnumerable<IStockBonus> GetStockBonus(string stockCode) { string url = string.Format(@"http://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/{0}.phtml", stockCode); string pageHtml = PageReader.GetPageSource(url); if (string.IsNullOrEmpty(pageHtml)) return null; var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(pageHtml); HtmlNode titleNode = htmlDocument.DocumentNode.SelectSingleNode("//title"); //string name = titleNode.InnerText.Substring(0, titleNode.InnerText.IndexOf("(")); HtmlNode nodeSharebonus_1 = htmlDocument.GetElementbyId("sharebonus_1"); HtmlNode nodeSharebonus_2 = htmlDocument.GetElementbyId("sharebonus_2"); List<IStockBonus> lstStockBonus = new List<IStockBonus>(); var lstNodes1 = nodeSharebonus_1.SelectNodes("tbody/tr"); foreach (var item in lstNodes1) { var nodes = item.SelectNodes("td"); string urlDetails = string.Format(@"http://vip.stock.finance.sina.com.cn/{0}", item.SelectSingleNode("td/a").Attributes["href"].Value); var stockBonus = new StockBonus() { //Code = stockCode, //ShortName = name, DateOfDeclaration = DateTime.Parse(nodes[0].InnerText),// 公告日期 Type = BounsType.ProfitSharing,// 分红类型 ExdividendDate = DateTime.Parse(nodes[5].InnerText),// 除权除息日 RegisterDate = DateTime.Parse(nodes[6].InnerText), // 股权登记日 }; StockBonusDetailsParser(urlDetails, ref stockBonus); lstStockBonus.Add(stockBonus); } var lstNodes2 = nodeSharebonus_2.SelectNodes("tbody/tr"); foreach (var item in lstNodes2) { var nodes = item.SelectNodes("td"); string urlDetails = string.Format(@"http://vip.stock.finance.sina.com.cn/{0}", item.SelectSingleNode("td/a").Attributes["href"].Value); var stockBonus = new StockBonus() { //Code = stockCode, //ShortName = name, DateOfDeclaration = DateTime.Parse(nodes[0].InnerText),// 公告日期 Type = BounsType.StockOption,// 配股类型 ExdividendDate = DateTime.Parse(nodes[4].InnerText),// 除权除息日 RegisterDate = DateTime.Parse(nodes[5].InnerText), // 股权登记日 }; StockBonusDetailsParser(urlDetails, ref stockBonus); lstStockBonus.Add(stockBonus); } return lstStockBonus; }
public void TestStockBonusReadAndWrite() { StockBonus insertData = new StockBonus() { ActualDispatchRate = 0, BAndHDividendAfterTax = 0, BAndHPreTaxDividend = 0, BonusRate = 0, CapitalStockBaseDate = new DateTime(2015, 7, 2), CapitalStockBeforeDispatch = 0, CapitalSurplusIncreaseRate = 0, ConvertibleBondDate = new DateTime(2015, 7, 2), DateOfDeclaration = new DateTime(2015, 6, 25), Description = "", DispatchExpiryDate = new DateTime(2015, 7, 2), DispatchListingDate = new DateTime(2015, 7, 2), DispatchPrice = 0, DispatchRate = 0, DividendAfterTax = 0, ExchangeRate = 0, ExdividendDate = new DateTime(2015, 7, 2), ExpirationDate = new DateTime(2015, 7, 2), IncreaseRate = 0, IssuingObject = "", LastTradingDay = new DateTime(2015, 7, 2), PreTaxDividend = 0, RegisterDate = new DateTime(2015, 7, 2), ReserveSurplusIncreaseRate = 0, ResolutionOfShareholdersMeetingDate = new DateTime(2015, 7, 2), ShareSplitCount = 0, StartOrArriveDate = new DateTime(2015, 7, 2), TotalDispatch = 0, TransferredAllottedPrice = 0, TransferredAllottedRate = 0, Type = BounsType.ProfitSharing }; string fileName = "StockBonusData.sdf"; string fullPath = Path.Combine(directory, fileName); // Add using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath)) { var repository = new Repository<StockBonus>(context); repository.Add(insertData); repository.UnitOfWork.Commit(); } // Read StockBonus readData; using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath)) { var repository = new Repository<StockBonus>(context); readData = repository.Get(insertData.DateOfDeclaration); } Assert.IsNotNull(readData); Assert.AreEqual(insertData.DateOfDeclaration, readData.DateOfDeclaration); // update StockBonus updatedData = readData; updatedData.PreTaxDividend = 10; using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath)) { var repository = new Repository<StockBonus>(context); repository.Update(updatedData); repository.UnitOfWork.Commit(); } // Read using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath)) { var repository = new Repository<StockBonus>(context); readData = repository.Get(insertData.DateOfDeclaration); } Assert.AreEqual(readData.PreTaxDividend, 10); }
private void StockBonusDetailsParser(string url, ref StockBonus data) { string pageHtml = PageReader.GetPageSource(url); if (string.IsNullOrEmpty(pageHtml)) return; var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(pageHtml); HtmlNode sharebonusdetail = htmlDocument.GetElementbyId("sharebonusdetail"); var lstTdNodes = sharebonusdetail.SelectNodes("tr/td"); double PreTaxDividend = 0;// 税前红利(10派)(报价币种) if (double.TryParse(lstTdNodes[1].InnerText, out PreTaxDividend)) data.PreTaxDividend = PreTaxDividend; double DividendAfterTax = 0;// 税后红利(10派)(报价币种) if (double.TryParse(lstTdNodes[3].InnerText, out DividendAfterTax)) data.DividendAfterTax = DividendAfterTax; double BAndHPreTaxDividend = 0;// B、H股税前红利(人民币) if (double.TryParse(lstTdNodes[5].InnerText, out BAndHPreTaxDividend)) data.BAndHPreTaxDividend = BAndHPreTaxDividend; double BAndHDividendAfterTax = 0;// B、H股税后红利(人民币) if (double.TryParse(lstTdNodes[7].InnerText, out BAndHDividendAfterTax)) data.BAndHDividendAfterTax = BAndHDividendAfterTax; double BonusRate = 0;// 送股比例(10送) if (double.TryParse(lstTdNodes[9].InnerText, out BonusRate)) data.BonusRate = BonusRate; double IncreaseRate = 0;// 转增比例(10转增) if (double.TryParse(lstTdNodes[11].InnerText, out IncreaseRate)) data.IncreaseRate = IncreaseRate; double ReserveSurplusIncreaseRate = 0;// 盈余公积金转增比例(10转增) if (double.TryParse(lstTdNodes[13].InnerText, out ReserveSurplusIncreaseRate)) data.ReserveSurplusIncreaseRate = ReserveSurplusIncreaseRate; double CapitalSurplusIncreaseRate = 0;// 资本公积金转增比例(10转增) if (double.TryParse(lstTdNodes[15].InnerText, out CapitalSurplusIncreaseRate)) data.CapitalSurplusIncreaseRate = CapitalSurplusIncreaseRate; string IssuingObject = lstTdNodes[17].InnerText;// 发放对象 data.IssuingObject = string.IsNullOrEmpty(IssuingObject) ? string.Empty : IssuingObject; DateTime CapitalStockBaseDate = DateTime.MaxValue;// 股本基准日 if (DateTime.TryParse(lstTdNodes[19].InnerText, out CapitalStockBaseDate)) data.CapitalStockBaseDate = CapitalStockBaseDate; DateTime LastTradingDay = DateTime.MaxValue;// 最后交易日 if (DateTime.TryParse(lstTdNodes[21].InnerText, out LastTradingDay)) data.LastTradingDay = LastTradingDay; DateTime StartOrArriveDate = DateTime.MaxValue;// 红利/配股起始日(送、转股到账日) if (DateTime.TryParse(lstTdNodes[27].InnerText, out StartOrArriveDate)) data.StartOrArriveDate = StartOrArriveDate; DateTime ExpirationDate = DateTime.MaxValue;// 红利/配股终止日 if (DateTime.TryParse(lstTdNodes[29].InnerText, out ExpirationDate)) data.ExpirationDate = ExpirationDate; DateTime DispatchListingDate = DateTime.MaxValue;// 配股上市日 if (DateTime.TryParse(lstTdNodes[31].InnerText, out DispatchListingDate)) data.DispatchListingDate = DispatchListingDate; DateTime ResolutionOfShareholdersMeetingDate = DateTime.MaxValue;// 股东大会决议公告日期 if (DateTime.TryParse(lstTdNodes[33].InnerText, out ResolutionOfShareholdersMeetingDate)) data.ResolutionOfShareholdersMeetingDate = ResolutionOfShareholdersMeetingDate; DateTime ConvertibleBondDate = DateTime.MaxValue;// 可转债享受权益转股截止日 if (DateTime.TryParse(lstTdNodes[35].InnerText, out ConvertibleBondDate)) data.ConvertibleBondDate = ConvertibleBondDate; double DispatchRate = 0;// 配股比例(10配) if (double.TryParse(lstTdNodes[37].InnerText, out DispatchRate)) data.DispatchRate = DispatchRate; double DispatchPrice = 0;// 配股价 if (double.TryParse(lstTdNodes[39].InnerText, out DispatchPrice)) data.DispatchPrice = DispatchPrice; double TransferredAllottedRate = 0;// 转配比例 if (double.TryParse(lstTdNodes[41].InnerText, out TransferredAllottedRate)) data.TransferredAllottedRate = TransferredAllottedRate; double TransferredAllottedPrice = 0;// 转配价 if (double.TryParse(lstTdNodes[43].InnerText, out TransferredAllottedPrice)) data.TransferredAllottedPrice = TransferredAllottedPrice; DateTime DispatchExpiryDate = DateTime.MaxValue;// 配股有效期 if (DateTime.TryParse(lstTdNodes[45].InnerText, out DispatchExpiryDate)) data.DispatchExpiryDate = DispatchExpiryDate; double TotalDispatch = 0;// 实际配股数 (万股) if (double.TryParse(lstTdNodes[47].InnerText, out TotalDispatch)) data.TotalDispatch = TotalDispatch; double CapitalStockBeforeDispatch = 0;// 配股前总股本 (万股) if (double.TryParse(lstTdNodes[49].InnerText, out CapitalStockBeforeDispatch)) data.CapitalStockBeforeDispatch = CapitalStockBeforeDispatch; double ActualDispatchRate = 0;// 实际配股比例 if (double.TryParse(lstTdNodes[51].InnerText, out ActualDispatchRate)) data.ActualDispatchRate = ActualDispatchRate; double ShareSplitCount = 0;// 每股拆细数 if (double.TryParse(lstTdNodes[53].InnerText, out ShareSplitCount)) data.ShareSplitCount = ShareSplitCount; double ExchangeRate = 0;// 外币折算汇率 if (double.TryParse(lstTdNodes[55].InnerText, out ExchangeRate)) data.ExchangeRate = ExchangeRate; string Description = lstTdNodes[57].InnerText;// 权息说明 data.Description = string.IsNullOrEmpty(Description) ? string.Empty : Description; }
public IEnumerable<IStockBonus> GetAll() { List<StockBonus> result = new List<StockBonus>(); string sql = string.Format("SELECT * FROM {0}", tableName); using (SqlCeConnection conn = new SqlCeConnection(ConnectionString)) { conn.Open(); using (SqlCeCommand cmd = new SqlCeCommand(sql, conn)) { SqlCeDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { StockBonus dbo = new StockBonus { ActualDispatchRate = Double.Parse(reader[colActualDispatchRate].ToString().Trim()), BAndHDividendAfterTax = Double.Parse(reader[colBAndHDividendAfterTax].ToString().Trim()), BAndHPreTaxDividend = Double.Parse(reader[colBAndHPreTaxDividend].ToString().Trim()), BonusRate = Double.Parse(reader[colBonusRate].ToString().Trim()), CapitalStockBaseDate = DateTime.Parse(reader[colCapitalStockBaseDate].ToString().Trim()), CapitalStockBeforeDispatch = Double.Parse(reader[colCapitalStockBeforeDispatch].ToString().Trim()), CapitalSurplusIncreaseRate = Double.Parse(reader[colCapitalSurplusIncreaseRate].ToString().Trim()), ConvertibleBondDate = DateTime.Parse(reader[colConvertibleBondDate].ToString().Trim()), DateOfDeclaration = DateTime.Parse(reader[colDateOfDeclaration].ToString().Trim()), Description = reader[colDescription].ToString().Trim(), DispatchExpiryDate = DateTime.Parse(reader[colDispatchExpiryDate].ToString().Trim()), DispatchListingDate = DateTime.Parse(reader[colDispatchListingDate].ToString().Trim()), DispatchPrice = Double.Parse(reader[colDispatchPrice].ToString().Trim()), DispatchRate = Double.Parse(reader[colDispatchRate].ToString().Trim()), DividendAfterTax = Double.Parse(reader[colDividendAfterTax].ToString().Trim()), ExchangeRate = Double.Parse(reader[colExchangeRate].ToString().Trim()), ExdividendDate = DateTime.Parse(reader[colExdividendDate].ToString().Trim()), ExpirationDate = DateTime.Parse(reader[colExpirationDate].ToString().Trim()), IncreaseRate = Double.Parse(reader[colIncreaseRate].ToString().Trim()), IssuingObject = reader[colIssuingObject].ToString().Trim(), LastTradingDay = DateTime.Parse(reader[colLastTradingDay].ToString().Trim()), PreTaxDividend = Double.Parse(reader[colPreTaxDividend].ToString().Trim()), RegisterDate = DateTime.Parse(reader[colRegisterDate].ToString().Trim()), ReserveSurplusIncreaseRate = Double.Parse(reader[colReserveSurplusIncreaseRate].ToString().Trim()), ResolutionOfShareholdersMeetingDate = DateTime.Parse(reader[colResolutionOfShareholdersMeetingDate].ToString().Trim()), ShareSplitCount = Double.Parse(reader[colShareSplitCount].ToString().Trim()), StartOrArriveDate = DateTime.Parse(reader[colStartOrArriveDate].ToString().Trim()), TotalDispatch = Double.Parse(reader[colTotalDispatch].ToString().Trim()), TransferredAllottedPrice = Double.Parse(reader[colTransferredAllottedPrice].ToString().Trim()), TransferredAllottedRate = Double.Parse(reader[colTransferredAllottedRate].ToString().Trim()), Type = (BounsType)Int32.Parse(reader[colType].ToString().Trim()) }; result.Add(dbo); } reader.Close(); } conn.Close(); } return result; }