Beispiel #1
0
        public async Task <IActionResult> Details(int symbolId)
        {
            var stockDetails = new StockDetailsModel(symbolId);
            await stockDetails.InitializeStockDetails();

            return(View(stockDetails));
        }
Beispiel #2
0
        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);
        }