Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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);
        }