Example #1
0
        public async Task <IEnumerable <Chapter> > FindChapters(string manga, IProgress <int> progress, CancellationToken cancellationToken)
        {
            Logger.Info($@"> FindChapters(): {manga}");
            progress.Report(0);

            // find all chapters in a manga
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//meta[@property='og:title']").Attributes["content"];
            var chaps = selector.SelectMany(input, "//*[self::h3 or self::h4]/a[@class='tips']")
                        .Select(n => new Chapter(n.InnerHtml, n.Attributes["href"])
            {
                Manga = title
            });

            progress.Report(100);

            // Insert missing URI schemes in each chapter's URI.
            // Provisional solution, the current implementation may not be the best way to go about it.
            chaps = chaps.Select(chap =>
            {
                chap.Url = $"http:{chap.Url}";
                return(chap);
            });

            return(chaps);
        }
Example #2
0
        public async Task <IEnumerable <Chapter> > FindChapters(string manga, IProgress <int> progress, CancellationToken cancellationToken)
        {
            progress.Report(0);
            downloader.Cookies  = LoginBatoto(_username, _password);
            downloader.Referrer = "http://bato.to/reader";

            // find all chapters in a manga
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h1").InnerHtml.Trim();
            var langs = selector.SelectMany(input, "//tr[contains(@class,'chapter_row')]//div").Select(n => n.Attributes["title"]).ToList();
            var chaps = selector.SelectMany(input, "//tr[contains(@class,'chapter_row')]//a[@title]")
                        .Select(n =>
            {
                string originalName = n.Attributes["title"];
                originalName        = originalName.Remove(originalName.LastIndexOf('|')).Trim();
                return(new Chapter(originalName, n.Attributes["href"])
                {
                    Manga = title
                });
            }).ToList();

            for (int i = 0; i < langs.Count(); i++)
            {
                chaps[i].Language = langs[i];
            }
            chaps = chaps.GroupBy(c => c.Url).Select(g => g.First()).ToList();
            if (selectedLanguages.Count > 0)
            {
                chaps = chaps.Where(c => selectedLanguages.Contains(c.Language)).ToList();
            }
            progress.Report(100);
            return(chaps);
        }
Example #3
0
        public async Task <IEnumerable <Chapter> > FindChapters(string manga, IProgress <int> progress,
                                                                CancellationToken cancellationToken)
        {
            progress.Report(0);
            // find all chapters in a manga
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var chaps = selector
                        .SelectMany(input, "//ul[contains(@class, 'chapters-list')]/li/a")
                        .Select(n =>
            {
                string url = n.Attributes["href"];
                return(new Chapter(null, url)
                {
                    Manga = "One Punch Man"
                });
            }).ToList();

            var chap_numbers = selector
                               .SelectMany(input, "//ul[contains(@class, 'chapters-list')]/li/a/span[contains(@class, 'chapter__no')]")
                               .Select(n => n.InnerHtml)
                               .ToList();

            chaps.ForEach(c => c.Name = "One Punch Man " + chap_numbers[chaps.IndexOf(c)]);

            progress.Report(100);
            return(chaps);
        }
Example #4
0
        public async Task <IEnumerable <Chapter> > FindChapters(string manga, IProgress <int> progress, CancellationToken cancellationToken)
        {
            progress.Report(0);
            // find all chapters in a manga
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h2[@class='aname']").InnerHtml;
            var chaps = selector
                        .SelectMany(input, "//table[@id='listing']//a")
                        .Select(n =>
            {
                string url    = n.Attributes["href"];
                var resultUrl = new Uri(new Uri(manga), url).AbsoluteUri;
                return(new Chapter(n.InnerHtml, resultUrl)
                {
                    Manga = title
                });
            });

            // reverse chapters order and remove duplicated chapters in latest section
            chaps = chaps.Reverse().GroupBy(x => x.Url).Select(g => g.First()).ToList();
            // transform pages link
            progress.Report(100);
            return(chaps);
        }
Example #5
0
        private async Task <IEnumerable <string> > FindPagesInChapter(string chapterUrl, CancellationToken cancellationToken)
        {
            var input = await downloader.GetStringAsync(chapterUrl, cancellationToken);

            // <div...id="thumbnail-container"><div class="thumb-container"><a...href="/g/93922/1/">
            var links = selector.SelectMany(input, "//div[@id='thumbnail-container']//div[contains(@class, 'thumb-container')]//a")
                        .Select(n => SiteUrl + n.Attributes["href"]);

            return(links.ToArray());
        }
Example #6
0
        private async Task <IEnumerable <Chapter> > DownloadAndParseChapters(string manga, CancellationToken cancellationToken)
        {
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//meta[@property='og:title']").Attributes["content"];
            var chaps = selector.SelectMany(input, "//*[self::h3 or self::h4]/a[@class='tips']")
                        .Select(n => new Chapter(n.InnerHtml, n.Attributes["href"])
            {
                Manga = title
            });

            return(chaps);
        }
