Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
    }