public async Task<ForumUserEntity> GetUserFromProfilePage(ForumUserEntity user, long userId) { string url = Constants.BASE_URL + string.Format(Constants.USER_PROFILE, userId); var doc = (await _webManager.DownloadHtml(url)).Document; return string.IsNullOrEmpty(user.Username) ? ForumUserEntity.FromPost(doc.DocumentNode.Descendants("td").FirstOrDefault(node => node.GetAttributeValue("id", string.Empty).Contains("thread"))) : ForumUserEntity.FromUserProfile(doc.DocumentNode.Descendants("td").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("info"))); }
public static ForumUserEntity FromPost(HtmlNode postNode) { var user = new ForumUserEntity { Username = WebUtility.HtmlDecode( postNode.Descendants("dt") .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("author")) .InnerHtml), DateJoined = DateTime.Parse(postNode.Descendants("dd") .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("registered")) .InnerHtml) }; var avatarTitle = postNode.Descendants("dd").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("title")); var avatarImage = postNode.Descendants("dd").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("title")).Descendants("img").FirstOrDefault(); if (avatarTitle != null) { user.AvatarTitle = WebUtility.HtmlDecode(avatarTitle.InnerText).WithoutNewLines().Trim(); } if (avatarImage != null) { user.AvatarLink = FixPostHtmlImage(avatarImage.OuterHtml); } user.Id = Convert.ToInt64(postNode.DescendantsAndSelf("td").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("userinfo")).GetAttributeValue("class", string.Empty).Split('-')[1]); return user; }
public static ForumUserEntity FromUserProfile(HtmlNode profileNode, HtmlNode authorNode) { HtmlNode additionalNode = profileNode.Descendants("dl") .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("additional")); Dictionary<string, string> additionalProfileAttributes = ParseAdditionalProfileAttributes(additionalNode); var user = new ForumUserEntity { Username = authorNode.Descendants("dt") .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("author")) .InnerText, AboutUser = string.Empty, DateJoined = DateTime.Parse(additionalProfileAttributes["Member Since"]), PostCount = int.Parse(additionalProfileAttributes["Post Count"]), PostRate = additionalProfileAttributes["Post Rate"], LastPostDate = DateTime.Parse(additionalProfileAttributes["Last Post"]) }; foreach (HtmlNode aboutParagraph in profileNode.Descendants("p")) { user.AboutUser += WebUtility.HtmlDecode(aboutParagraph.InnerText.WithoutNewLines().Trim()) + Environment.NewLine + Environment.NewLine; } if (additionalProfileAttributes.ContainsKey("Seller Rating")) { user.SellerRating = additionalProfileAttributes["Seller Rating"]; } if (additionalProfileAttributes.ContainsKey("Location")) { user.Location = additionalProfileAttributes["Location"]; } return user; }