使用metablog迁移博客园的文章

有时候我们希望能将自己所有博客园的文章迁移到其他的博客site,大家可能最先想到的就是metablog,没错,只有它了。
首先搜索了一下,很容易搜到老赵这篇文章 "一次批量修改博客文章的经验".  我个人不懂F#,也不太喜欢老赵的做法,就重新考虑了一下。

和老赵有一样的问题, metaBlog的API中的getRecentPosts并无法取得所有的文章,而且速度极慢,中间不能实现异步,无法看到即时结果。 后来无意发现将博客园所有文章备份后所生成的xml中其实已经包含了所有的文章id,这是个好兆头。
接下来工作就简单了,分析该xml文件,取得所有文章id,然后调用getPost分别取每篇文章的内容,然后迁移到其他的博客地址,这样就可以即时看到每一篇的迁移结果了。

下边是其中主要代码

                       XmlDocument docment = new XmlDocument();
                        docment.Load("c:\\blogMigr\\CNBlogs_BlogBackup_1_200606_201006 - Copy.xml");
                        XmlNodeList list = docment.SelectNodes("/rss/channel/item");

                        int nCount = 0;

                        foreach (XmlNode item in list)
                        {
                            nCount++;
                            string link = item.SelectSingleNode("link").InnerText;
                            string postId = link.Substring(link.LastIndexOf('/') + 1);
                            postId = postId.Substring(0, postId.IndexOf('.'));

                            Post postOld = oldSpace.getPost(postId, oldUsername, newPassword);

                            if ("" == postOld.title)
                            {
                                Console.WriteLine("Maybe this is a draft!");
                                oldSpace.deletePost(String.Empty, "" + postOld.postid, oldUsername, oldPassword, true);
                                Console.WriteLine("Delete draft from old Space, OK!");
                                continue;
                            }

                            Post postNew = new Post();
                            postNew.title = postOld.title;
                            postNew.dateCreated = postOld.dateCreated;
                            postNew.categories = postOld.categories;
                            postNew.description = postOld.description;
                            string newId = newSpace.newPost("Myblog", newUsername, newPassword, postNew, true);

                            lblStatus.Invoke(new processLable(delegate()
                            {
                                lblStatus.Text = string.Format("The application have processed {0} postes. {1}", nCount, postNew.title);
                            }
                            ));
                        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值