public List <MigratorPost> GetPosts() { int postId = 100; // this is only used if the id format is not an int (dasblog) CleanupEncodedFile(); var posts = new List <MigratorPost>(); var comments = new List <MigratorComment>(); var tags = new List <BlogMLTag>(); XmlDocument doc = new XmlDocument(); try { doc.LoadXml(_encodedFile); } catch (Exception exc) { // might be unicode, and since DOM detection doesn't work correctly, we will try to load it unicode try { _encodedFile = Encoding.Unicode.GetString(_fileBytes); CleanupEncodedFile(); doc.LoadXml(_encodedFile); } catch (Exception) { // didn't work here either, bubble it up throw exc; } } XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); XmlNode node = doc.SelectSingleNode("blog", mgr); foreach (XmlNode catNode in node.SelectNodes("categories/category")) { BlogMLTag t = new BlogMLTag(); t.Id = catNode.Attributes["id"].Value; if (catNode.SelectSingleNode("title") == null) { t.Description = catNode.Attributes["id"].Value; } else { t.Description = catNode.SelectSingleNode("title").InnerText; } tags.Add(t); } foreach (XmlNode itemNode in node.SelectNodes("posts/post")) { if (itemNode.Attributes["approved"].Value == "true") { MigratorPost post = new MigratorPost(); int temp = 0; if (itemNode.Attributes["id"] != null && int.TryParse(itemNode.Attributes["id"].Value, out temp)) { postId = Convert.ToInt32(itemNode.Attributes["id"].Value); post.PostID = postId; } else { post.PostID = postId; postId++; } //post.Author = itemNode.SelectSingleNode("dc:creator").InnerText; post.Body = itemNode.SelectSingleNode("content").InnerText; post.CreatedOn = Convert.ToDateTime(itemNode.Attributes["date-created"].Value); post.Name = itemNode.SelectSingleNode("title").InnerText; post.Subject = itemNode.SelectSingleNode("title").InnerText; post.IsPublished = true; // tags post.TagsAndCategories = new List <String>(); foreach (XmlNode catNode in itemNode.SelectNodes("categories/category")) { string catId = catNode.Attributes["ref"].Value; BlogMLTag cat = tags.Find(delegate(BlogMLTag t) { return(t.Id == catId); }); if (cat != null) { post.TagsAndCategories.Add(cat.Description); } } // comments : these are going to be stored in cache for wordpress types foreach (XmlNode commentNode in itemNode.SelectNodes("comments/comment")) { if (commentNode.Attributes["approved"].Value == "true") { MigratorComment comment = new MigratorComment(); comment.PostID = post.PostID; comment.Body = commentNode.SelectSingleNode("content").InnerText; comment.PublishedOn = Convert.ToDateTime(commentNode.Attributes["date-created"].Value); comment.WebSite = commentNode.Attributes["user-url"] == null ? "" : commentNode.Attributes["user-url"].Value; comment.UserName = commentNode.Attributes["user-name"].Value; comment.IsPublished = true; comments.Add(comment); } } posts.Add(post); } } // add the comments to cache ZCache.MaxCache("MigratorComments", comments); return(posts); }
public List <MigratorComment> GetComments(int postID) { string dbConnString = ZCache.Get <string>("MigratorConnectionString"); if (String.IsNullOrEmpty(dbConnString)) { throw new Exception("The database connection string has expired. Please restart your import."); } var comments = new List <MigratorComment>(); using (SqlConnection conn = new SqlConnection(dbConnString)) { conn.Open(); using ( SqlCommand cmd = new SqlCommand( "select p.PostID, p.FormattedBody, p.PostDate, p.IPAddress, p.ApplicationPostType, p.PropertyNames, p.PropertyValues, p.IsApproved, p.SpamScore, IsNull(u.Email, '') as Email from cs_Posts p LEFT OUTER JOIN cs_Users u ON p.UserID = u.UserID where ParentID = @parentid and PostLevel > 1 and ApplicationPostType in (4,8) order by PostID asc", conn)) { cmd.Parameters.Add(new SqlParameter("@parentid", postID)); using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { while (rdr.Read()) { MigratorComment comment = new MigratorComment(); comment.PostID = postID; comment.PublishedOn = Convert.ToDateTime(rdr["PostDate"]); comment.IPAddress = rdr["IPAddress"] as string; // Remove <p> tags from comment body, as Graffiti will add these back in when saving the comment comment.Body = rdr["FormattedBody"] as string; if (!string.IsNullOrEmpty(comment.Body)) { comment.Body = comment.Body.Replace("<p>", "").Replace("</p>", ""); } NameValueCollection nvc = ConvertToNameValueCollection(rdr["PropertyNames"] as string, rdr["PropertyValues"] as string); comment.IsPublished = Convert.ToBoolean(rdr["IsApproved"]); comment.SpamScore = Convert.ToInt32(rdr["SpamScore"]); comment.WebSite = nvc["TitleUrl"]; // ApplicationPostType: Comment = 4; Trackback = 8; Int32 applicationPostType = Convert.ToInt32(rdr["ApplicationPostType"]); if (applicationPostType == 8) { comment.UserName = !string.IsNullOrEmpty(nvc["trackbackName"]) ? nvc["trackbackName"] : "TrackBack"; comment.IsTrackback = true; } else { comment.Email = rdr["Email"] as string; comment.UserName = nvc["SubmittedUserName"]; comment.IsTrackback = false; } comments.Add(comment); } rdr.Close(); } } conn.Close(); } return(comments); }
public List <MigratorPost> GetPosts() { // do some manual cleanup of the wordpress export _encodedFile = _encodedFile.Replace("<wp:comment_content>", "<wp:comment_content><![CDATA["); _encodedFile = _encodedFile.Replace("</wp:comment_content>", "]]></wp:comment_content>"); _encodedFile = _encodedFile.Replace("<wp:comment_content><![CDATA[<![CDATA", "<wp:comment_content><![CDATA["); _encodedFile = _encodedFile.Replace("]]>]]></wp:comment_content>", "]]></wp:comment_content>"); _encodedFile = _encodedFile.Replace("<wp:comment_author>", "<wp:comment_author><![CDATA["); _encodedFile = _encodedFile.Replace("</wp:comment_author>", "]]></wp:comment_author>"); _encodedFile = _encodedFile.Replace("<wp:comment_author><![CDATA[<![CDATA[", "<wp:comment_author><![CDATA["); _encodedFile = _encodedFile.Replace("]]>]]></wp:comment_author>", "]]></wp:comment_author>"); _encodedFile = _encodedFile.Replace("<wp:comment_author_url>", "<wp:comment_author_url><![CDATA["); _encodedFile = _encodedFile.Replace("</wp:comment_author_url>", "]]></wp:comment_author_url>"); _encodedFile = _encodedFile.Replace("<wp:comment_author_url><![CDATA[<![CDATA", "<wp:comment_author_url><![CDATA["); _encodedFile = _encodedFile.Replace("]]>]]></wp:comment_author_url>", "]]></wp:comment_author_url>"); _encodedFile = _encodedFile.Replace("<wp:comment_author_email>", "<wp:comment_author_email><![CDATA["); _encodedFile = _encodedFile.Replace("</wp:comment_author_email>", "]]></wp:comment_author_email>"); _encodedFile = _encodedFile.Replace("<wp:comment_author_email><![CDATA[<![CDATA", "<wp:comment_author_email><![CDATA["); _encodedFile = _encodedFile.Replace("]]>]]></wp:comment_author_email>", "]]></wp:comment_author_email>"); var posts = new List <MigratorPost>(); var comments = new List <MigratorComment>(); XmlDocument doc = new XmlDocument(); doc.LoadXml(_encodedFile); XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); mgr.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/"); mgr.AddNamespace("wp", "http://wordpress.org/export/1.0/"); mgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); XmlNode node = doc.SelectSingleNode("/rss/channel"); foreach (XmlNode itemNode in node.SelectNodes("item")) { if (itemNode.SelectSingleNode("wp:post_type", mgr).InnerText == "post" && itemNode.SelectSingleNode("wp:status", mgr).InnerText == "publish") { MigratorPost post = new MigratorPost(); post.PostID = Convert.ToInt32(itemNode.SelectSingleNode("wp:post_id", mgr).InnerText); post.Author = itemNode.SelectSingleNode("dc:creator", mgr).InnerText; post.Body = itemNode.SelectSingleNode("content:encoded", mgr).InnerText; post.CreatedOn = Convert.ToDateTime(itemNode.SelectSingleNode("pubDate").InnerText); post.Name = itemNode.SelectSingleNode("wp:post_name", mgr).InnerText; post.Subject = itemNode.SelectSingleNode("title").InnerText; // tags foreach (XmlNode catNode in itemNode.SelectNodes("category")) { if (catNode.Attributes["domain"] != null && catNode.Attributes["domain"].Value == "tag") { post.TagsAndCategories = new List <String>(); var tags = catNode.InnerText.Split(' '); foreach (string tag in tags) { post.TagsAndCategories.Add(tag); } } else { post.TagsAndCategories = new List <string>(); post.TagsAndCategories.Add(catNode.InnerText); } } post.IsPublished = true; // comments : these are going to be stored in cache for wordpress types foreach (XmlNode commentNode in itemNode.SelectNodes("wp:comment", mgr)) { if (commentNode.SelectSingleNode("wp:comment_approved", mgr).InnerText == "1") { MigratorComment comment = new MigratorComment(); comment.PostID = post.PostID; comment.Body = commentNode.SelectSingleNode("wp:comment_content", mgr).InnerText; comment.PublishedOn = Convert.ToDateTime(commentNode.SelectSingleNode("wp:comment_date", mgr).InnerText); comment.IPAddress = commentNode.SelectSingleNode("wp:comment_author_IP", mgr).InnerText; comment.WebSite = commentNode.SelectSingleNode("wp:comment_author_url", mgr).InnerText; comment.UserName = commentNode.SelectSingleNode("wp:comment_author", mgr).InnerText; comment.Email = commentNode.SelectSingleNode("wp:comment_author_email", mgr).InnerText; comment.IsPublished = true; comments.Add(comment); } } posts.Add(post); } } // add the comments to cache ZCache.MaxCache("MigratorComments", comments); return(posts); }
public List <MigratorPost> GetPosts() { string allXmlPosts = MergePostFiles(); string allXmlFeedback = MergeFeedbackFiles(); var posts = new List <MigratorPost>(); var comments = new List <MigratorComment>(); XmlDocument doc = new XmlDocument(); doc.Load(new StreamReader(allXmlPosts)); XmlDocument doc2 = new XmlDocument(); doc2.Load(new StreamReader(allXmlFeedback)); XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); XmlNode node = doc.SelectSingleNode("Posts", mgr); XmlNamespaceManager mgr2 = new XmlNamespaceManager(doc2.NameTable); XmlNode node2 = doc2.SelectSingleNode("Feedback", mgr2); //foreach (XmlNode catNode in node.SelectNodes("categories/category")) //{ // BlogMLTag t = new BlogMLTag(); // t.Id = catNode.Attributes["id"].Value; // if (catNode.SelectSingleNode("title") == null) // t.Description = catNode.Attributes["id"].Value; // else // t.Description = catNode.SelectSingleNode("title").InnerText; // tags.Add(t); //} int postId = 100; // grab the dasBlog mapping table from the cache if it already exists // so we can add to it, otherwise create a new object var permalinkMapping = ObjectManager.Get <List <PermalinkMap> >("dasBlogPermalinks"); if (permalinkMapping == null) { permalinkMapping = new List <PermalinkMap>(); } foreach (XmlNode itemNode in node.SelectNodes("Entries/Entry")) { if (itemNode.SelectSingleNode("IsPublic") == null || itemNode.SelectSingleNode("IsPublic").InnerText == "true") { MigratorPost post = new MigratorPost(); post.PostID = postId; postId++; post.LegacyID = itemNode.SelectSingleNode("EntryId").InnerText; post.Body = itemNode.SelectSingleNode("Content").InnerText; post.CreatedOn = Convert.ToDateTime(itemNode.SelectSingleNode("Created").InnerText); if (itemNode.SelectSingleNode("Categories") != null) { string categoryText = itemNode.SelectSingleNode("Categories").InnerText; categoryText = categoryText.Replace('|', ';'); var categories = categoryText.Split(';'); post.TagsAndCategories = new List <string>(); foreach (string c in categories) { if (post.TagsAndCategories.Contains(c) == false) { post.TagsAndCategories.Add(c); } } } if (itemNode.SelectSingleNode("Title") == null) { post.Name = ""; } else { post.Name = itemNode.SelectSingleNode("Title").InnerText; } if (itemNode.SelectSingleNode("Subject") == null) { post.Subject = post.Name; } else { post.Subject = itemNode.SelectSingleNode("Subject").InnerText; } post.IsPublished = true; // // tags // post.TagsAndCategories = new List<String>(); // foreach (XmlNode catNode in itemNode.SelectNodes("categories/category")) // { // string catId = catNode.Attributes["ref"].Value; // BlogMLTag cat = tags.Find(delegate(BlogMLTag t) // { // return t.Id == catId; // }); // if (cat != null) // post.TagsAndCategories.Add(cat.Description); // } // store the post id and name in a url map so we can look this up // in the dasBlog301 plugin PermalinkMap permalinkMap = new PermalinkMap(post.LegacyID, post.Name); if (permalinkMapping.Contains(permalinkMap) == false) { permalinkMapping.Add(permalinkMap); } posts.Add(post); } } ObjectManager.Save(permalinkMapping, "dasBlogPermalinks"); foreach (XmlNode commentNode in node2.SelectNodes("*", mgr2)) { if (commentNode.Name == "Trackings") { foreach (XmlNode trackingNode in commentNode.SelectNodes("*")) { MigratorComment comment = new MigratorComment(); MigratorPost p = posts.Find( delegate(MigratorPost c) { return(c.LegacyID.ToUpperInvariant() == trackingNode.SelectSingleNode("TargetEntryId").InnerText.ToUpperInvariant()); }); if (p != null) { comment.PostID = p.PostID; } comment.Body = trackingNode.SelectSingleNode("TargetTitle") != null ? trackingNode.SelectSingleNode("TargetTitle").InnerText : ""; comment.PublishedOn = Convert.ToDateTime("01/01/1900"); comment.WebSite = trackingNode.SelectSingleNode("PermaLink").InnerText; comment.UserName = trackingNode.SelectSingleNode("TargetTitle") != null ? trackingNode.SelectSingleNode("TargetTitle").InnerText : ""; comment.IsPublished = true; comment.IsTrackback = true; comments.Add(comment); } } if (commentNode.Name == "Comments") { foreach (XmlNode cmtNode in commentNode.SelectNodes("*", mgr2)) { MigratorComment comment = new MigratorComment(); MigratorPost p = posts.Find( delegate(MigratorPost c) { return(c.LegacyID.ToUpperInvariant() == cmtNode.SelectSingleNode("TargetEntryId").InnerText.ToUpperInvariant()); }); if (p != null) { comment.PostID = p.PostID; } if (cmtNode.SelectSingleNode("Content", mgr2) != null) { comment.Body = cmtNode.SelectSingleNode("Content", mgr2).InnerText; } comment.PublishedOn = Convert.ToDateTime(cmtNode.SelectSingleNode("Created", mgr2).InnerText); comment.WebSite = cmtNode.SelectSingleNode("AuthorHomepage", mgr2) != null ? cmtNode.SelectSingleNode("AuthorHomepage", mgr2).InnerText : ""; comment.UserName = cmtNode.SelectSingleNode("Author", mgr2).InnerText; comment.Email = cmtNode.SelectSingleNode("AuthorEmail", mgr2).InnerText; comment.IsPublished = true; comments.Add(comment); } } } // add the comments to cache ZCache.MaxCache("MigratorComments", comments); return(posts); }