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()); }
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())); }
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()); }
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) { }
public ReadLightNovelRepository(WebClient webClient) : base(webClient, "Read Light Novel", "http://www.readlightnovel.org/", "ReadLightNovel.png" , false, repositoryType: RepositoryType.LightNovel) { }