public List <SearchResultObject> ParseSearch(String content) { List <SearchResultObject> SearchResults = new List <SearchResultObject>(); HtmlDocument SearchResultDocument = new HtmlDocument(); SearchResultDocument.LoadHtml(content); HtmlNodeCollection HtmlSearchResults = SearchResultDocument.DocumentNode.SelectNodes("//div[contains(@class,'mangaresultitem')]"); if (!Equals(HtmlSearchResults, null)) { foreach (HtmlNode SearchResultNode in HtmlSearchResults) { HtmlNode NameLink = SearchResultNode.SelectSingleNode(".//div[contains(@class,'manga_name')]/div[1]/h3[1]/a[1]"); String Name = NameLink.InnerText, Link = NameLink.Attributes["href"].Value, CoverUrl = SearchResultNode.SelectSingleNode(".//div[contains(@class,'imgsearchresults')]").Style()["background-image"].Slice(5, -2); Int32 Id; if (!Int32.TryParse(Link.Slice(1, Link.IndexOf('/', 1)), out Id)) { Id = -1; } SearchResults.Add(new SearchResultObject() { Cover = new LocationObject() { Url = new Regex(@"r(\d+)\.jpg").Replace(CoverUrl, "l$1.jpg"), ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language }, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Name = Name, Url = String.Format("{0}{1}", ExtensionDescriptionAttribute.RootUrl, Link), Id = Id.ToString(), Rating = -1, Artists = null, Authors = null }); } } return(SearchResults); }
public List <SearchResultObject> ParseSearch(String content) { List <SearchResultObject> SearchResults = new List <SearchResultObject>(); HtmlDocument SearchResultDocument = new HtmlDocument(); SearchResultDocument.LoadHtml(content); HtmlNode MainContainer = SearchResultDocument.DocumentNode.SelectSingleNode("//div[contains(@class,'mainContainer')]"); HtmlNodeCollection SearchResultNodes = MainContainer.SelectNodes(".//div[contains(@class,'well')]/div[contains(@class,'row') and (contains(@class,'available') or contains(@class,'unavailable'))]"); if (!Equals(SearchResultNodes, null)) { foreach (HtmlNode SearchResultNode in SearchResultNodes) { String ImgUrl = ExtensionDescriptionAttribute.RootUrl + SearchResultNode.SelectSingleNode(".//img").Attributes["src"].Value.Substring(2), Name = String.Empty, Link = String.Empty; LocationObject Cover = new LocationObject() { Url = ImgUrl, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language }; List <String> AlternateNames = new List <String>(), AuthorsArtists = new List <String>(), Genres = new List <String>(); foreach (HtmlNode DetailNode in SearchResultNode.SelectNodes(".//div[2]/div[contains(@class,'row')]")) { HtmlNode DetailTypeNode = DetailNode.SelectSingleNode(".//div[1]/b[1] | .//div[1]/strong[1]"), DetailTextNode = (DetailTypeNode != null) ? DetailTypeNode.NextSibling : null, DetailDescriptionNode = (DetailTextNode != null) ? DetailTextNode.NextSibling : null, MangaNameNode = DetailNode.SelectSingleNode(".//div[1]/h1/a"); HtmlNodeCollection DetailLinkNodes = DetailNode.SelectNodes(".//div[1]/a"); String DetailType = (DetailTypeNode != null) ? DetailTypeNode.InnerText.Trim().TrimEnd(':') : "MangaName", DetailValue = String.Empty; String[] DetailValues = { }; if (DetailLinkNodes != null) { DetailValues = (from HtmlNode LinkNode in DetailLinkNodes select LinkNode.InnerText).ToArray(); } else if (MangaNameNode != null) { DetailValue = HtmlEntity.DeEntitize(MangaNameNode.InnerText.Trim()); } else if (DetailDescriptionNode != null) { DetailValue = HtmlEntity.DeEntitize(DetailDescriptionNode.InnerText.Trim()); } else if (DetailTextNode != null) { DetailValue = HtmlEntity.DeEntitize(DetailTextNode.InnerText.Trim()); } switch (DetailType) { default: break; case "MangaName": Name = DetailValue; Link = MangaNameNode.Attributes["href"].Value; if (Link.StartsWith("../manga/?series=")) { Link = Link.Substring("../manga/?series=".Length); } else if (Link.StartsWith("../read-online/")) { Link = Link.Substring("../read-online/".Length); } else { Link = Name.Replace(" ", String.Empty); } break; case "Alternate Names": AlternateNames = (from String AltName in DetailValue.Split(',') select AltName.Trim()).ToList(); break; case "Author": AuthorsArtists = DetailValues.ToList(); break; case "Genre": Genres = DetailValues.ToList(); break; } } SearchResults.Add(new SearchResultObject() { Cover = Cover, Name = Name, Url = String.Format("{0}/read-online/{1}", ExtensionDescriptionAttribute.RootUrl, Link), ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Rating = -1, Artists = AuthorsArtists, Authors = AuthorsArtists }); } } return(SearchResults); }
public List <SearchResultObject> ParseSearch(string content) { List <SearchResultObject> SearchResults = new List <SearchResultObject>(); HtmlDocument SearchResultDocument = new HtmlDocument(); SearchResultDocument.LoadHtml(content); HtmlWeb HtmlWeb = new HtmlWeb(); HtmlNodeCollection HtmlSearchResults = SearchResultDocument.DocumentNode.SelectNodes(".//div[contains(@class,'result_search')]/dl"); if (!Equals(HtmlSearchResults, null) && !Equals(HtmlSearchResults[0].InnerText.ToLower(), "No Manga Series".ToLower())) { foreach (HtmlNode SearchResultNode in HtmlSearchResults) { try { String Name = SearchResultNode.SelectSingleNode(".//dt/a[1]").Attributes["rel"].Value, Url = SearchResultNode.SelectSingleNode(".//dt/a[1]").Attributes["href"].Value; HtmlWeb.PreRequest = new HtmlWeb.PreRequestHandler(req => { req.CookieContainer = new CookieContainer(); if (!Equals(Cookies, null)) { req.CookieContainer.Add(Cookies); } req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; String PayloadContent = String.Format("name={0}", Uri.EscapeDataString(Name)); Byte[] PayloadBuffer = Encoding.UTF8.GetBytes(PayloadContent.ToCharArray()); req.ContentLength = PayloadBuffer.Length; req.GetRequestStream().Write(PayloadBuffer, 0, PayloadBuffer.Length); return(true); }); String[] Details = HtmlWeb.Load( String.Format("{0}/ajax/series.php", ExtensionDescriptionAttribute.RootUrl) ).DocumentNode.InnerText.Replace("\\/", "/").Split(new String[] { "\",\"" }, StringSplitOptions.None); LocationObject Cover = new LocationObject() { Url = Details[1].Substring(0, Details[1].LastIndexOf('?')), ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language }; Double Rating = -1; Double.TryParse(Details[3], out Rating); SearchResults.Add(new SearchResultObject() { Name = Name, Rating = Rating, Description = HtmlEntity.DeEntitize(Details[8]), Artists = (from String Staff in Details[5].Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries) select Staff.Trim()).ToList(), Authors = (from String Staff in Details[5].Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries) select Staff.Trim()).ToList(), Cover = Cover, Url = Url, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language }); } catch { } finally { HtmlWeb.PreRequest = null; } } } return(SearchResults); }
public List <SearchResultObject> ParseSearch(string Content) { List <SearchResultObject> SearchResults = new List <SearchResultObject>(); HtmlDocument SearchResultDocument = new HtmlDocument(); SearchResultDocument.LoadHtml(Content); HtmlNode noMatchNode = SearchResultDocument.DocumentNode.SelectSingleNode(".//div[contains(@class, 'manga-list')]/div[contains(@class, 'no-match')]"); if (!Equals(noMatchNode, null)) { return(SearchResults); } HtmlNodeCollection HtmlSearchResults = SearchResultDocument.DocumentNode.SelectNodes(".//div[contains(@class, 'manga-list')]/div[contains(@class, 'item')]"); if (!Equals(HtmlSearchResults, null)) { foreach (HtmlNode SearchResultNode in HtmlSearchResults) { try { LocationObject Cover = null; HtmlNode TitleImgNode = SearchResultNode.SelectSingleNode(".//a[contains(@class, 'cover')]/img"), ContentNode = SearchResultNode.SelectSingleNode(".//div[contains(@class, 'info')]"); HtmlNodeCollection AuthorsArtistsNodes = ContentNode.SelectNodes(".//div[2]/a[starts-with(@href, '/search?autart=')]"); String Name = TitleImgNode.GetAttributeValue("title", "Unknown"), CoverUrl = TitleImgNode.GetAttributeValue("src", null); if (!Equals(CoverUrl, null)) { CoverUrl = Regex.Replace(CoverUrl, @"/\d+\.jpg", ".jpg", RegexOptions.Singleline); Cover = new LocationObject() { Enabled = true, Url = CoverUrl, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, }; } List <String> AuthorsArtists = (from Node in AuthorsArtistsNodes select HtmlEntity.DeEntitize(Node.InnerText)).ToList(); String Url = TitleImgNode.ParentNode.GetAttributeValue("href", null); if (Equals(Url, null)) { continue; } Url = String.Format("{0}{1}", ExtensionDescriptionAttribute.RootUrl, Url); SearchResults.Add(new SearchResultObject() { Name = HtmlEntity.DeEntitize(Name), Cover = Cover, Authors = AuthorsArtists, Artists = AuthorsArtists, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Url = Url }); } catch { } } } return(SearchResults); }
public List <SearchResultObject> ParseSearch(string content) { List <SearchResultObject> SearchResults = new List <SearchResultObject>(); Regex IdMatch = new Regex(@"r\d+"); HtmlDocument SearchResultDocument = new HtmlDocument(); SearchResultDocument.LoadHtml(content); HtmlWeb HtmlWeb = new HtmlWeb(); HtmlNodeCollection HtmlSearchResults = SearchResultDocument.DocumentNode.SelectNodes("//table[contains(@class,'ipb_table chapters_list')]/tbody/tr[not(contains(@class,'header'))]"); if (!Equals(HtmlSearchResults, null)) { foreach (HtmlNode SearchResultNode in HtmlSearchResults) { HtmlNode NameLink = SearchResultNode.SelectSingleNode(".//td[1]/strong/a"); if (NameLink != null) { Int32 Id = -1; String Name = HtmlEntity.DeEntitize(NameLink.InnerText).Trim(), Link = NameLink.Attributes["href"].Value, Description = null; LocationObject Cover = null; if (Int32.TryParse(IdMatch.Match(Link).Value.Substring(1), out Id)) { HtmlDocument PopDocument = HtmlWeb.Load(String.Format("{0}/comic_pop?id={1}", ExtensionDescriptionAttribute.RootUrl, Id)); HtmlNode CoverNode = PopDocument.DocumentNode.SelectSingleNode("//img"), DescriptionNode = PopDocument.DocumentNode.SelectSingleNode("//table/tbody/tr[6]/td[2]"); if (!HtmlNode.Equals(CoverNode, null)) { Cover = new LocationObject() { Url = CoverNode.Attributes["src"].Value, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language } } ; if (!HtmlNode.Equals(DescriptionNode, null)) { Description = DescriptionNode.InnerText.Trim(); } } String[] Author_Artists = { SearchResultNode.SelectSingleNode(".//td[2]").InnerText.Trim() }; SearchResults.Add(new SearchResultObject() { Cover = Cover, Description = Description, ExtensionName = ExtensionDescriptionAttribute.Name, ExtensionLanguage = ExtensionDescriptionAttribute.Language, Name = Name, Url = Link, Id = Id.ToString(), Rating = Double.Parse(SearchResultNode.SelectSingleNode(".//td[3]/div").Attributes["title"].Value.Substring(0, 4)), Artists = Author_Artists.ToList(), Authors = Author_Artists.ToList() }); } } } return(SearchResults); } }