Example #7
0
        private async Task <IEnumerable <Chapter> > DownloadAndParseChapters(string manga, CancellationToken cancellationToken)
        {
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//meta[@property='og:title']").Attributes["content"];
            var chaps = selector.SelectMany(input, "//div[contains(@class,'detail_list')]/ul//a")
                        .Select(n =>
            {
                return(new Chapter(n.InnerHtml.Trim(), $"http:{n.Attributes["href"]}")
                {
                    Manga = title
                });
            });

            return(chaps);
        }
Example #8
0
        public async Task <IEnumerable <Chapter> > GetChapters(string manga, IProgress <string> progress,
                                                               CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h1").InnerText;
            var chaps = selector
                        .SelectMany(input, "//td/a")
                        .Select(n =>
            {
                string url = $"https://readms.net{n.Attributes["href"]}";
                return(new Chapter($"{title} {n.InnerText}", url));
            });

            return(chaps);
        }
Example #9
0
        public async Task <IEnumerable <Chapter> > GetChapters(string manga, IProgress <string> progress, CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h2[@class='aname']").InnerText;
            var chaps = selector
                        .SelectMany(input, "//table[@id='listing']//a")
                        .Select(n =>
            {
                string url    = n.Attributes["href"];
                var resultUrl = new Uri(new Uri(manga), url).AbsoluteUri;
                return(new Chapter(n.InnerText, resultUrl));
            });

            chaps = chaps.Reverse().GroupBy(x => x.Url).Select(g => g.First()).ToList();
            return(chaps);
        }
Example #10
0
        private async Task <IEnumerable <Chapter> > GetChaptersImpl(string manga, CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//span[@class='detail-info-right-title-font']").InnerText;
            var hrefs = selector.SelectMany(input, "//ul[@class='detail-main-list']/li/a").Select(a => a.Attributes["href"]).ToList();
            var texts = selector.SelectMany(input, "//ul[@class='detail-main-list']/li/a/div/p[@class='title3']").Select(p => p.InnerText).ToList();

            var chaps = new List <Chapter>();

            for (int i = 0; i < hrefs.Count(); i++)
            {
                var chap = new Chapter($"{title} {texts[i]}", hrefs[i]);
                chaps.Add(chap);
            }

            return(chaps);
        }
Example #11
0
        public async Task <IEnumerable <Chapter> > GetChapters(string manga, IProgress <string> progress,
                                                               CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var chaps = selector
                        .SelectMany(input, "//ul[contains(@class, 'chapters-list')]/li/a")
                        .Select(n =>
            {
                string url = n.Attributes["href"];
                return(new Chapter(null, url));
            }).ToList();

            var chap_numbers = selector
                               .SelectMany(input, "//ul[contains(@class, 'chapters-list')]/li/a/span[contains(@class, 'chapter__no')]")
                               .Select(n => n.InnerText)
                               .ToList();

            chaps.ForEach(c => c.Name = "One Punch Man " + chap_numbers[chaps.IndexOf(c)]);
            return(chaps);
        }
Example #12
0
        public async Task <IEnumerable <Chapter> > FindChapters(string manga, IProgress <int> progress,
                                                                CancellationToken cancellationToken)
        {
            progress.Report(0);
            // find all chapters in a manga
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h1").InnerHtml;
            var chaps = selector
                        .SelectMany(input, "//td/a")
                        .Select(n =>
            {
                string url = $"https://readms.net{n.Attributes["href"]}";
                return(new Chapter(n.InnerHtml, url)
                {
                    Manga = title
                });
            });

            progress.Report(100);
            return(chaps);
        }
Example #13
0
 public IEnumerable <MyHtmlNode> SelectMany(string html, string xpath)
 {
     try
     {
         return(decoratee.SelectMany(html, xpath));
     }
     catch
     {
         logger.Info($"Xpath: {xpath}");
         logger.Fatal(html);
         throw;
     }
 }
Example #14
0
        public async Task <IEnumerable <Chapter> > FindChapters(string manga, IProgress <int> progress, CancellationToken cancellationToken)
        {
            progress.Report(0);
            // find all chapters in a manga
            string input = await downloader.DownloadStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//a[@class='bigChar']").InnerHtml;
            var chaps = selector.SelectMany(input, "//tr/td/a[@title]")
                        .Select(n =>
            {
                string name = n.InnerHtml.Trim();
                string url  = n.Attributes["href"];
                var chap    = NameResolver(name, url, new Uri(manga));
                chap.Manga  = title;
                return(chap);
            });

            progress.Report(100);
            return(chaps);
        }