public override async Task <Book> GetBook(string bookUrl) { string page = await DownloadHelper.DownloadStringAsync(bookUrl); //Get chapters var chaptersLinks = ParseHelper.ParseGroup("<a href=\"(?<Value>[^\"]+)\">(?<Name>[^<]+)</a> :", page, "Name", "Value"); var resolvedChapters = chaptersLinks.Reverse().GroupBy(x => x.Value).Select(g => g.First()).Reverse().ToArray(); Book book = new Book(); var chapters = new List <Chapter>(); for (int i = 0; i < resolvedChapters.Length; i++) { var c = resolvedChapters[i]; chapters.Add(new Chapter() { DisplayName = c.Name, Url = new Uri(new Uri(bookUrl), c.Value).AbsoluteUri, Book = book, ChapterNumber = i }); } book.Chapters = chapters.ToArray(); book.Url = bookUrl; //Get other book details var imgUrl = ParseHelper.Parse("<div id=\"mangaimg\"><img src=\"(?<Value>.+)\" alt=", page, "Value").First(); book.CoverImage = await DownloadHelper.DownloadImageAsync(imgUrl); book.Title = ParseHelper.Parse("<h2 class=\"aname\">(?<Value>.+)</h2>", page, "Value").First(); book.Description = ParseHelper.Parse("<div id=\"readmangasum\">\\s+<h2>.+</h2>\\s+<p>(?<Value>(?s).*?)</p>\\s+</div>", page, "Value").First(); book.Description = System.Web.HttpUtility.HtmlDecode(book.Description); return(book); }
public override async Task <Book> GetBook(string bookUrl) { string page = await DownloadHelper.DownloadStringAsync(bookUrl); var chaptersLinks = ParseHelper.ParseGroup("<li>\\s*<a href=\"(?<Value>http://[^\"]+)\">\\s*<span class=\"val\">(?<Name>.+)</span>", page, "Name", "Value").Reverse().ToArray(); Book book = new Book(); var chapters = new List <Chapter>(); for (int i = 0; i < chaptersLinks.Length; i++) { var c = chaptersLinks[i]; chapters.Add(new Chapter() { DisplayName = c.Name, Url = c.Value, Book = book, ChapterNumber = i }); } book.Chapters = chapters.ToArray(); book.Url = bookUrl; //Get other book details var imgUrl = ParseHelper.Parse("<div class=\"col-md-4\">\\s*<img src=\"(?<Value>.+)\" alt=", page, "Value").First(); book.CoverImage = await DownloadHelper.DownloadImageAsync(imgUrl); book.Title = ParseHelper.Parse("<h5 class=\"widget-heading\">(?<Value>.+)</h5>", page, "Value").First(); book.Description = ParseHelper.Parse("<div class=\"note note-default margin-top-15\">(?<Value>(.|\\s)*?)</div>", page, "Value").First().Trim(); book.Description = System.Web.HttpUtility.HtmlDecode(book.Description); book.Description = book.Description.Replace("<br/>", "\n"); return(book); }
public override async Task <Book> GetBook(string bookUrl) { string page = await DownloadHelper.DownloadStringAsync(bookUrl); var chaptersLinks = ParseHelper.ParseGroup("<a class=\"color_0077\" href=\"(?<Value>.*?)\".*>(?<Name>\\s*.*\\s*)</a>", page, "Name", "Value").Reverse().ToArray(); Book book = new Book(); var chapters = new List <Chapter>(); for (int i = 0; i < chaptersLinks.Length; i++) { var c = chaptersLinks[i]; chapters.Add(new Chapter() { DisplayName = c.Name, Url = "https:" + c.Value, Book = book, ChapterNumber = i }); } book.Chapters = chapters.ToArray(); book.Url = bookUrl; //Get other book details var imgUrl = ParseHelper.Parse("<div class=\"manga_detail_top clearfix\">\\s+<img src=\"(?<Value>.+)\" onerror=", page, "Value").First(); book.CoverImage = await DownloadHelper.DownloadImageAsync(imgUrl); book.Title = ParseHelper.Parse("<h2>(?<Value>.+) Manga</h2>\\s+Summary:", page, "Value").First(); book.Description = ParseHelper.Parse("<p id=\"show\" style=\"display:none;\">(?<Value>[^\"]+)<a href=\"javascript:void", page, "Value").First(); book.Description = System.Web.HttpUtility.HtmlDecode(book.Description); return(book); }
public override async Task <Book> GetBook(string bookUrl) { string page = await DownloadHelper.DownloadStringAsync(bookUrl); var chaptersLinks = ParseHelper.ParseGroup("<td>\\s+<a\\s+href=\"(?=/Manga/)(?<Url>.[^\"]*)\"\\s+title=\"(?<Name>.[^\"]*)\"", page, "Name", "Url"); var resolvedChapters = chaptersLinks.Select(c => NameResolver(c.Name, c.Value, bookUrl)).Reverse().ToArray(); Book book = new Book(); var chapters = new List <Chapter>(); for (int i = 0; i < resolvedChapters.Length; i++) { var c = resolvedChapters[i]; chapters.Add(new Chapter() { DisplayName = c.Name, Url = c.Url, Book = book, ChapterNumber = i }); } book.Chapters = chapters.ToArray(); book.Url = bookUrl; return(book); }
public async Task LoadKeys(string inputPage) { string page = await DownloadHelper.DownloadStringAsync(inputPage); /// Could be secured against changes by capturing the script's path as it exists in the live document instead of assuming the location. string pattern = "<script\\s+(type=[\"']text/javascript[\"'])?\\s+(src=[\"']/Scripts/{0}[\"'])>"; string concatedPattern = string.Concat(string.Format(pattern, "ca.js"), "|", string.Format(pattern, "lo.js")); if (Regex.IsMatch(page, concatedPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled)) { string funcUri = "http://kissmanga.com/Scripts/lo.js"; string decryptFunc = await DownloadHelper.DownloadStringAsync(funcUri); /// Execute CryptoJS from saved resources to reduce HTTP requests. engine.Execute(Properties.Resources.CryptoJs); /// Execute the decryption function to allow it to be called later. engine.Execute(decryptFunc); var keysPattern = "<script type=\"text/javascript\">[\\s]*(?<Value>.*)(?!</script>)"; var regex = new Regex(keysPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); var keys = string.Empty; foreach (Match match in regex.Matches(page)) { if (match.Value.Contains("CryptoJS")) { keys = match.Groups["Value"].Value; break; } } if (string.IsNullOrWhiteSpace(keys)) { throw new ArgumentException("Cannot decrypt image URIs."); } else { engine.Execute(keys); } decryptor = new KissMangaTextDecryptor((string)engine.Evaluate("iv.toString()"), (string)engine.Evaluate("chko")); } }
public override async Task <Book> GetBook(string bookUrl) { string page = await DownloadHelper.DownloadStringAsync(bookUrl); var chaptersLinks = ParseHelper.ParseGroup("<a href=\"(?<Value>.*?)\" .*? class=\"tips\">(?<Name>.*?)</a>", page, "Name", "Value").Reverse().ToArray(); Book book = new Book(); var chapters = new List <Chapter>(); for (int i = 0; i < chaptersLinks.Length; i++) { var c = chaptersLinks[i]; chapters.Add(new Chapter() { DisplayName = c.Name, Url = "https:" + c.Value, Book = book, ChapterNumber = i }); } book.Chapters = chapters.ToArray(); book.Url = bookUrl; //Get other book details var imgUrl = ParseHelper.Parse("<div class=\"cover\">\\s+<img .*? src=\"(?<Value>.*?)\"", page, "Value").First(); book.CoverImage = await DownloadHelper.DownloadImageAsync(imgUrl); book.Title = ParseHelper.Parse("<div id=\"title\">\\s+<h1 .*?>\\s*(?<Value>.*?)\\s*</h1>", page, "Value").First(); try { book.Description = ParseHelper.Parse("<p class=\"summary\">(?<Value>(.|\\s)*?)</p>", page, "Value").First(); book.Description = System.Web.HttpUtility.HtmlDecode(book.Description); book.Description = book.Description.Replace("<br />", "\n"); book.Genres = ParseHelper.Parse("<a href=\"//mangafox.me/search/genres/.*?/\">(?<Name>.*?)</a>", page, "Name").ToArray(); } catch (Exception e) { } return(book); }
public override async Task <Chapter> GetPageUrls(Chapter chapter) { string page = await DownloadHelper.DownloadStringAsync(chapter.Url); var pageLinks = ParseHelper.Parse("{\"id\":[0-9]+,\"url\":\"(?<Value>http:.+?)\"}", page, "Value"); var resolvedPages = pageLinks.Select(p => p.Replace("\\/", "/")).ToArray(); var pages = resolvedPages.Select((url, i) => { return(new Page() { Chapter = chapter, PageNumber = i, Url = url }); }).ToArray(); chapter.Pages = pages; return(chapter); }
public override async Task <Chapter> GetPageUrls(Chapter chapter) { string page = await DownloadHelper.DownloadStringAsync(chapter.Url); var pageLinks = ParseHelper.Parse("<option value=\"(?<Value>.*?)\".*>\\d+</option>", page, "Value"); var resolvedPages = pageLinks.Select(p => new Uri(new Uri(chapter.Url), p).AbsoluteUri).ToArray(); var pages = new Page[resolvedPages.Length]; await Task.WhenAll(resolvedPages.Select((url, i) => Task.Run(async() => { var imagePage = await DownloadHelper.DownloadStringAsync(url); pages[i] = new Page() { Chapter = chapter, PageNumber = i, Url = ParseHelper.Parse("<img src=\"(?<Value>.*?)\" onload=", imagePage, "Value").First() }; }))); chapter.Pages = pages; return(chapter); }
public override async Task <Chapter> GetPageUrls(Chapter chapter) { string page = await DownloadHelper.DownloadStringAsync(chapter.Url); var pageLinks = ParseHelper.Parse(@"<option value=""(?<Value>[^""]+)""(| selected=""selected"")>\d+</option>", page, "Value"); var resolvedPages = pageLinks.Select(p => new Uri(new Uri(chapter.Url), p).AbsoluteUri).ToArray(); var pages = new Page[resolvedPages.Length]; await Task.WhenAll(resolvedPages.Select((url, i) => Task.Run(async() => { var imagePage = await DownloadHelper.DownloadStringAsync(url); pages[i] = new Page() { Chapter = chapter, PageNumber = i, Url = ParseHelper.Parse(@"<img id=""img"" width=""\d+"" height=""\d+"" src=""(?<Value>[^""]+)""", imagePage, "Value").First() }; }))); chapter.Pages = pages; return(chapter); }
public override async Task <Chapter> GetPageUrls(Chapter chapter) { await CheckDecryptor(chapter.Url); string page = await DownloadHelper.DownloadStringAsync(chapter.Url); var encryptedPages = ParseHelper.Parse("lstImages.push\\(wrapKA\\(\"(?<Value>.[^\"]*)\"\\)\\)", page, "Value"); var pageLinks = encryptedPages.Select(e => decryptor.DecryptFromBase64(e)).ToArray(); var pages = new List <Page>(); for (int i = 0; i < pageLinks.Length; i++) { var pageLink = pageLinks[i]; pages.Add(new Page() { Chapter = chapter, PageNumber = i, Url = new Uri(new Uri(chapter.Url), pageLink).AbsoluteUri }); } chapter.Pages = pages.ToArray(); return(chapter); }