示例#1
0
        public async Task <ChapterLoadData> GetPageChapTer(Truyen truyen, int page, bool allowGetNoidung = true)
        {
            var pageUrl  = string.Format(TRUYEN_URL, truyen.TruyenUrl, page);
            var htmlData = await WebUtils.DoRequestSimpleGet(pageUrl, null, "", HOME_PAGE);

            if (htmlData.Status)
            {
                var dom = new HtmlDocument();
                dom.LoadHtml(htmlData.Data);
                var chapterDoms = dom.DocumentNode.SelectNodes(DANH_SACH_CHUONG_XPATH);

                var maxPage = 1;
                if (chapterDoms != null)
                {
                    var i        = 0;
                    var j        = 0;
                    var lchapter = new List <Chapter>();
                    foreach (var chapDom in chapterDoms)
                    {
                        i++;
                        if (i < 3)
                        {
                            continue;
                        }
                        var      chap = new Chapter();
                        HtmlNode tdom = null;
                        chap.TruyenUrl     = truyen.TruyenUrl;
                        chap.PageOfChapter = page;
                        tdom = chapDom.SelectSingleNode(CHUONGNUMBER_XPATH);
                        if (tdom != null)
                        {
                            chap.SoThuTu = tdom.InnerText.Trim();
                        }
                        tdom = chapDom.SelectSingleNode(TENCHUONG_XPATH);
                        if (tdom != null)
                        {
                            chap.TenChuong = tdom.InnerText.Trim();
                        }
                        else
                        {
                            continue;
                        }
                        tdom = chapDom.SelectSingleNode(SOURCE_XPATH);
                        if (tdom != null)
                        {
                            chap.Nguon = tdom.InnerText.Trim();
                        }
                        if (allowGetNoidung)
                        {
                            tdom = chapDom.SelectSingleNode(NOIDUNG_XPATH);
                            if (tdom != null)
                            {
                                List <HtmlNode> listRemove =
                                    tdom.ChildNodes.Where(iNode => iNode.Name == "span").ToList();
                                foreach (var iNode in listRemove)
                                {
                                    tdom.RemoveChild(iNode);
                                }
                                chap.NoiDung = tdom.InnerText.Trim();
                            }
                            else
                            {
                                continue;
                            }
                        }
                        chap.IndexNumberPageOfChapter = j++;
                        lchapter.Add(chap);
                    }

                    var ldom = dom.DocumentNode.SelectNodes(MAX_PAGE_TRUYEN_XPATH);
                    if (ldom != null)
                    {
                        foreach (var idom in ldom)
                        {
                            var cdom = idom.SelectSingleNode("./a");
                            if (cdom != null)
                            {
                                var href = cdom.GetAttributeValue("href", "");
                                if (href.IndexOf("=") != -1 && href.IndexOf("&") != -1)
                                {
                                    try
                                    {
                                        href = href.Substring(href.IndexOf("=") + 1, href.IndexOf("&") - href.IndexOf("=") - 1);
                                    }
                                    catch (Exception)
                                    {
                                        // ignored
                                    }
                                }
                                var n = 0;
                                int.TryParse(href, out n);
                                if (n > maxPage)
                                {
                                    maxPage = n;
                                }
                            }
                        }
                    }
                    var result = new ChapterLoadData();
                    result.ListChapter         = lchapter;
                    result.MaxPageIndex        = maxPage;
                    result.IndexStartOfChapter = 0;
                    return(result);
                }
            }
            return(null);
        }