private void LoadFromXmlDocument() { var doc = new XmlDocument(); doc.Load(XmlReader); var posts = doc.GetElementsByTagName("post"); foreach (XmlNode post in posts) { var blogX = new BlogMlExtendedPost(); if (post.Attributes != null) { blogX.PostUrl = GetAttributeValue <string>(post.Attributes["post-url"]); } if (post.ChildNodes.Count <= 0) { blogsExtended.Add(blogX); continue; } foreach (XmlNode child in post.ChildNodes) { if (child.Name == "tags") { foreach (XmlNode tag in child.ChildNodes) { if (tag.Attributes != null) { if (blogX.Tags == null) { blogX.Tags = new List <string>(); } blogX.Tags.Add(GetAttributeValue <string>(tag.Attributes["ref"])); } } } if (child.Name == "comments") { LoadBlogComments(blogX, child); } if (child.Name == "trackbacks") { LoadBlogTrackbacks(blogX, child); } } blogsExtended.Add(blogX); } }
private async Task ImportCommentAsync(BlogMlExtendedPost extPost, Post post) { if (extPost.Comments?.Any() == true) { foreach (var extComment in extPost.Comments) { var comment = new Comment() { Author = extComment.Author, Content = extComment.Content, CreationTime = extComment.CreationTime, Email = extComment.Email, IP = extComment.IP, IsApproved = extComment.IsApproved, IsDeleted = extComment.IsDeleted, IsSpam = extComment.IsSpam, LastModificationTime = extComment.LastModificationTime, ParentId = extComment.ParentId, Website = extComment.Author, }; // valiate if (comment.Author?.Length >= 32) { comment.Author = comment.Author.Substring(0, 32); } if (comment.Email?.Length >= 128) { comment.Email = comment.Email.Substring(0, 128); } comment.PostId = post.Id; comment.Country = await _iPAddressService.GetIPLocationAsync(comment.IP); if (!string.IsNullOrWhiteSpace(extComment.ParentCommentId)) { comment.ParentId = GetOrAddId("command", extComment.ParentCommentId, comment.Id); } await _commentService.InsertAsync(comment); GetOrAddId("command", extComment.CommentId, comment.Id); } post.CommentsCount = extPost.Comments.Count; CommentCount += post.CommentsCount; await _postService.UpdateAsync(post); } }
private async Task <bool> ImportPageAsync(BlogMlExtendedPost extPost) { var p = new Page { Title = extPost.BlogPost.Title, CreationTime = extPost.BlogPost.DateCreated, LastModificationTime = extPost.BlogPost.DateModified, Content = extPost.BlogPost.Content.UncodedText, Description = extPost.BlogPost.Excerpt.UncodedText, Published = extPost.BlogPost.Approved, DisplayOrder = 1, }; if (!string.IsNullOrEmpty(extPost.PostUrl)) { // looking for a Slug with patterns such as: // /some-slug.aspx // /some-slug.html // /some-slug // Match slugMatch = Regex.Match(extPost.PostUrl, @"/([^/\.]+)(?:$|\.[\w]{1,10}$)", RegexOptions.IgnoreCase); if (slugMatch.Success) { p.Slug = slugMatch.Groups[1].Value.Trim(); } } if (string.IsNullOrEmpty(p.Slug)) { p.Slug = await _slugService.NormalarAsync(p.Title); } // skip if exists if (await _pageService.FindBySlugAsync(p.Slug) != null) { return(false); } await _pageService.InsertAsync(p); return(true); }
private void LoadBlogComments(BlogMlExtendedPost blogX, XmlNode child) { foreach (XmlNode com in child.ChildNodes) { if (com.Attributes != null) { var c = new ExtendedComment { CommentId = GetAttributeValue <string>(com.Attributes["id"]), Author = GetAttributeValue <string>(com.Attributes["user-name"]), Email = GetAttributeValue <string>(com.Attributes["user-email"]), IP = GetAttributeValue <string>(com.Attributes["user-ip"]), CreationTime = GetDate(com.Attributes["date-created"]), Content = "", Website = GetAttributeValue <string>(com, "user-url"), }; var parentid = GetAttributeValue <string>(com.Attributes["parentid"]); if (!string.IsNullOrEmpty(parentid)) { c.ParentCommentId = parentid; } c.IsApproved = GetAttributeValue <bool>(com.Attributes["approved"]); foreach (XmlNode comNode in com.ChildNodes) { if (comNode.Name == "content") { c.Content = comNode.InnerText; } } if (blogX.Comments == null) { blogX.Comments = new List <ExtendedComment>(); } blogX.Comments.Add(c); } } }
private void LoadBlogTrackbacks(BlogMlExtendedPost blogX, XmlNode child) { foreach (XmlNode com in child.ChildNodes) { if (com.Attributes != null) { var c = new ExtendedComment { IP = "127.0.0.1", IsApproved = GetAttributeValue <bool>(com.Attributes["approved"]), CreationTime = GetDate(com.Attributes["date-created"]) }; if (!string.IsNullOrEmpty(GetAttributeValue <string>(com.Attributes["url"]))) { c.Website = (GetAttributeValue <string>(com.Attributes["url"])); } foreach (XmlNode comNode in com.ChildNodes) { if (comNode.Name == "title") { c.Content = comNode.InnerText; } } c.Email = c.Content.Contains("pingback", StringComparison.InvariantCultureIgnoreCase) ? "pingback" : "trackback"; c.Author = c.Email; if (blogX.Comments == null) { blogX.Comments = new List <ExtendedComment>(); } blogX.Comments.Add(c); } } }
private async Task <bool> ImportPostAsync(BlogMlExtendedPost extPost) { var p = new Post { Title = extPost.BlogPost.Title, CreationTime = extPost.BlogPost.DateCreated, PublishedTime = extPost.BlogPost.DateCreated, LastModificationTime = extPost.BlogPost.DateModified, Content = extPost.BlogPost.Content.UncodedText, Description = extPost.BlogPost.Excerpt.UncodedText, IsDraft = !extPost.BlogPost.Approved, ViewsCount = GetValue(extPost.BlogPost.Views), UserId = _user.Id, EnableComment = true, }; if (extPost.BlogPost.HasExcerpt) { p.Description = extPost.BlogPost.Excerpt.UncodedText; } if (!string.IsNullOrEmpty(extPost.PostUrl)) { // looking for a Slug with patterns such as: // /some-slug.aspx // /some-slug.html // /some-slug // Match slugMatch = Regex.Match(extPost.PostUrl, @"/([^/\.]+)(?:$|\.[\w]{1,10}$)", RegexOptions.IgnoreCase); if (slugMatch.Success) { p.Slug = slugMatch.Groups[1].Value.Trim(); } } if (string.IsNullOrEmpty(p.Slug)) { p.Slug = await _slugService.NormalarAsync(p.Title); } // skip if exists if (await _postService.FindBySlugAsync(p.Slug) != null) { return(false); } if (extPost.Categories != null && extPost.Categories.Count > 0) { foreach (var item in extPost.Categories) { p.Categories.Add(new PostCategory() { CategoryId = item.Id, }); } } if (extPost.Tags != null && extPost.Tags.Count > 0) { foreach (var tagName in extPost.Tags) { var tag = await _tagsService.GetOrCreateAsync(tagName); p.Tags.Add(new PostTags() { TagsId = tag.Id }); } } if (await _postService.FindBySlugAsync(p.Slug) != null) { return(false); } await _postService.InsertAsync(p); await ImportCommentAsync(extPost, p); return(true); }
private async Task ImportPostsAsync(BlogMLBlog blog) { _logger.LogInformation("Start importing posts..."); foreach (var post in blog.Posts) { BlogMLPost p = post; blogsExtended.Where(b => b.PostUrl == p.PostUrl).FirstOrDefault().BlogPost = post; } var allPost = blogsExtended.OrderBy(t => t.BlogPost.DateCreated).ToList(); foreach (BlogMlExtendedPost extPost in allPost) { if (extPost.BlogPost.PostType == BlogPostTypes.Normal) { try { BlogMlExtendedPost post = extPost; if (extPost.BlogPost.Categories.Count > 0) { for (var i = 0; i < extPost.BlogPost.Categories.Count; i++) { int i2 = i; var cId = GetOrAddId("category", post.BlogPost.Categories[i2].Ref); var category = categoryLookup.FirstOrDefault(t => t.Id == cId); if (category != null) { if (extPost.Categories == null) { extPost.Categories = new List <Category>(); } extPost.Categories.Add(category); } } } if (await ImportPostAsync(extPost)) { PostCount++; } else { _logger.LogInformation("Post '{0}' has been skipped", extPost.BlogPost.Title); } } catch (Exception ex) { _logger.LogInformation("BlogReader.LoadBlogPosts: " + ex); } } else if (extPost.BlogPost.PostType == BlogPostTypes.Article) { try { BlogMlExtendedPost post = extPost; if (await ImportPageAsync(extPost)) { PageCount++; } else { _logger.LogInformation("Post '{0}' has been skipped", extPost.BlogPost.Title); } } catch (Exception ex) { _logger.LogInformation("BlogReader.LoadBlogPosts: " + ex); } } } }