public override async Task <byte[]> GetPageImageAsync(IPage input, CancellationToken token)
        {
            var html = await WebClient.GetStringAsync(input.PageUri, input.GetParentChapter().FirstPageUri, token);

            if (html == null)
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(html);

            var node     = document.QuerySelector("img#image");
            var imageUri = new Uri(node.Attributes["src"].Value);

            ((Page)input).ImageUri = new Uri(RootUri, imageUri);
            var output = await WebClient.GetByteArrayAsync(input.ImageUri, input.PageUri, token);

            if (token.IsCancellationRequested)
            {
                return(null);
            }

            return(output);
        }
        public override async Task <IReadOnlyList <IChapter> > GetChaptersAsync(ISeries input, CancellationToken token)
        {
            var html = await WebClient.GetStringAsync(input.SeriesPageUri, RepoIndexUri, token);

            if (html == null)
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(html);

            var node = document.QuerySelector("div.manga_detail");

            node = node.QuerySelector("div.detail_list ul");
            var nodes = node.QuerySelectorAll("a.color_0077");

            var Output = nodes.Select(d =>
            {
                string Title = d.TextContent;
                Title        = Regex.Replace(Title, @"^[\r\n\s\t]+", string.Empty);
                Title        = Regex.Replace(Title, @"[\r\n\s\t]+$", string.Empty);
                var Chapter  = new Chapter((Series)input, new Uri(RootUri, d.Attributes["href"].Value), Title);
                return(Chapter);
            }).Reverse().ToArray();

            return(Output.ToArray());
        }
Exemplo n.º 3
0
        public override async Task <byte[]> GetPageTextAsync(IPage input, CancellationToken token)
        {
            var html = await WebClient.GetStringAsync(input.PageUri, input.GetParentChapter().FirstPageUri, token);

            if (html == null)
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(html);

            string description = string.Empty;
            var    chapterDiv  = document.QuerySelector("div.chapter-content3");

            description = chapterDiv.QuerySelector("h1")?.Text();
            var paras   = chapterDiv.QuerySelectorAll("p");
            var content = new StringBuilder();

            foreach (var para in paras)
            {
                var text = para.Text();
                if (!text.StartsWith("Posted on"))
                {
                    content.AppendLine(text);
                }
            }
            // update pageContent
            input.PageContent = content.ToString();
            return(Encoding.UTF8.GetBytes(content.ToString()));
        }
Exemplo n.º 4
0
        public override async Task <IReadOnlyList <IChapter> > GetChaptersAsync(ISeries input, CancellationToken token)
        {
            var html = await WebClient.GetStringAsync(input.SeriesPageUri, RepoIndexUri, token);

            if (html == null)
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(html);

            //update series
            var    items       = document.QuerySelectorAll("div.novel-detail-item");
            string description = string.Empty;

            string[] titlesAlternative = null;
            string[] genres            = null;
            foreach (var item in items)
            {
                var header = item.QuerySelector("h6")?.Text();
                if (header == "Description")
                {
                    description = item.QuerySelector("div.novel-detail-body")?.Text();
                }
                else if (header == "Alternative Names")
                {
                    titlesAlternative = item.QuerySelectorAll("li")?.Select(d => d.Text())?.ToArray();
                }
                else if (header == "Genre")
                {
                    genres = item.QuerySelectorAll("li")?.Select(d => d.Text())?.ToArray();
                }
            }

            input.Description       = description;
            input.Genres            = genres;
            input.TitlesAlternative = titlesAlternative;

            //get cover
            var coverItem = document.QuerySelector("div.novel-cover>a>img");

            if (!string.IsNullOrWhiteSpace(coverItem.Attributes["src"].Value))
            {
                input.CoverImageUri = new Uri(coverItem.Attributes["src"].Value);
            }

            //get chapters
            var nodes = document.QuerySelectorAll("ul.chapter-chs>li>a");

            var output = nodes.Select(d => new Chapter((Series)input, new Uri(RootUri, d.Attributes["href"].Value), WebUtility.HtmlDecode(d.Text()))).OrderBy(d => d.Title);

            return(output.ToArray());
        }
Exemplo n.º 5
0
        public override async Task <IReadOnlyList <ISeries> > GetSeriesAsync(CancellationToken token)
        {
            var html = await WebClient.GetStringAsync(RepoIndexUri, RootUri, token);

            if (html == null)
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(html);
            var nodes    = document.QuerySelectorAll("div.list-by-word-body>ul>li>a");

            var output = nodes.Select(d => new Series(this, new Uri(RootUri, d.Attributes["href"].Value), WebUtility.HtmlDecode(d.Text()))).OrderBy(d => d.Title);

            return(output.ToArray());
        }
        public override async Task <IReadOnlyList <IPage> > GetPagesAsync(IChapter input, CancellationToken token)
        {
            var html = await WebClient.GetStringAsync(input.FirstPageUri, input.GetParentSeries().SeriesPageUri, token);

            if (html == null)
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(html);

            var node = document.QuerySelector("section.readpage_top");

            node = node.QuerySelector("span.right select");
            var nodes = node.QuerySelectorAll("option");

            var Output = nodes.Select((d, e) =>
                                      new Page((Chapter)input, new Uri(RootUri, d.Attributes["value"].Value), e + 1));

            return(Output.ToArray());
        }
 public MangaHereRepository(WebClient webClient) : base(webClient, "Manga Here", "http://www.mangahere.co/",
                                                        "MangaHere.png", false, repositoryType: RepositoryType.Manga)
 {
 }
Exemplo n.º 8
0
 public ReadLightNovelRepository(WebClient webClient) : base(webClient, "Read Light Novel", "http://www.readlightnovel.org/", "ReadLightNovel.png"
                                                             , false, repositoryType: RepositoryType.LightNovel)
 {
 }