public async Task <IActionResult> Details(int symbolId) { var stockDetails = new StockDetailsModel(symbolId); await stockDetails.InitializeStockDetails(); return(View(stockDetails)); }
public static StockDetailsModel GetStockDetails(StockTitleModel stockTitle) { string primaryStockCode, secondaryStockCode = string.Empty; if (stockTitle.StockType == StockType.BSE) { primaryStockCode = GetFullStockcode(stockTitle.BSECode, StockExchanges.BSE); } else if (stockTitle.StockType == StockType.NSE) { primaryStockCode = GetFullStockcode(stockTitle.NSECode, StockExchanges.NSE); } else { primaryStockCode = GetFullStockcode(stockTitle.NSECode, StockExchanges.NSE); secondaryStockCode = GetFullStockcode(stockTitle.BSECode, StockExchanges.BSE); } StockDetailsModel stockDetail = new StockDetailsModel(); stockDetail.StockCode = stockTitle.NSECode != null ? stockTitle.NSECode : stockTitle.BSECode; //main page = PE and Price var summaryUrl = FormUrl(primaryStockCode, UrlType.Summary); var obj = new HtmlWeb(); obj.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; double opVal; try { var document = obj.Load(summaryUrl); stockDetail.Price = Double.TryParse(document.DocumentNode.SelectSingleNode(Constants.StockPriceHtml).InnerText, out opVal) ? opVal : -1.0; stockDetail.PERatio = Double.TryParse(document.DocumentNode.SelectSingleNode(Constants.StockPERatioTableHtml).ChildNodes.First(x => x.InnerText.Contains("P/E (ttm)")).SelectSingleNode("td").InnerText, out opVal) ? opVal : -1.0; var keyStatsNode = document.DocumentNode.SelectNodes(Constants.NavBarHtml).FirstOrDefault(x => x.InnerText.Equals("Key Statistics", StringComparison.OrdinalIgnoreCase)); string keyStatsUrl = string.Empty; if (keyStatsNode != null && keyStatsNode.OuterHtml.Contains("href")) { keyStatsUrl = FormUrl(primaryStockCode, UrlType.KeyStatistics); } else if (!string.IsNullOrEmpty(secondaryStockCode)) { keyStatsUrl = FormUrl(secondaryStockCode, UrlType.KeyStatistics); } if (string.IsNullOrEmpty(keyStatsUrl)) { stockDetail.PERatio = stockDetail.PBRatio = stockDetail.DERatio = -1.0; return(stockDetail); } else { document = obj.Load(keyStatsUrl); stockDetail.PBRatio = Double.TryParse(document.DocumentNode.SelectNodes(Constants.StockKeyStatsHtml).First(x => x.InnerText.StartsWith("Price/Book")).SelectSingleNode("td[@class=\"yfnc_tabledata1\"]").InnerText, out opVal) ? opVal : -1.0; bool isZeroDebt = false; try { double totalDebt = -1; if (Double.TryParse(document.DocumentNode.SelectNodes(Constants.StockKeyStatsHtml).First(x => x.InnerText.StartsWith("Total Debt (m")).SelectSingleNode("td[@class=\"yfnc_tabledata1\"]").InnerText, out totalDebt) && totalDebt == 0.0) { stockDetail.DERatio = 0.0; isZeroDebt = true; } } catch (Exception e) { } if (!isZeroDebt) { stockDetail.DERatio = Double.TryParse(document.DocumentNode.SelectNodes(Constants.StockKeyStatsHtml).First(x => x.InnerText.StartsWith("Total Debt/Equity")).SelectSingleNode("td[@class=\"yfnc_tabledata1\"]").InnerText, out opVal) ? opVal : -1.0; } } } catch (Exception e) { stockDetail.PERatio = stockDetail.PBRatio = stockDetail.DERatio = -1.0; } return(stockDetail); }