public override List<StoryInfo> GetLastestUpdates() { string lastestUpdateUrl = "http://eatmanga.com/latest/"; List<StoryInfo> stories = new List<StoryInfo>(); var html = NetworkHelper.GetHtml(lastestUpdateUrl); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nodes = htmlDoc.DocumentNode.SelectNodes("//th[@class=\"title\"]/a"); foreach (HtmlNode node in nodes) { string chapterUrl = HostUrl + node.Attributes["href"].Value.Substring(0, node.Attributes["href"].Value.LastIndexOf("/")); string pageUrl = chapterUrl.Substring(0, chapterUrl.LastIndexOf("/")); StoryInfo info; if (stories.Any(p => p.Url == pageUrl)) { info = stories.Where(p => p.Url == pageUrl).Single(); } else { info = new StoryInfo() { Url = pageUrl, Name = pageUrl.Substring(pageUrl.LastIndexOf("/") + 1).Replace("-"," "), Chapters = new List<ChapterInfo>() }; stories.Add(info); } var chapter = new ChapterInfo() { Url = chapterUrl, Name = node.InnerText.Trim() }; info.Chapters.Add(chapter); } return stories; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"mangaproperties\"]/h1"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Trim(), }; //var match = Regex.Match(html,"<table id=\"listing\""); //var index = match.Captures[0].Index; //var table = html.Substring(index, html.IndexOf("</table>", index)-index+9); //htmlDoc.LoadHtml(table); var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"listing\"]//td//a"); if (chapterNodes != null) { foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText.Trim(), Url = HostUrl + chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText) }; info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); } return info; }
public override StoryInfo RequestInfo(string url) { StoryInfo info = new StoryInfo(); // LockControl(false); //string url = string.Format(StoryUrlPattern, urlSegment); var html = NetworkHelper.GetHtml(url); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(html); var node = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"fontsize-chitiet\"]/span[1]"); info.Name = node.InnerText; var node2 = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"fontsize-chitiet\"]/span[2]"); info.AltName = node2.InnerText; var node3 = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"fontsize-chitiet\"]/span[2]"); info.Categories = node3.InnerText; info.Url = url; var ccontentmain = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"content-main\"]"); htmlDoc.LoadHtml(ccontentmain.InnerHtml); var chapterLinks = htmlDoc.DocumentNode.SelectNodes("//a[@href!='']"); info.ChapterCount = chapterLinks.Count; foreach (HtmlNode item in chapterLinks) { ChapterInfo chapter = new ChapterInfo() { Url = string.Format("{0}{1}doc-truyen/", HostUrl, item.Attributes["href"].Value), Name = item.InnerText , ChapId = ExtractID(item.InnerText) }; info.Chapters.Add(chapter); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); //detect hentai HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@class=\"tuade\"]/a"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Trim(), }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"listing\"]//td[1]/h6/a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText.Trim(), Url = chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText) }; chap.Url = chap.Url.Substring(chap.Url.IndexOf("/http")+1); info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { StoryInfo info = new StoryInfo { Url = storyUrl, }; var html = NetworkHelper.GetHtml(storyUrl); var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(html); var node = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"post\"]/div[1]/h1/a"); info.Name = node.InnerText.Replace(" ", string.Empty); //var chapters = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"post\"]//a[contains(@href,'x2.blogtruyen.com')]"); var chapters = htmlDoc.DocumentNode .Descendants("a") .Where(x => x.Attributes.Contains("href") && ( x.Attributes["href"].Value.Contains("x1.blogtruyen.com") || x.Attributes["href"].Value.Contains("x2.blogtruyen.com") || x.Attributes["href"].Value.Contains("x3.blogtruyen.com"))) .ToList(); foreach (HtmlNode item in chapters) { var chapInfo = new ChapterInfo() { Url = item.Attributes["href"].Value, Name = item.FirstChild.InnerText, ChapId = ExtractID(item.FirstChild.InnerText) }; info.Chapters.Add(chapInfo); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
private Downloader GetDownloader(ChapterInfo chapInfo) { var downloaders = Downloader.GetAllDownloaders(); string pattern = @"https?://(?<DOMAIN>.*.com|me|net|info)"; foreach (var item in downloaders) { var m = Regex.Match(item.HostUrl, pattern); string domain = m.Groups["DOMAIN"].Value; var arr = domain.Split(".".ToCharArray()); var root = arr[arr.Length - 2] + "." + arr[arr.Length - 1]; if(m!=null) { if (chapInfo.Url.Contains(root)) return item; } } throw new Exception("No Downloader found for this chapter with url "+ chapInfo.Url); }
private void CreateChapterFolder(ChapterInfo chapInfo) { try { if (Directory.Exists(chapInfo.Folder)) { Directory.Delete(chapInfo.Folder, true); } Directory.CreateDirectory(chapInfo.Folder); } finally { } }
public override StoryInfo RequestInfo(string url) { StoryInfo story = new StoryInfo() { Url = url }; var html = NetworkHelper.GetHtml(url); var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(html); var nodeHtml = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"vcfix\"]"); var match = Regex.Match(nodeHtml.InnerHtml, "<strong>(.*?)</strong>"); if (match != null) { story.Name = match.Groups[1].Value; } htmlDoc.LoadHtml(nodeHtml.InnerHtml); var nodes = htmlDoc.DocumentNode.SelectNodes("//p/a"); if (nodes != null) foreach (HtmlNode node in nodes) { ChapterInfo chap = new ChapterInfo() { Url = node.Attributes["href"].Value, Name = node.InnerText, ChapId = ExtractID(node.InnerText) }; story.Chapters.Add(chap); } story.Chapters = story.Chapters.OrderBy(p => p.ChapId).ToList(); return story; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var table = htmlDoc.DocumentNode.SelectNodes("//td[@class=\"page\"]/table[@class=\"tborder\"]")[1]; htmlDoc.LoadHtml(table.OuterHtml); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//b"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Substring(0,nameNode.InnerText.IndexOf("-")) }; var chapNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(@href,'view_book_detail')]"); foreach (HtmlNode node in chapNodes) { ChapterInfo chapInfo = new ChapterInfo() { //Name = node.InnerText.Trim(), Url = HostUrl+ node.Attributes["href"].Value.Trim(), //ChapId = ExtractID(node.InnerText.Trim()) }; var t = node.ParentNode.ParentNode.ParentNode.NextSibling.NextSibling.NextSibling.NextSibling; chapInfo.Name = t.InnerText.Trim(); chapInfo.ChapId = ExtractID(t.InnerText.Trim(), @"tap([\d]*)"); info.Chapters.Add(chapInfo); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
private void DownloadChapter(ChapterInfo chapInfo) { if (chapInfo.Pages == null) return; CreateChapterFolder(chapInfo); int count = 0; long size = 0; ManualResetEvent resetEvent = new ManualResetEvent(false); int toProcess = chapInfo.Pages.Count; SmartThreadPool smartThreadPool = new SmartThreadPool() { MaxThreads = 8 }; int index = 1; List<IWorkItemResult> wi = new List<IWorkItemResult>(); foreach (string pageUrl in chapInfo.Pages) { IWorkItemResult wir1 = smartThreadPool.QueueWorkItem(new WorkItemCallback(delegate(object state) { DownloadPageParam param = (DownloadPageParam)state; try { string filename = Downloader.DownloadPage(param.PageUrl, Settings.RenamePattern.Replace("{{PAGENUM}}", param.Index.ToString("D2")), chapInfo.Folder, chapInfo.Url); var file = File.Open(filename, FileMode.Open); lock (updateUIObj) { size += file.Length; total += file.Length; file.Close(); count++; this.Invoke((MethodInvoker)delegate { this.progess.Value = count; lblPageCount.Text = string.Format("{0:D2}/{1:D2}", count, chapInfo.PageCount); var listItem = listHistory.Items[listHistory.Items.Count - 1]; listItem.SubItems[3].Text = size.ToKB(); lblTotalDownloadCount.Text = total.ToKB(); var subItem = listItem.SubItems[4] as EXControlListViewSubItem; var pp = subItem.MyControl as ProgressBar; pp.Value = count; }); } } catch (Exception ex) { MyLogger.Log(ex); } finally { if (Interlocked.Decrement(ref toProcess) == 0) resetEvent.Set(); } return 1; }), new DownloadPageParam() { Index = index++, PageUrl = pageUrl}); wi.Add(wir1); } SmartThreadPool.WaitAll(wi.ToArray()); }
private void DisplayChap(ChapterInfo chapInfo, int chapCount) { this.Invoke((MethodInvoker)delegate { this.progess.Minimum = 1; this.progess.Value = 1; this.progess.Maximum = chapInfo.PageCount; var listItem = new EXListViewItem(chapCount.ToString()); listItem.SubItems.Add(chapInfo.Name.Replace('"',' ').Replace('.',' ')); listItem.SubItems.Add(chapInfo.PageCount.ToString()); listItem.SubItems.Add("0"); EXControlListViewSubItem cs = new EXControlListViewSubItem(); ProgressBar b = new ProgressBar(); //b.Tag = item; b.Minimum = 0; b.Maximum = chapInfo.PageCount; b.Step = 1; listItem.SubItems.Add(cs); this.listHistory.AddControlToSubItem(b, cs); //Add button to view folder EXControlListViewSubItem openFolderCol = new EXControlListViewSubItem(); Button bntOpenFolder = new Button() { Image = global::ComicDownloader.Properties.Resources._1364392872_slideshow, //Location = new System.Drawing.Point(248, 123); //Name = "button2"; Size = new System.Drawing.Size(24, 24), TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay, UseVisualStyleBackColor = true, Tag = openFolderCol, //Text = chapInfo.PdfPath, Enabled = true, }; bntOpenFolder.Click += new EventHandler(delegate { MainWindow window = new MainWindow(new string[] { chapInfo.Folder+"/dum.trick","0"}); window.WindowState = FormWindowState.Maximized; window.ShowDialog(); //window.SubStartSlideShow(); }); // llbl.LinkClicked += new LinkLabelLinkClickedEventHandler(llbl_LinkClicked); listItem.SubItems.Add(openFolderCol); listHistory.AddControlToSubItem(bntOpenFolder, openFolderCol); //listItem.SubItems.Add(chapInfo.Folder); EXControlListViewSubItem pdfLinkCol = new EXControlListViewSubItem(); Button bntOpenPDF = new Button() { Image = global::ComicDownloader.Properties.Resources._1364326694_stock_save_pdf_24, //Location = new System.Drawing.Point(248, 123); //Name = "button2"; Size = new System.Drawing.Size(24, 24), TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay, UseVisualStyleBackColor = true, Tag = pdfLinkCol, //Text = chapInfo.PdfPath, Enabled = false, }; bntOpenPDF.Click += new EventHandler(bntOpenPDF_Click); listItem.SubItems.Add(pdfLinkCol); listHistory.AddControlToSubItem(bntOpenPDF, pdfLinkCol); listItem.SubItems.Add(chapInfo.PdfPath); this.listHistory.Items.Add(listItem); lblPageCount.Text = string.Format("{0:D2}/{1:D2}", "0", chapInfo.PageCount); }); }
private void GeneratePDF(ChapterInfo chapInfo) { if (!Settings.CreatePDF) { return; } try { PDFHelper.CreatePDF(chapInfo.Folder, chapInfo.PdfPath, chapInfo.Name, Settings); this.Invoke((MethodInvoker)delegate { var listItem = listHistory.Items[listHistory.Items.Count - 1]; var subItem = listItem.SubItems[6] as EXControlListViewSubItem; var pp = subItem.MyControl as Button; pp.Enabled = true; pp.Tag = chapInfo.PdfPath; }); } catch (Exception ex) { MyLogger.Log(ex); } finally { } }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//a[@class=\"bigChar\"]"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText }; var chapNodes = htmlDoc.DocumentNode.SelectNodes("//table[@class=\"listing\"]//td[1]/a"); foreach (HtmlNode node in chapNodes) { ChapterInfo chapInfo = new ChapterInfo() { Name = node.InnerText.Trim(), Url = HostUrl+node.Attributes["href"].Value.Trim(), ChapId = ExtractID(node.InnerText.Trim()) }; info.Chapters.Add(chapInfo); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//section[@class=\"manga\"]//h1"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Trim().Replace("Manga",""), }; var chapters = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"list\"]//li/span/a"); var links = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"list\"]//em/a[last()]"); for (int i = 0; i < chapters.Count; i++) { ChapterInfo chap = new ChapterInfo() { Name = chapters[i].ChildNodes[0].InnerText + chapters[i].ChildNodes[1].InnerText, Url = HostUrl + links[i].Attributes["href"].Value.Trim() //ChapId = ExtractID(chapter.InnerText) }; chap.ChapId = ExtractID(chap.Name, "Ch.(\\d*)"); info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override List<StoryInfo> GetLastestUpdates() { string lastestUpdateUrl = HostUrl; List<StoryInfo> stories = new List<StoryInfo>(); var html = NetworkHelper.GetHtml(lastestUpdateUrl); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var chapters = htmlDoc.DocumentNode.SelectNodes("//ul[@id=\"news\"]/li/a[contains(@href,\"en-manga\")]"); if (chapters != null) { foreach (HtmlNode chap in chapters) { var item = new ChapterInfo() { Name = chap.InnerText.Trim(), Url = HostUrl + chap.Attributes["href"].Value }; var page = chap.ParentNode.SelectSingleNode("div[position()=1]/a[position()=1]"); var pageUrl = page.Attributes["href"].Value; if (pageUrl.Contains("it-manga")) { pageUrl = pageUrl.Replace("it-manga", "en-manga"); } if (stories.Any(p => p.Url == page.Attributes["href"].Value)) { stories.Where(p => p.Url == page.Attributes["href"].Value).Single().Chapters.Add(item); } else { StoryInfo info = new StoryInfo() { Url = HostUrl + pageUrl, Name = page.InnerText.Trim(), Chapters = new List<ChapterInfo>() { item } }; stories.Add(info); } } } return stories; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"box2\"]/h2"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.FirstChild.InnerText.Trim(), }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"files\"]//table[1]//a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText.Trim(), Url = HostUrl.Substring(0,HostUrl.Length-1) + chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText) }; info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
private void RefreshData(ChapterInfo chap) { var dsItem = DataSource.FirstOrDefault(p => p.Identify == chap.UniqueIdentify); if (dsItem != null) { //Progress = (new Random()).Next(1,100), dsItem.ChapterUrl = chap.Url; dsItem.Pages = chap.PageCount; dsItem.Size = chap.Size.ToKB(); dsItem.Status = ((float)chap.DownloadedCount / chap.PageCount).ToString("p"); if (chap.Status != DownloadStatus.Downloading) { dsItem.Status = chap.Status.ToString(); } else { dsItem.Status = ((float)chap.DownloadedCount / chap.PageCount).ToString("p"); if (dsItem.Status == "NaN") dsItem.Status = "Initializing..."; } lsvItems.RefreshObject(dsItem); } }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); //detect hentai HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var testNode = htmlDoc.DocumentNode.SelectSingleNode("//a[@class=\"xacnhan\"]"); if (testNode!= null) { var url = testNode.Attributes["href"].Value; url = System.Web.HttpUtility.UrlDecode(url); storyUrl = url.Substring(url.IndexOf("/http://") + 1); html = NetworkHelper.GetHtml(storyUrl); htmlDoc.LoadHtml(html); } var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@class=\"barContent\"]//a"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"listing\"]//td[1]/a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText, Url = chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText) }; info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
private void GeneratePDF(ChapterInfo chapInfo) { if (!Settings.CreatePDF) { return; } try{ PDFHelper.CreatePDF(chapInfo.Folder, chapInfo.PdfPath, chapInfo.Name, Settings); } catch (Exception ex) { MyLogger.Log(ex); } finally { } }
public override List<StoryInfo> GetLastestUpdates() { string lastestUpdateUrl = HostUrl; List<StoryInfo> stories = new List<StoryInfo>(); var html = NetworkHelper.GetHtml(lastestUpdateUrl); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nodes = htmlDoc.DocumentNode.SelectNodes("//fieldset[@class=\"most most_latest\"]/table//tr/td/a"); foreach (HtmlNode node in nodes) { string chapterUrl = HostUrl + node.Attributes["href"].Value; string pageUrl = HostUrl + "/serie-archive/mangas-" + node.Attributes["href"].Value.Substring(1, node.Attributes["href"].Value.LastIndexOf("/")); var chapterTitle = node.ChildNodes[2].InnerText.Trim(); StoryInfo info; if (stories.Any(p => p.Url == pageUrl)) { info = stories.Where(p => p.Url == pageUrl).Single(); } else { var pageTitle = chapterTitle.Substring(0, chapterTitle.LastIndexOf(' ')); info = new StoryInfo() { Url = pageUrl, Name = pageTitle, Chapters = new List<ChapterInfo>() }; stories.Add(info); } var chapter = new ChapterInfo() { Url = chapterUrl, Name = chapterTitle }; info.Chapters.Add(chapter); } return stories; }
private void DownloadChapter(ChapterInfo chapInfo, Downloader downloader) { if (chapInfo.Pages == null) return; SmartThreadPool smartThreadPool = new SmartThreadPool() { MaxThreads = Settings.UseMultiThreadToDownloadChapter?Settings.Threads:1 }; List<IWorkItemResult> workerItems = new List<IWorkItemResult>(); CreateChapterFolder(chapInfo); this.Invoke(new MethodInvoker(delegate() { lblStatus.Text = "Downloading : " + chapInfo.Name + "[" + chapInfo.Url + "]"; })); int count = 0; long size = 0; int toProcess = chapInfo.Pages.Count; int index = 1; foreach (string pageUrl in chapInfo.Pages) { IWorkItemResult wir1 = smartThreadPool.QueueWorkItem(new WorkItemCallback(delegate(object state) { try { string filename = downloader.DownloadPage(state.ToString(), Settings.RenamePattern.Replace("{{PAGENUM}}", (index++).ToString("D2")), chapInfo.Folder, chapInfo.Url); var file = File.Open(filename, FileMode.Open); lock (updateUIObj) { size += file.Length; //total += file.Length; file.Close(); count++; chapInfo.Size = size; chapInfo.DownloadedCount = count; RefreshData(chapInfo); } } catch{ } finally { RefreshData(chapInfo); } return 0; }), pageUrl); workerItems.Add(wir1); } bool success = SmartThreadPool.WaitAll(workerItems.ToArray()); smartThreadPool.Shutdown(); }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"title\"]//h1"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Replace("Manga",""), }; var volumns = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"slide\"]"); foreach (HtmlNode item in volumns) { string vol = item.SelectSingleNode("h3").InnerText; vol = Regex.Replace(vol, "(Volume \\d*).*", "$1"); var chapterNodes = item.NextSibling.SelectNodes("li//a[@class=\"tips\"]"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name =vol+" - "+ chapter.InnerText, Url = chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText) }; info.Chapters.Add(chap); } } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); //detect hentai HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"sct_content\"]//h1"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText }; List<string> urls = new List<string>(); var pagingNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@class=\"pgg\"]"); if (pagingNode == null) urls.Add(storyUrl); else { var paging = pagingNode.Descendants("a"); foreach (HtmlNode pNode in paging) { if (!urls.Contains(pNode.Attributes["href"].Value.Trim())) urls.Add(pNode.Attributes["href"].Value.Trim()); } } foreach (var pageUrl in urls) { html = NetworkHelper.GetHtml(pageUrl); htmlDoc.LoadHtml(html); var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//ul[@class=\"lst\"][1]//a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.ChildNodes[1].InnerText.Trim(), Url = chapter.Attributes["href"].Value, }; var p = @"&(\d*); (.*)"; chap.Name = Regex.Replace(chap.Name, @"&#(\d*);(.*)", "$2"); chap.ChapId = ExtractID(chap.Name); info.Chapters.Add(chap); } } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override List<StoryInfo> GetLastestUpdates() { string lastestUpdateUrl = HostUrl; List<StoryInfo> stories = new List<StoryInfo>(); var html = NetworkHelper.GetHtml(lastestUpdateUrl); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nodes = htmlDoc.DocumentNode.SelectNodes("//div[@id=\"inner_page\"]/div[position()>2]//a"); foreach (HtmlNode node in nodes) { string chapterUrl = HostUrl + node.Attributes["href"].Value; string pageUrl; if (chapterUrl.Contains("chapter")) { pageUrl = chapterUrl.Substring(0, chapterUrl.LastIndexOf("/")); pageUrl = pageUrl.Substring(0, pageUrl.LastIndexOf("/")); } else { pageUrl = chapterUrl; } StoryInfo info; if (stories.Any(p => p.Url == pageUrl)) { info = stories.Where(p => p.Url == pageUrl).Single(); } else { info = new StoryInfo() { Url = pageUrl, Name = node.ChildNodes[0].InnerText.Trim(), Chapters = new List<ChapterInfo>() }; stories.Add(info); } var chapter = new ChapterInfo() { Url = chapterUrl, Name = node.ChildNodes[0].InnerText.Trim() + ' ' + node.ChildNodes[1].InnerText.Trim() + ' ' + node.ChildNodes[2].NextSibling.InnerText.Trim() }; info.Chapters.Add(chapter); } return stories; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@class=\"cmtList\"]//h1"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Trim().Replace("Manga",""), }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"chapter_list\"]//td[1]/a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText.Trim(), Url = HostUrl+ chapter.Attributes["href"].Value, //ChapId = ExtractID(chapter.InnerText) }; chap.ChapId = ExtractID(chap.Name); info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"bc\"]//a[last()]"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText.Trim(), }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"download-link\"]"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText ,//+ " " + chapter.ChildNodes[0].InnerText + " " + chapter.ChildNodes[1].InnerText, Url = HostUrl + chapter.Attributes["href"].Value, }; chap.ChapId = ExtractID(chap.Name); info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string url) { var html = NetworkHelper.GetHtml(url); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"mangainfo\"]//h3"); StoryInfo info = new StoryInfo() { Url = url, Name = nameNode.InnerText.Trim() }; var chapterLinks = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"manga_chapters\"]//span[1]/a"); info.ChapterCount = chapterLinks.Count; foreach (HtmlNode item in chapterLinks) { ChapterInfo chapter = new ChapterInfo() { Url = item.Attributes["href"].Value, Name = item.InnerText , ChapId = ExtractID(item.InnerText, @"Chapter (\d*)") }; info.Chapters.Add(chapter); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//h1[@itemprop=\"name\"]"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText }; var chapNodes = htmlDoc.DocumentNode.SelectNodes("//*[@itemprop=\"itemListElement\"]"); foreach (HtmlNode node in chapNodes) { ChapterInfo chapInfo = new ChapterInfo() { Name = node.Descendants("strong").FirstOrDefault().InnerText, Url = node.Descendants("a").FirstOrDefault().Attributes["href"].Value.Trim(), ChapId = ExtractID(node.Descendants("strong").FirstOrDefault().InnerText) }; info.Chapters.Add(chapInfo); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id=\"main\"]//h1"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.ChildNodes[1].InnerText.Trim(), }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"detail_list\"]//li//a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText.Trim(), Url = chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText.Trim()) }; info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }
public override StoryInfo RequestInfo(string storyUrl) { var html = NetworkHelper.GetHtml(storyUrl); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var nameNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@class=\"bgTitle\"]//b"); StoryInfo info = new StoryInfo() { Url = storyUrl, Name = nameNode.InnerText }; var chapterNodes = htmlDoc.DocumentNode.SelectNodes("//*[@class=\"cellChapter\"]//a"); foreach (HtmlNode chapter in chapterNodes) { ChapterInfo chap = new ChapterInfo() { Name = chapter.InnerText, Url = HostUrl + chapter.Attributes["href"].Value, ChapId = ExtractID(chapter.InnerText) }; info.Chapters.Add(chap); } info.Chapters = info.Chapters.OrderBy(p => p.ChapId).ToList(); return info; }