// Return common.extSortedList that store the mapping [Column in web page] -> [importPrice column] private static common.extSortedList CreateMapping(importPriceMeta meta, data.importDS.importPriceDataTable dataTbl) { common.extSortedList list = new common.extSortedList(); //list.Add(meta.sellPrice1ColId.ToString(), dataTbl.sellPrice1Column.ColumnName); //list.Add(meta.sellPrice2ColId.ToString(), dataTbl.sellPrice2Column.ColumnName); //list.Add(meta.sellPrice3ColId.ToString(), dataTbl.sellPrice3Column.ColumnName); //list.Add(meta.sellVolume1ColId.ToString(), dataTbl.sellVolume1Column.ColumnName); //list.Add(meta.sellVolume2ColId.ToString(), dataTbl.sellVolume2Column.ColumnName); //list.Add(meta.sellVolume3ColId.ToString(), dataTbl.sellVolume3Column.ColumnName); //list.Add(meta.buyPrice1ColId.ToString(), dataTbl.buyPrice1Column.ColumnName); //list.Add(meta.buyPrice2ColId.ToString(), dataTbl.buyPrice2Column.ColumnName); //list.Add(meta.buyPrice3ColId.ToString(), dataTbl.buyPrice3Column.ColumnName); //list.Add(meta.buyVolume1ColId.ToString(), dataTbl.buyVolume1Column.ColumnName); //list.Add(meta.buyVolume2ColId.ToString(), dataTbl.buyVolume2Column.ColumnName); //list.Add(meta.buyVolume3ColId.ToString(), dataTbl.buyVolume3Column.ColumnName); list.Add(meta.openPriceColId.ToString(), dataTbl.openPriceColumn.ColumnName); list.Add(meta.highPriceColId.ToString(), dataTbl.highPriceColumn.ColumnName); list.Add(meta.lowPriceColId.ToString(), dataTbl.lowPriceColumn.ColumnName); list.Add(meta.closePriceColId.ToString(), dataTbl.closePriceColumn.ColumnName); list.Add(meta.volumeColId.ToString(), dataTbl.volumeColumn.ColumnName); return(list); }
private static importPriceMeta metaHOSE() { importPriceMeta meta = new importPriceMeta(); meta.noRowIgnore = 0; meta.startAtColId = 0; meta.endAtColId = 25; meta.buyPrice3ColId = 6; meta.buyVolume3ColId = 7; meta.buyPrice2ColId = 8; meta.buyVolume2ColId = 9; meta.buyPrice1ColId = 10; meta.buyVolume1ColId = 11; meta.openPriceColId = 21; meta.highPriceColId = 22; meta.lowPriceColId = 23; meta.closePriceColId = 12; meta.volumeColId = 13; meta.sellPrice1ColId = 15; meta.sellVolume1ColId = 16; meta.sellPrice2ColId = 17; meta.sellVolume2ColId = 18; meta.sellPrice3ColId = 19; meta.sellVolume3ColId = 20; return(meta); }
private static importPriceMeta metaHOSE() { importPriceMeta meta = new importPriceMeta(); meta.noRowIgnore = 0; meta.startAtColId = 0; meta.endAtColId = 25; meta.buyPrice3ColId = 6; meta.buyVolume3ColId = 7; meta.buyPrice2ColId = 8; meta.buyVolume2ColId = 9; meta.buyPrice1ColId = 10; meta.buyVolume1ColId = 11; meta.openPriceColId = 21; meta.highPriceColId = 22; meta.lowPriceColId = 23; meta.closePriceColId = 12; meta.volumeColId = 13; meta.sellPrice1ColId = 15; meta.sellVolume1ColId = 16; meta.sellPrice2ColId = 17; meta.sellVolume2ColId = 18; meta.sellPrice3ColId = 19; meta.sellVolume3ColId = 20; return meta; }
private static data.importDS.importPriceDataTable GetPriceFromURL(DateTime updateTime, string url, string stockExchangeCode) { importPriceMeta meta = (stockExchangeCode == "HOSE" ? metaHOSE() : metaHASTC()); return(GetPriceFromURL(updateTime, url, meta, stockExchangeCode)); }
/// <summary> /// Import data from URL to tables : importPrice /// The function also detect and add new companies to the database /// </summary> /// <param name="url">URL to get data</param> /// <param name="priceMeta">meta describe the webpage structure</param> /// <param name="stockExchangeCode">stock exchange code of imported data </param> /// <param name="importPriceTbl"> where to store imported data </param> private static data.importDS.importPriceDataTable GetPriceFromURL(DateTime updateTime, string url, importPriceMeta priceMeta, string marketCode) { data.importDS.importPriceDataTable importPriceTbl = new data.importDS.importPriceDataTable(); common.extSortedList mappingList = CreateMapping(priceMeta, importPriceTbl); data.baseDS.priceDataRow priceDataRow; // Get the URL specified var webGet = new HtmlWeb(); var document = webGet.Load(url); // Get <a> tags that have a href attribute and non-whitespace inner text var linksOnPage = from item in document.DocumentNode.Descendants() where item.Name == "td" && item.Attributes["id"] == null select new { Text = item.InnerText }; bool fError = false; int igmoreRowCount = 0, columnCount = 0; decimal val = 0; data.importDS.importPriceRow importRow = null; string stockCode; foreach (var item in linksOnPage) { //Check whether to ignore some items at the first if (++igmoreRowCount <= priceMeta.noRowIgnore) { continue; } if (fError) { break; } if (columnCount == priceMeta.startAtColId) { stockCode = item.Text.Trim(); importRow = importPriceTbl.NewimportPriceRow(); application.DbAccess.InitData(importRow); importRow.onDate = updateTime; importRow.stockCode = stockCode; importRow.stockExchange = marketCode; importRow.isTotalVolume = true; columnCount++; continue; } //Last column if (columnCount == priceMeta.endAtColId) { if (importRow.closePrice > 0) { if (importRow.openPrice == 0) { priceDataRow = application.DbAccess.GetLastPriceData(importRow.stockCode); if (priceDataRow == null) { importRow.openPrice = importRow.lowPrice; } else { importRow.openPrice = priceDataRow.closePrice; } } importPriceTbl.AddimportPriceRow(importRow); } else { importRow.CancelEdit(); } columnCount = 0; continue; } object obj = mappingList.GetValue(columnCount.ToString()); if (obj != null) { val = 0; common.system.StrToDecimal(item.Text, libs.CultureInfoUS, out val); importRow[(string)obj] = val; } columnCount++; } return(importPriceTbl); }
/// <summary> /// Import data from URL to tables : importPrice /// The function also detect and add new companies to the database /// </summary> /// <param name="url">URL to get data</param> /// <param name="priceMeta">meta describe the webpage structure</param> /// <param name="stockExchangeCode">stock exchange code of imported data </param> /// <param name="importPriceTbl"> where to store imported data </param> private static data.importDS.importPriceDataTable GetPriceFromURL(DateTime updateTime, string url, importPriceMeta priceMeta, string marketCode) { data.importDS.importPriceDataTable importPriceTbl = new data.importDS.importPriceDataTable(); common.extSortedList mappingList = CreateMapping(priceMeta, importPriceTbl); data.baseDS.priceDataRow priceDataRow; // Get the URL specified var webGet = new HtmlWeb(); var document = webGet.Load(url); // Get <a> tags that have a href attribute and non-whitespace inner text var linksOnPage = from item in document.DocumentNode.Descendants() where item.Name == "td" && item.Attributes["id"] == null select new { Text = item.InnerText }; bool fError = false; int igmoreRowCount = 0, columnCount = 0; decimal val = 0; data.importDS.importPriceRow importRow = null; string stockCode; foreach (var item in linksOnPage) { //Check whether to ignore some items at the first if (++igmoreRowCount <= priceMeta.noRowIgnore) continue; if (fError) break; if (columnCount == priceMeta.startAtColId) { stockCode = item.Text.Trim(); importRow = importPriceTbl.NewimportPriceRow(); application.DbAccess.InitData(importRow); importRow.onDate = updateTime; importRow.stockCode = stockCode; importRow.stockExchange = marketCode; importRow.isTotalVolume = true; columnCount++; continue; } //Last column if (columnCount == priceMeta.endAtColId) { if (importRow.closePrice > 0) { if (importRow.openPrice == 0) { priceDataRow = application.DbAccess.GetLastPriceData(importRow.stockCode); if (priceDataRow == null) importRow.openPrice = importRow.lowPrice; else importRow.openPrice = priceDataRow.closePrice; } importPriceTbl.AddimportPriceRow(importRow); } else importRow.CancelEdit(); columnCount = 0; continue; } object obj = mappingList.GetValue(columnCount.ToString()); if (obj != null) { val = 0; common.system.StrToDecimal(item.Text, libs.CultureInfoUS, out val); importRow[(string)obj] = val; } columnCount++; } return importPriceTbl; }
// Return common.extSortedList that store the mapping [Column in web page] -> [importPrice column] private static common.extSortedList CreateMapping(importPriceMeta meta, data.importDS.importPriceDataTable dataTbl) { common.extSortedList list = new common.extSortedList(); //list.Add(meta.sellPrice1ColId.ToString(), dataTbl.sellPrice1Column.ColumnName); //list.Add(meta.sellPrice2ColId.ToString(), dataTbl.sellPrice2Column.ColumnName); //list.Add(meta.sellPrice3ColId.ToString(), dataTbl.sellPrice3Column.ColumnName); //list.Add(meta.sellVolume1ColId.ToString(), dataTbl.sellVolume1Column.ColumnName); //list.Add(meta.sellVolume2ColId.ToString(), dataTbl.sellVolume2Column.ColumnName); //list.Add(meta.sellVolume3ColId.ToString(), dataTbl.sellVolume3Column.ColumnName); //list.Add(meta.buyPrice1ColId.ToString(), dataTbl.buyPrice1Column.ColumnName); //list.Add(meta.buyPrice2ColId.ToString(), dataTbl.buyPrice2Column.ColumnName); //list.Add(meta.buyPrice3ColId.ToString(), dataTbl.buyPrice3Column.ColumnName); //list.Add(meta.buyVolume1ColId.ToString(), dataTbl.buyVolume1Column.ColumnName); //list.Add(meta.buyVolume2ColId.ToString(), dataTbl.buyVolume2Column.ColumnName); //list.Add(meta.buyVolume3ColId.ToString(), dataTbl.buyVolume3Column.ColumnName); list.Add(meta.openPriceColId.ToString(), dataTbl.openPriceColumn.ColumnName); list.Add(meta.highPriceColId.ToString(), dataTbl.highPriceColumn.ColumnName); list.Add(meta.lowPriceColId.ToString(), dataTbl.lowPriceColumn.ColumnName); list.Add(meta.closePriceColId.ToString(), dataTbl.closePriceColumn.ColumnName); list.Add(meta.volumeColId.ToString(), dataTbl.volumeColumn.ColumnName); return list; }