using Newtonsoft.Json; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using StockDal.Interface; using DataDomain; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.Diagnostics; using StockDAL.Interface; using BrowserHelper.Driver; using BrowserHelper.Settings; using Helpers; namespace StockDal { public class StockMarketRepository : IStockMarketRepository { public Dictionary StockMarketList { get; set; } public List DumpObjects { get; set; } = new List(); public DiTraderStockRow SaveRow { get; set; } public StringBuilder TextResults { get; set; } //public bool ViewBrowser { get; set; } public IWebDriver driver; private readonly IStockPersonConnect _stockPersonConnect; private readonly IStockRepository _stockRepository; private readonly TestSettings _testSettings; private readonly IStockScrapePage _scrapePage; public StockMarketRepository( IStockPersonConnect stockPersonConnect, IStockRepository stockRepository, TestSettings testSettings, IStockScrapePage scrapePage) { // ViewBrowser = false; _stockPersonConnect = stockPersonConnect; _stockRepository = stockRepository; _testSettings = testSettings; _scrapePage = scrapePage; } //private void Find_Data() //{ // TextResults = new StringBuilder(); // IList searchElements = driver.FindElements(By.TagName("tbody")); // foreach (IWebElement i in searchElements) // { // HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument(); // var text = i.GetAttribute("innerHTML"); // htmlDocument.LoadHtml(text); // var inputs = htmlDocument.DocumentNode.Descendants("tr").ToList(); // foreach (var items in inputs) // { // HtmlAgilityPack.HtmlDocument htmlDocument1 = new HtmlAgilityPack.HtmlDocument(); // htmlDocument1.LoadHtml(items.InnerHtml); // var tds = htmlDocument1.DocumentNode.Descendants("td").ToList(); // var appendText = ""; // var fNr = 0; // foreach (var item in tds) // { // var intext = item.InnerText.Replace("\r\n", ""); // appendText += appendText.Length == 0 ? intext : " " + intext; // if (tds.Count == 10) // { // AddValueToListRow(fNr++, intext); // } // } // if (!string.IsNullOrEmpty(appendText)) // { // TextResults.Append(appendText + "\r\n"); // } // htmlDocument1 = null; // } // htmlDocument = null; // TextResults.Append("\r\n"); // } // // var oxe = StockMarketList; //} private void SaveLogging() { var output = JsonConvert.SerializeObject(DumpObjects, Formatting.Indented); Assembly assem = typeof(StockMarketRepository).Assembly; var programPath = assem.Location.Substring(0, assem.Location.LastIndexOf("\\")); var logPath = new DirectoryInfo(programPath + "\\Loggings"); if (!logPath.Exists) { logPath.Create(); } File.WriteAllText($"{programPath}\\Loggings\\Log{DateTime.Now.ToShortDateString()}.txt", output); } //private void AddValueToListRow(int pos, string value) //{ // switch (pos) // { // case 0: // { // SaveRow = new DiTraderStockRow(); // SaveRow.StockName = value; // break; // } // case 1: // { // SaveRow.ProcChange = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 2: // { // SaveRow.RealChange = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 3: // { // SaveRow.BuyPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 4: // { // SaveRow.SellPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 5: // { // SaveRow.LatestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 6: // { // SaveRow.HighestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 7: // { // SaveRow.LowestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value); // break; // } // case 8: // { // SaveRow.Volume = string.IsNullOrWhiteSpace(value) ? 0 : long.Parse(value.Replace(" ", "")); // break; // } // case 9: // { // SaveRow.TimeOfDay = value == "" ? TimeSpan.Parse("00:01") : TimeSpan.Parse(value); // //StockMarketList.Add(SaveRow.StockName, SaveRow); // try // { // StockMarketList.Add(SaveRow.StockName, SaveRow); // } // catch (ArgumentException) // { // try // { // StockMarketList.Add(SaveRow.StockName + "-2", SaveRow); // } // catch (Exception) // { // DumpObjects.Add(SaveRow); // } // } // break; // } // default: // break; // } //} //private void OpenBrowser(bool? burl2 = false) //{ // var driverService = ChromeDriverService.CreateDefaultService(); // driverService.HideCommandPromptWindow = true; // if (ViewBrowser) // { // if (driver == null) // { // driver = new ChromeDriver(driverService); // } // } // else // { // if (driver == null) // { // var options = new ChromeOptions(); // options.AddArgument("headless"); // driver = new ChromeDriver(driverService, options); // } // } // try // { // //var url0 = "https://money.cnn.com/data/hotstocks/index.html"; // var url = "https://trader.di.se/index.php/stocklist/index/2055?list=7126"; // var url2 = "https://trader.di.se/index.php/stocklist/index/2055?list=7116"; // var url3 = "https://trader.di.se/index.php/stocklist/index/2055?list=7127"; // //var url1 = "https://www.finansportalen.se/aktiekurser/"; // driver.Navigate().GoToUrl(burl2.HasValue ? (burl2.Value ? url2 : url) : url3); // } // catch // { // throw; // } //} private void saveStockData(List saveRow) { foreach (var row in saveRow) { try { StockMarketList.Add(row.StockName, row); } catch (ArgumentException) { try { StockMarketList.Add(row.StockName + "-2", row); } catch (Exception) { DumpObjects.Add(row); } } //break; } } public void LoadStockMarketList(int persId) { StockMarketList = new Dictionary(); DumpObjects = new List(); var groupedStocks = persId == 0 ? _stockRepository.GetStocksGroupedAllPersons() : _stockRepository.GetStocksGroupedPerPerson(persId); var lastGroup = string.Empty; var stockList = new List(); foreach (var groupedStock in groupedStocks) { if (groupedStock.StockGroup != lastGroup) { if (lastGroup != string.Empty) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { saveStockData(new List(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))); } else saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); stockList.Clear(); lastGroup = groupedStock.StockGroup; } else { lastGroup = groupedStock.StockGroup; } stockList.Add(groupedStock.StockId); } else { stockList.Add(groupedStock.StockId); } } if (stockList.Count > 0) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { saveStockData(new List(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))); } else saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); stockList.Clear(); } if (DumpObjects.Any()) { SaveLogging(); } } public DiTraderStockRow LoadStockMarketStockData(string searchedStock) { //StockMarketList = new Dictionary(); //DumpObjects = new List(); var groupedStocks = _stockRepository.GetGroupedStock(searchedStock); var lastGroup = string.Empty; var stockList = new List(); var output = new List(); foreach (var groupedStock in groupedStocks) { if (groupedStock.StockGroup != lastGroup) { if (lastGroup != string.Empty) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4)); } else output = _scrapePage.GetMyStockStatus(lastGroup); stockList.Clear(); lastGroup = groupedStock.StockGroup; } else { lastGroup = groupedStock.StockGroup; } stockList.Add(groupedStock.StockId); } else { stockList.Add(groupedStock.StockId); } } if (stockList.Count > 0) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4)); } else output = _scrapePage.GetMyStockStatus(lastGroup); stockList.Clear(); } return output[0]; //if (DumpObjects.Any()) //{ // SaveLogging(); //} } //public void LoadStockMarketList(int persId) //{ // LoadStockMarketList(persId); // //StockMarketList = new Dictionary(); // //ViewBrowser = viewBrowser; // //OpenBrowser(); // //Find_Data(); //} public void RefreshMarketList(int persId) { //StockMarketList = new Dictionary(); //driver.Navigate().Refresh(); //Find_Data(); } public void Clean() { driver?.Quit(); } } }