コード例 #1
0
        public void AnimeReviewsPage_ParsedCorrectly()
        {
            string          testLink = "https://myanimelist.net/anime/5114/Fullmetal_Alchemist__Brotherhood/reviews";
            ReviewsPageData page     = MALParser.AnimePage.Reviews.Parse(testLink);

            Assert.AreEqual(page.Reviews.Count, 20);

            page.Reviews.ForEach(x =>
            {
                Assert.IsNotNull(x.ReviewDescription);
                Assert.IsNotNull(x.Reviewer);

                Assert.IsNotNull(x.EpisodesSeen);
                Assert.IsNotNull(x.AllReviewsByThisGuy);
                Assert.AreNotEqual(x.Date.Ticks, 0);
                Assert.AreNotEqual(x.AnimationRating, -1);
                Assert.AreNotEqual(x.CharacterRating, -1);
                Assert.AreNotEqual(x.EnjoymentRating, -1);
                Assert.AreNotEqual(x.OverallRating, -1);
                Assert.AreNotEqual(x.SoundRating, -1);
                Assert.AreNotEqual(x.StoryRating, -1);
            });
            Assert.AreEqual(page.NextPageAvailable, true);
            Assert.AreEqual(page.PreviousPageAvailable, false);
        }
コード例 #2
0
ファイル: Controller.cs プロジェクト: i3dprogrammer/MALParser
        public ReviewsPageData GetReviewsPage()
        {
            if (m_reviews != null)
            {
                return(m_reviews);
            }

            if (m_header.Link_Reviews == null)
            {
                throw new Exception("There's no reviews page for this anime.");
            }

            m_reviews = Reviews.Parse(m_header.Link_Reviews.Path);
            return(m_reviews);
        }
コード例 #3
0
ファイル: Controller.cs プロジェクト: i3dprogrammer/MALParser
        public async Task <ReviewsPageData> GetReviewsPageAsync()
        {
            if (m_reviews != null)
            {
                return(m_reviews);
            }

            if (m_header.Link_Reviews == null)
            {
                throw new Exception("There's no reviews page for this anime.");
            }

            m_reviews = await Reviews.ParseAsync(m_header.Link_Reviews.Path);

            return(m_reviews);
        }
コード例 #4
0
ファイル: Reviews.cs プロジェクト: i3dprogrammer/MALParser
        private static ReviewsPageData AnalyzeDocument(string HTMLCode, string link)
        {
            HtmlDocument doc = new HtmlDocument();

            doc.LoadHtml(HTMLCode);

            ReviewsPageData page = new ReviewsPageData(Header.AnalyzeHeader(HTMLCode));

            //Parse presented reviews
            try
            {
                var reviewNodes = doc.DocumentNode.Descendants("div").Where(x => x.GetAttributeValue("class", "") == "borderDark");
                foreach (var review in reviewNodes)
                {
                    ReviewInfo reviewInfo = new ReviewInfo();
                    //Left part
                    var leftNode = review.Descendants("div").First(x => x.GetAttributeValue("class", "") == "spaceit").Descendants("tr").First();
                    reviewInfo.ImageLink = new LinkInfo(leftNode.Descendants("img").First().GetAttributeValue("src", ""));
                    var reviewerLink = new LinkInfo(leftNode.Descendants("a").First().GetAttributeValue("href", ""));
                    reviewerLink.Name = reviewerLink.Path.Split('/').Last();
                    reviewInfo.AllReviewsByThisGuy = new LinkInfo(leftNode.Descendants("a").Last().GetAttributeValue("href", ""));
                    reviewInfo.PeopleFoundHelpful  = Utility.GetIntFromString(leftNode.Descendants("div").First(x => x.GetAttributeValue("class", "") == "lightLink spaceit").InnerText);

                    //Right part
                    var mb8Node = review.Descendants("div").First(x => x.GetAttributeValue("class", "") == "mb8");
                    reviewInfo.Date         = DateTime.Parse(HtmlEntity.DeEntitize(mb8Node.Descendants("div").First().InnerText));
                    reviewInfo.EpisodesSeen = HtmlEntity.DeEntitize(mb8Node.Descendants("div").ElementAt(1).InnerText);

                    //Description and Rating
                    var descriptionNode = review.Descendants("div").First(x => x.GetAttributeValue("class", "") == "spaceit textReadability word-break pt8 mt8");
                    var ratings         = descriptionNode.Descendants("tr");
                    reviewInfo.OverallRating   = Utility.GetIntFromString(ratings.ElementAt(0).Descendants("td").ElementAt(1).InnerText);
                    reviewInfo.StoryRating     = Utility.GetIntFromString(ratings.ElementAt(1).Descendants("td").ElementAt(1).InnerText);
                    reviewInfo.AnimationRating = Utility.GetIntFromString(ratings.ElementAt(2).Descendants("td").ElementAt(1).InnerText);
                    reviewInfo.SoundRating     = Utility.GetIntFromString(ratings.ElementAt(3).Descendants("td").ElementAt(1).InnerText);
                    reviewInfo.CharacterRating = Utility.GetIntFromString(ratings.ElementAt(4).Descendants("td").ElementAt(1).InnerText);
                    reviewInfo.EnjoymentRating = Utility.GetIntFromString(ratings.ElementAt(5).Descendants("td").ElementAt(1).InnerText);
                    var description = HtmlEntity.DeEntitize(descriptionNode.InnerText.Replace(descriptionNode.Descendants("div").First().InnerText, "")).Trim();
                    int error       = 50;
                    description                  = description.Remove(description.Length - error, error);
                    reviewInfo.Reviewer          = reviewerLink;
                    reviewInfo.ReviewDescription = description;
                    page.Reviews.Add(reviewInfo);
                }

                if (doc.DocumentNode.Descendants("div").Any(x => x.GetAttributeValue("class", "") == "ml4") && doc.DocumentNode.Descendants("div").First(x => x.GetAttributeValue("class", "") == "ml4").InnerText != "")
                {
                    string mainLink = link.Split('/').Take(link.Split('/').Length - 1).Aggregate((x, y) => x + "/" + y) + "/";
                    page.PreviousPageLink = new LinkInfo(mainLink + doc.DocumentNode.Descendants("div").First(x => x.GetAttributeValue("class", "") == "ml4").Descendants("a").First().GetAttributeValue("href", ""));
                    page.NextPageLink     = new LinkInfo(mainLink + doc.DocumentNode.Descendants("div").First(x => x.GetAttributeValue("class", "") == "ml4").Descendants("a").Last().GetAttributeValue("href", ""));

                    if (page.PreviousPageLink.Path == page.NextPageLink.Path)
                    {
                        page.PreviousPageLink = null;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + ex.StackTrace);
            }

            return(page);
        }