public async static Task <Post[]> Thread(int threadId) { using var httpClient = new HttpClient(); var html_bytes = await httpClient.GetByteArrayAsync(BaseUrl + $"showflat.php?Number={threadId}"); var html_raw = Ru.GetString(html_bytes); html_raw = html_raw.Replace("this.scrollHeight > 49", ""); var xhtml = NitroBolt.HtmlParsing.HtmlHelper.LoadXElementFromText(html_raw); var htmlBody = xhtml.Element("body"); var bordersTable = htmlBody.Elements("table").ElementAtOrDefault(3)?.Descendants("table") .FirstOrDefault(_table => _table.Attribute("class")?.Value == "tableborders"); var postTable = bordersTable?.Elements("tr").ElementAtOrDefault(1)?.Element("td")?.Element("table"); var postTrs = (postTable?.Elements("tr")?.ToArray()).OrEmpty(); var posts = new List <Post>(); for (var i = 0; i < postTrs.Length; i += 2) { var postHeaderTr = postTrs[i]; var postBodyTr = postTrs[i + 1]; var userTd = postHeaderTr?.Elements("td")?.ElementAtOrDefault(0); var subjectTd = postHeaderTr?.Elements("td")?.ElementAtOrDefault(1); var bodyTd = postBodyTr?.Element("td"); var title = subjectTd?.Element("table")?.Element("tr")?.Element("td")?.Element("b")?.Value?.Trim(); var postIdName = userTd?.Element("a")?.Attribute("name")?.Value; var postId = ConvertHlp.ToInt(postIdName?.StartsWith("Post") == true ? postIdName.Substring("Post".Length) : postIdName); if (postId == null || title?.EmptyAsNull() == null) { continue; } var postBody = bodyTd?.Element("table")?.Element("tr")?.Element("td")?.Element("font"); var bodyHtml = postBody.Nodes().Select(node => node.ToString()).JoinToString(); posts.Add(new Post(postId.Value, title, bodyHtml)); } return(posts.ToArray()); }
public async static Task <Area[]> Areas() { using var httpClient = new HttpClient(); var html_bytes = await httpClient.GetByteArrayAsync(BaseUrl + "ubbthreads.php"); var html_raw = Ru.GetString(html_bytes); var xhtml = NitroBolt.HtmlParsing.HtmlHelper.LoadXElementFromText(html_raw); var body = xhtml.Element("body"); var areaTables = body.Elements("table").ElementAtOrDefault(2)?.Descendants("table").Where(_table => _table.Attribute("class")?.Value == "tableborders").ToArray(); return(areaTables .Select(areaTable => TableToArea(areaTable)) .ToArray()); }
public async static Task <Thread[]> Threads(string boardName) { using var httpClient = new HttpClient(); var html_bytes = await httpClient.GetByteArrayAsync(BaseUrl + $"postlist.php?Board={boardName}"); var html_raw = Ru.GetString(html_bytes); var xhtml = NitroBolt.HtmlParsing.HtmlHelper.LoadXElementFromText(html_raw); var body = xhtml.Element("body"); var threadTable = body.Elements("table").ElementAtOrDefault(3)?.Descendants("table") .FirstOrDefault(_table => _table.Attribute("class")?.Value == "tableborders"); var threads = (threadTable?.Elements("tr")).OrEmpty().Skip(1) .Select(tr => ParseThreadTr(tr)) .Where(thread => thread != null) .ToArray(); return(threads); }