// 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); }
// Return common.extSortedList that store the mapping [Column in web page] -> [importPrice column] private common.extSortedList CreateMapping(metaStock meta, databases.importDS.importPriceDataTable dataTbl) { common.extSortedList list = new common.extSortedList(); list.Add(meta.closePriceColId.ToString(), dataTbl.closePriceColumn.ColumnName); list.Add(meta.volumeColId.ToString(), dataTbl.volumeColumn.ColumnName); return(list); }
/// <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> public databases.importDS.importPriceDataTable GetPriceFromWeb(DateTime updateTime, metaStock priceMeta, databases.baseDS.exchangeDetailRow exchangeDetailRow) { bool bHaveData = false; //Kiem tra xem bang co du lieu hay ko //Data in CultureInfo CultureInfoUS = common.language.GetCulture("en-US"); databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable(); this.mappingList = CreateMapping(priceMeta, importPriceTbl); // Get the URL specified var webGet = new HtmlWeb(); var document = webGet.Load(exchangeDetailRow.address); // 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; databases.importDS.importPriceRow importRow = null; databases.importDS.importPriceRow oldImportRow; 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(); databases.AppLibs.InitData(importRow); importRow.onDate = updateTime; importRow.stockCode = stockCode; importRow.isTotalVolume = true; columnCount++; continue; } //Last column if (columnCount == priceMeta.endAtColId) { if (importRow.closePrice > 0) { //Only add new when there are some changes oldImportRow = lastImportData.Find(importRow); if (!lastImportData.IsSameData(importRow, oldImportRow)) { importPriceTbl.AddimportPriceRow(importRow); lastImportData.Update(importRow); } else { importRow.CancelEdit(); } } else { importRow.CancelEdit(); } columnCount = 0; continue; } object obj = this.mappingList.GetValue(columnCount.ToString()); if (obj != null) { val = 0; common.system.StrToDecimal(item.Text, CultureInfoUS, out val); //15/07: Kiem tra gia tri co bang 0 hay ko. Neu co thi se co loi doc du lieu if (val != 0) { bHaveData = true; } importRow[(string)obj] = val; } columnCount++; } //Neu ko co du lieu if (!bHaveData) { throw new Exception(); } 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> public databases.importDS.importPriceDataTable GetPriceFromWeb(DateTime updateTime, metaStock priceMeta,databases.baseDS.exchangeDetailRow exchangeDetailRow) { bool bHaveData = false; //Kiem tra xem bang co du lieu hay ko //Data in CultureInfo CultureInfoUS = common.language.GetCulture("en-US"); databases.importDS.importPriceDataTable importPriceTbl = new databases.importDS.importPriceDataTable(); this.mappingList = CreateMapping(priceMeta, importPriceTbl); // Get the URL specified var webGet = new HtmlWeb(); var document = webGet.Load(exchangeDetailRow.address); // 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; databases.importDS.importPriceRow importRow = null; databases.importDS.importPriceRow oldImportRow; 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(); databases.AppLibs.InitData(importRow); importRow.onDate = updateTime; importRow.stockCode = stockCode; importRow.isTotalVolume = true; columnCount++; continue; } //Last column if (columnCount == priceMeta.endAtColId) { if (importRow.closePrice > 0) { //Only add new when there are some changes oldImportRow = lastImportData.Find(importRow); if (!lastImportData.IsSameData(importRow, oldImportRow)) { importPriceTbl.AddimportPriceRow(importRow); lastImportData.Update(importRow); } else importRow.CancelEdit(); } else importRow.CancelEdit(); columnCount = 0; continue; } object obj = this.mappingList.GetValue(columnCount.ToString()); if (obj != null) { val = 0; common.system.StrToDecimal(item.Text, CultureInfoUS, out val); //15/07: Kiem tra gia tri co bang 0 hay ko. Neu co thi se co loi doc du lieu if (val != 0) bHaveData = true; importRow[(string)obj] = val; } columnCount++; } //Neu ko co du lieu if (!bHaveData) throw new Exception(); return importPriceTbl; }
// Return common.extSortedList that store the mapping [Column in web page] -> [importPrice column] private common.extSortedList CreateMapping(metaStock meta, databases.importDS.importPriceDataTable dataTbl) { common.extSortedList list = new common.extSortedList(); list.Add(meta.closePriceColId.ToString(), dataTbl.closePriceColumn.ColumnName); list.Add(meta.volumeColId.ToString(), dataTbl.volumeColumn.ColumnName); return list; }
/// <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; }