private static void AddPackage(SteamApp app, HtmlNode packageNode) { var package = app.AddNewPackage(); var packageTitleNode = packageNode.SelectSingleNode($"//{PackageTitle}"); package.Title = packageTitleNode.InnerHtml.Replace("Buy ", "").Trim(); var priceNodes = packageNode.SelectNodes($"//div[@class='{PackagePriceXPath}']"); if (priceNodes != null) { var priceNode = priceNodes[0]; package.CurrentPrice = ParseNodeWithCurrencyToDecimal(priceNode); package.OriginalPrice = package.CurrentPrice; } else { var originalPriceNode = packageNode.SelectSingleNode($"//div[@class='{PackageOriginalPriceXPath}']"); package.OriginalPrice = ParseNodeWithCurrencyToDecimal(originalPriceNode); var discountPriceNode = packageNode.SelectSingleNode($"//div[@class='{PackageDiscountPriceXPath}']"); package.CurrentPrice = ParseNodeWithCurrencyToDecimal(discountPriceNode); } }
private static void ShowApp(SteamApp app) { Console.Out.WriteLine(app.Title); foreach (var package in app.Packages) { Console.Out.WriteLine("Package:"); Console.Out.WriteLine($"\t{package.Title}"); Console.Out.WriteLine($"\t${package.CurrentPrice}"); Console.Out.WriteLine("------------"); } Console.Out.WriteLine("-------------------------------------------------------------"); }
public static async Task <SteamApp> GetSteamApp(int appId) { SteamApp app = null; await Task.Run(() => { try { var response = GetResponse(appId); var html = GetHtml(appId, response); app = Parser.ParsePage(appId, html); } catch (Exception exception) { Debug.WriteLine(exception.Message); } }); return(app); }
public static SteamApp ParsePage(int appId, string html) { if (string.IsNullOrWhiteSpace(html)) { throw new ArgumentNullException(nameof(html)); } try { var app = SteamApp.NewSteamApp(appId, html); var htmlDocument = new HtmlDocument(); var htmlCleaned = html.Replace("\"", "'"); htmlDocument.LoadHtml(htmlCleaned); var documentNode = htmlDocument.DocumentNode; var titleNode = documentNode.SelectSingleNode($"//div[@class='{AppTitleClass}']"); app.Title = titleNode.InnerHtml.Trim(); var packageNodes = documentNode.SelectNodes($"//div[@class='{PackageClass}']").ToArray(); foreach (var packageNode in packageNodes) { AddPackage(app, packageNode); } return(app); } catch (Exception) { throw new InvalidAppException(appId); } }