/// <summary> /// Parses a given IHtmlDocument of the Ban user page. /// </summary> /// <param name="document">An IHtmlDocument of the ban page.</param> /// <returns>The BanPage.</returns> public static BanPage ParseBanPage(IHtmlDocument document) { if (document == null) { throw new ArgumentNullException(nameof(document)); } var banPage = new BanPage(); var banList = document.QuerySelector(@"table[class=""standard full""]"); if (banList == null) { return(banPage); } GetPageInfo(document, banPage); var banListBody = banList.QuerySelector("tbody"); var banListRows = banListBody.QuerySelectorAll("tr"); foreach (var banListRow in banListRows) { var banItem = new BanItem(); var tds = banListRow.QuerySelectorAll("td"); if (!tds.Any()) { continue; } var type = tds[0].QuerySelector("a"); var date = tds[1]; var horribleJerk = tds[2].QuerySelector("a"); var reason = tds[3]; var requestedBy = tds[4].QuerySelector("a"); var approvedBy = tds[5].QuerySelector("a"); banItem.Type = type.TextContent; banItem.PostId = Convert.ToInt32(type.GetAttribute("href").Split('=').Last(), CultureInfo.InvariantCulture); banItem.Date = DateTime.Parse(date.TextContent, CultureInfo.InvariantCulture); banItem.HorribleJerk = horribleJerk.TextContent; banItem.HorribleJerkId = Convert.ToInt32(horribleJerk.GetAttribute("href").Split('=').Last(), CultureInfo.InvariantCulture); banItem.PunishmentReason = reason.InnerHtml; banItem.RequestedBy = requestedBy.TextContent; banItem.RequestedById = Convert.ToInt32(requestedBy.GetAttribute("href").Split('=').Last(), CultureInfo.InvariantCulture); banItem.ApprovedBy = approvedBy.TextContent; banItem.ApprovedById = Convert.ToInt32(approvedBy.GetAttribute("href").Split('=').Last(), CultureInfo.InvariantCulture); banPage.Bans.Add(banItem); } return(banPage); }
private static void GetPageInfo(IHtmlDocument doc, BanPage banPage) { var banPageDoc = doc.QuerySelector(".pages"); if (banPage == null) { return; } var select = banPageDoc.QuerySelector("select"); var selectedPageItem = select.QuerySelector("option:checked"); banPage.CurrentPage = Convert.ToInt32(selectedPageItem.TextContent); banPage.TotalPages = select.ChildElementCount; }
private static void GetPageInfo(IHtmlDocument doc, BanPage banPage) { if (doc == null) { throw new ArgumentNullException(nameof(doc)); } if (banPage == null) { throw new ArgumentNullException(nameof(banPage)); } var banPageDoc = doc.QuerySelector(".pages"); var select = banPageDoc.QuerySelector("select"); var selectedPageItem = select.QuerySelector("option:checked"); banPage.CurrentPage = Convert.ToInt32(selectedPageItem.TextContent, CultureInfo.InvariantCulture); banPage.TotalPages = select.ChildElementCount; }