public void Process(BlogMLBlog blogml) { Log.Info("Fetching Tags."); using (var query = new OxiteReader("SELECT * FROM oxite_Tag")) { var tags = query.Execute(); foreach (var tag in tags) { var category = new BlogMLCategory { Approved = true, DateCreated = tag.CreatedDate, DateModified = tag.CreatedDate, Description = tag.TagName, ID = tag.TagID.ToString(), ParentRef = tag.TagID.ToString() == tag.ParentTagID.ToString() ? "0" : tag.ParentTagID.ToString(), Title = tag.TagName }; blogml.Categories.Add(category); } } Log.InfoFormat("Finished adding {0} tags.", blogml.Categories.Count); }
public LinkCategory ConvertCategory(BlogMLCategory category) { return(new LinkCategory { Title = category.Title.Left(MaxCategoryTitleLength), Description = category.Description, IsActive = category.Approved, CategoryType = CategoryType.PostCollection }); }
public void ConvertCategory_WithTitleTooLong_TruncatesTitleToMaxLength() { // arrange var title = new string('a', 151); var category = new BlogMLCategory { Title = title }; var mapper = new BlogMLImportMapper(); // act LinkCategory linkCategory = mapper.ConvertCategory(category); // assert Assert.AreEqual(150, linkCategory.Title.Length); }
private string UpdateCategoriesGetRef(ref List <BlogMLCategory> categories, string categoryName, DateTime created) { string categoryRef = null; if (categories.Count > 0) { for (int i = 0; i < categories.Count; i++) { if (categories[i].Title == categoryName) { // if we have evidence of an earlier date for this category update it now if (categories[i].DateCreated > created) { categories[i].DateCreated = created; categories[i].DateModified = DateTime.UtcNow; } categoryRef = categories[i].ID; break; } } } // add a new category if not already in the list if (categoryRef == null) { // no ID in blogger so use a GUID categoryRef = Guid.NewGuid().ToString(); BlogMLCategory category = new BlogMLCategory(); category.Approved = true; category.DateCreated = created; category.DateModified = DateTime.UtcNow; category.Description = categoryName; category.ID = categoryRef; category.Title = categoryName; categories.Add(category); } return(categoryRef); }
private void AddBlogCategories(BlogMLDocument blogMlDoc, string tagGroup) { var categories = _applicationContext.Services.TagService.GetAllContentTags(tagGroup); foreach (var category in categories) { if (category.NodeCount == 0) { continue; } var blogMlCategory = new BlogMLCategory(); blogMlCategory.Id = category.Id.ToString(); blogMlCategory.CreatedOn = category.CreateDate; blogMlCategory.LastModifiedOn = category.UpdateDate; blogMlCategory.ApprovalStatus = BlogMLApprovalStatus.Approved; blogMlCategory.ParentId = "0"; blogMlCategory.Title = new BlogMLTextConstruct(category.Text); blogMlDoc.Categories.Add(blogMlCategory); } }
//============================================================ // CLASS SUMMARY //============================================================ /// <summary> /// Provides example code for the BlogMLPost class. /// </summary> public static void ClassExample() { #region BlogMLPost BlogMLDocument document = new BlogMLDocument(); document.RootUrl = new Uri("/blogs/default.aspx"); document.GeneratedOn = new DateTime(2006, 9, 5, 18, 22, 10); document.Title = new BlogMLTextConstruct("BlogML 2.0 Example"); document.Subtitle = new BlogMLTextConstruct("This is some sample blog content for BlogML 2.0"); BlogMLAuthor administrator = new BlogMLAuthor(); administrator.Id = "2100"; administrator.CreatedOn = new DateTime(2006, 8, 10, 8, 44, 35); administrator.LastModifiedOn = new DateTime(2006, 9, 4, 13, 46, 38); administrator.ApprovalStatus = BlogMLApprovalStatus.Approved; administrator.EmailAddress = "*****@*****.**"; administrator.Title = new BlogMLTextConstruct("admin"); document.Authors.Add(administrator); document.ExtendedProperties.Add("CommentModeration", "Anonymous"); document.ExtendedProperties.Add("SendTrackback", "yes"); BlogMLCategory category1 = new BlogMLCategory(); category1.Id = "1018"; category1.CreatedOn = new DateTime(2006, 9, 5, 17, 54, 58); category1.LastModifiedOn = new DateTime(2006, 9, 5, 17, 54, 58); category1.ApprovalStatus = BlogMLApprovalStatus.Approved; category1.Description = "Sample Category 1"; category1.ParentId = "0"; category1.Title = new BlogMLTextConstruct("Category 1"); document.Categories.Add(category1); BlogMLCategory category2 = new BlogMLCategory(); category2.Id = "1019"; category2.CreatedOn = new DateTime(2006, 9, 5, 17, 54, 59); category2.LastModifiedOn = new DateTime(2006, 9, 5, 17, 54, 59); category2.ApprovalStatus = BlogMLApprovalStatus.Approved; category2.Description = "Sample Category 2"; category2.ParentId = "0"; category2.Title = new BlogMLTextConstruct("Category 2"); document.Categories.Add(category2); BlogMLCategory category3 = new BlogMLCategory(); category3.Id = "1020"; category3.CreatedOn = new DateTime(2006, 9, 5, 17, 55, 0); category3.LastModifiedOn = new DateTime(2006, 9, 5, 17, 55, 0); category3.ApprovalStatus = BlogMLApprovalStatus.NotApproved; category3.Description = "Sample Category 3"; category3.ParentId = "0"; category3.Title = new BlogMLTextConstruct("Category 3"); document.Categories.Add(category3); // Create a blog entry BlogMLPost post = new BlogMLPost(); post.Id = "34"; post.CreatedOn = new DateTime(2006, 9, 5, 3, 19, 0); post.LastModifiedOn = new DateTime(2006, 9, 5, 3, 19, 0); post.ApprovalStatus = BlogMLApprovalStatus.Approved; post.Url = new Uri("/blogs/archive/2006/09/05/Sample-Blog-Post.aspx"); post.PostType = BlogMLPostType.Normal; post.Views = "0"; post.Title = new BlogMLTextConstruct("Sample Blog Post"); post.Content = new BlogMLTextConstruct("<p>This is <b>HTML encoded</b> content. </p>", BlogMLContentType.Html); post.Name = new BlogMLTextConstruct("Sample Blog Post"); post.Categories.Add("1018"); post.Categories.Add("1020"); post.Authors.Add("2100"); BlogMLComment comment = new BlogMLComment(); comment.Id = "35"; comment.CreatedOn = new DateTime(2006, 9, 5, 11, 36, 50); comment.LastModifiedOn = new DateTime(2006, 9, 5, 11, 36, 50); comment.Title = new BlogMLTextConstruct("re: Sample Blog Post"); comment.Content = new BlogMLTextConstruct("This is a test comment."); post.Comments.Add(comment); #endregion }
//============================================================ // PRIVATE METHODS //============================================================ #region FillDocumentCollections(BlogMLDocument document, XPathNavigator source, XmlNamespaceManager manager, SyndicationResourceLoadSettings settings) /// <summary> /// Modifies the <see cref="BlogMLDocument"/> collection entities to match the supplied <see cref="XPathNavigator"/> data source. /// </summary> /// <param name="document">The <see cref="BlogMLDocument"/> to be filled.</param> /// <param name="source">The <see cref="XPathNavigator"/> to extract information from.</param> /// <param name="manager">The <see cref="XmlNamespaceManager"/> used to resolve XML namespace prefixes.</param> /// <param name="settings">The <see cref="SyndicationResourceLoadSettings"/> used to configure the fill operation.</param> /// <remarks> /// This method expects the supplied <paramref name="source"/> to be positioned on the XML element that represents a <see cref="BlogMLDocument"/>. /// </remarks> /// <exception cref="ArgumentNullException">The <paramref name="document"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="source"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="manager"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="settings"/> is a null reference (Nothing in Visual Basic).</exception> private static void FillDocumentCollections(BlogMLDocument document, XPathNavigator source, XmlNamespaceManager manager, SyndicationResourceLoadSettings settings) { //------------------------------------------------------------ // Validate parameter //------------------------------------------------------------ Guard.ArgumentNotNull(document, "document"); Guard.ArgumentNotNull(source, "source"); Guard.ArgumentNotNull(manager, "manager"); Guard.ArgumentNotNull(settings, "settings"); //------------------------------------------------------------ // Attempt to extract syndication information //------------------------------------------------------------ XPathNodeIterator authorsIterator = source.Select("blog:authors/blog:author", manager); XPathNodeIterator extendedPropertiesIterator = source.Select("blog:extended-properties/blog:property", manager); XPathNodeIterator categoriesIterator = source.Select("blog:categories/blog:category", manager); XPathNodeIterator postsIterator = source.Select("blog:posts/blog:post", manager); if (authorsIterator != null && authorsIterator.Count > 0) { while (authorsIterator.MoveNext()) { BlogMLAuthor author = new BlogMLAuthor(); if (author.Load(authorsIterator.Current, settings)) { document.Authors.Add(author); } } } if (extendedPropertiesIterator != null && extendedPropertiesIterator.Count > 0) { while (extendedPropertiesIterator.MoveNext()) { if (extendedPropertiesIterator.Current.HasAttributes) { string propertyName = extendedPropertiesIterator.Current.GetAttribute("name", String.Empty); string propertyValue = extendedPropertiesIterator.Current.GetAttribute("value", String.Empty); if (!String.IsNullOrEmpty(propertyName) && !document.ExtendedProperties.ContainsKey(propertyName)) { document.ExtendedProperties.Add(propertyName, propertyValue); } } } } if (categoriesIterator != null && categoriesIterator.Count > 0) { while (categoriesIterator.MoveNext()) { BlogMLCategory category = new BlogMLCategory(); if (category.Load(categoriesIterator.Current, settings)) { document.Categories.Add(category); } } } if (postsIterator != null && postsIterator.Count > 0) { int counter = 0; while (postsIterator.MoveNext()) { BlogMLPost post = new BlogMLPost(); counter++; if (post.Load(postsIterator.Current, settings)) { if (settings.RetrievalLimit != 0 && counter > settings.RetrievalLimit) { break; } ((Collection <BlogMLPost>)document.Posts).Add(post); } } } }
public void WriteWXRDocument(BlogMLBlog blogData, string baseUrl, string fileName) { XmlTextWriter writer = new XmlTextWriter(fileName, new UTF8Encoding(false)); writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("rss"); writer.WriteAttributeString("version", "2.0"); writer.WriteAttributeString("xmlns", "content", null, "http://purl.org/rss/1.0/modules/content/"); writer.WriteAttributeString("xmlns", "wfw", null, "http://wellformedweb.org/CommentAPI/"); writer.WriteAttributeString("xmlns", "dc", null, "http://purl.org/dc/elements/1.1/"); writer.WriteAttributeString("xmlns", "wp", null, "http://wordpress.org/export/1.0/"); // Write Blog Info. writer.WriteStartElement("channel"); writer.WriteElementString("title", String.Join(" ", blogData.Title)); writer.WriteElementString("link", baseUrl + blogData.RootUrl); writer.WriteElementString("description", "Exported Blog"); writer.WriteElementString("pubDate", blogData.DateCreated.ToString("ddd, dd MMM yyyy HH:mm:ss +0000")); writer.WriteElementString("generator", "http://wordpress.org/?v=MU"); writer.WriteElementString("language", "en"); writer.WriteElementString("wp:wxr_version", "1.0"); writer.WriteElementString("wp:base_site_url", blogData.RootUrl); writer.WriteElementString("wp:base_blog_url", blogData.RootUrl); // Create tags (currently not in use with BlogML document) //for(int i = 0; i <= tagCount - 1; i++) //{ // writer.WriteStartElement("wp:tag"); // writer.WriteElementString("wp:tag_slug", tags[0].ToString().Replace(' ', '-')); // writer.WriteStartElement("wp:tag_name"); // writer.WriteCData(tags[0].ToString()); // writer.WriteEndElement(); // wp:tag_name // writer.WriteEndElement(); // sp:tag //} // Create categories if (blogData.categories != null) { BlogMLCategory currCategory = null; for (int i = 0; i <= blogData.categories.Count - 1; i++) { currCategory = blogData.categories[i]; writer.WriteStartElement("wp:category"); writer.WriteElementString("wp:category_nicename", string.Join(" ", currCategory.Title).ToLower().Replace(' ', '-')); writer.WriteElementString("wp:category_parent", ""); writer.WriteStartElement("wp:cat_name"); writer.WriteCData(string.Join(" ", currCategory.Title)); writer.WriteEndElement(); // wp:cat_name writer.WriteEndElement(); // wp:category } } // TODO: Swap code so that all posts are processed, not just first 5. for (int i = 0; i <= blogData.Posts.Count - 1; i++) { string postXml = WritePost(blogData.Posts[i], blogData, baseUrl); writer.WriteRaw(postXml); } writer.WriteEndElement(); // channel writer.WriteEndElement(); // rss writer.Flush(); writer.Close(); }