/// <summary> /// Uzupełnienie komentarza danymi zalet /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillAdvantages(CommentDb comment, HtmlAgilityPack.HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(containerPath + "ul[@class=\"pros-n-cons\"]//li[1]"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { comment.Advantages += commentNode.InnerText; } } }
/// <summary> /// Uzupełnia pole autor /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillAuthor(CommentDb comment, HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(containerPath+"span[@class=\"author\"]");//div//span[@class=\"review-time\"]//time"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { comment.Author = commentNode.InnerText; } } }
/// <summary> /// Uzupełnienie komentarza danymi zalet /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillAdvantages(CommentDb comment, HtmlAgilityPack.HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(".//span[@class=\"pros-cell\"]//li");//("//*[@id=\"body\"]/div[2]/div/div/div[2]/div[3]/div[2]/ol/li/div/div[1]/p");// //body//div[@id='body']class=\"product - review - body\""); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { comment.Advantages += commentNode.InnerText; } } }
/// <summary> /// Pobiera z node do comment użyteczność komentarza /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillUsability(CommentDb comment, HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(".//span[@class=\"btn gray link\"]"); int votesToYes = 0; if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { if (commentNode.InnerHtml.Contains("ico-hand-down")) { string textToParse = commentNode.InnerHtml; textToParse = textToParse.Replace("<i class=\"ico-hand-down\"> </i>Pomocna (", ""); textToParse = textToParse.Replace(")", ""); votesToYes = Convert.ToInt32(textToParse); comment.Usability = votesToYes; } else { string textToParse = commentNode.InnerHtml; textToParse = textToParse.Replace("<i class=\"ico-hand-up\">\n </i>(", ""); textToParse = textToParse.Replace(")", ""); comment.UsabilityVotes = votesToYes + Convert.ToInt32(textToParse); } } } bodyNodes = node.SelectNodes("./span[@class=\"btn gray link\"][2]"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { string ll = commentNode.InnerHtml; //comment.Usability = Convert.ToInt32(commentNode.InnerText); } } }
/// <summary> /// Uzupełnienie komentarza danymi ilości gwiazdek /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillStar(CommentDb comment, HtmlAgilityPack.HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(".//span[@class=\"review-score-count\"]");//("//*[@id=\"body\"]/div[2]/div/div/div[2]/div[3]/div[2]/ol/li/div/div[1]/p");// //body//div[@id='body']class=\"product - review - body\""); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { string score = commentNode.InnerText; string[] scoreCount = score.Split('/'); comment.Stars = Convert.ToDouble(scoreCount[0]); } } }
/// <summary> /// Uzupełnia czy dany komentarz rekomenduje /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillRecommend(CommentDb comment, HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(".//em[@class=\"product-recommended\"]"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { if (commentNode.InnerText.Contains("Polecam")) { comment.Recommend = true; } else { comment.Recommend = false; } } } }
/// <summary> /// Uzupełnienie komentarza danymi komentarza /// </summary> /// <param name="product"></param> void fillComments(Product product) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = htmlDoc.DocumentNode.SelectNodes("//ul[@class=\"opinion-list\"]/li"); if (bodyNodes != null) { int dd = 0; foreach (HtmlAgilityPack.HtmlNode node in bodyNodes) { if (!isCommentExistInProduct(product, node)) { CommentDb comment = new CommentDb(); comment.PortalName = "Skapiec"; fillComment(comment, node); product.Comments.Add(comment); } dd++; } } }
/// <summary> /// Uzupełnia czas wystawienia komentarza /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillCommentDate(CommentDb comment, HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(containerPath+"span[@class=\"date\"]"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { comment.Date = DateTime.Parse(commentNode.InnerHtml); break; } } }
/// <summary> /// Uzupełnia tekst komentarza /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillCommentContent(CommentDb comment, HtmlAgilityPack.HtmlNode node) { HtmlNodeCollection bodyNodes = node.SelectNodes(".//div[@class=\"opinion-container\"]//p");//("//*[@id=\"body\"]/div[2]/div/div/div[2]/div[3]/div[2]/ol/li/div/div[1]/p");// //body//div[@id='body']class=\"product - review - body\""); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { comment.Comment += commentNode.InnerText; } } }
/// <summary> /// Wypełnia pojedyńczy komentarz comment z danego node /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillComment(CommentDb comment, HtmlAgilityPack.HtmlNode node) { fillCommentContent(comment, node); fillStar(comment, node); fillAdvantages(comment, node); fillDisadvantages(comment, node); fillAuthor(comment, node); fillCommentDate(comment, node); fillRecommend(comment, node); fillUsability(comment, node); }
/// <summary> /// Pobiera z node do comment użyteczność komentarza /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillUsability(CommentDb comment, HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(".//span[@class=\"product-review-usefulness-stats\"]//span"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { if (!commentNode.Attributes[0].Value.Contains("percent")) { if (commentNode.Attributes[0].Value.Contains("-yes-")) { comment.Usability = Convert.ToInt32(commentNode.InnerText); } else { comment.UsabilityVotes = Convert.ToInt32(commentNode.InnerText); } } } } }
/// <summary> /// Uzupełnienie komentarza danymi komentarza /// </summary> /// <param name="product"></param> void fillComments(Product product) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = htmlDoc.DocumentNode.SelectNodes("//ol[@class=\"product-reviews js_product-reviews js_reviews-hook\"]/li");//("//*[@id=\"body\"]/div[2]/div/div/div[2]/div[3]/div[2]/ol/li/div/div[1]/p");// //body//div[@id='body']class=\"product - review - body\""); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode node in bodyNodes) { if (!isCommentExistInProduct(product, node)) { CommentDb comment = new CommentDb(); comment.PortalName = "Ceneo"; fillComment(comment, node); product.Comments.Add(comment); } } } }
/// <summary> /// Uzupełnia czas wystawienia komentarza /// </summary> /// <param name="comment"></param> /// <param name="node"></param> private void fillCommentDate(CommentDb comment, HtmlNode node) { HtmlAgilityPack.HtmlNodeCollection bodyNodes = node.SelectNodes(".//div[@class=\"content-wide-col\"]//div//span[@class=\"review-time\"]//time"); if (bodyNodes != null) { foreach (HtmlAgilityPack.HtmlNode commentNode in bodyNodes) { foreach (HtmlAgilityPack.HtmlAttribute attribut in commentNode.Attributes) { if (attribut.Name == "datetime") { comment.Date = DateTime.Parse(attribut.Value); } } break; } } }