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"));
            }
        }
Beispiel #6
0
        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);
        }