最近把以前的wordpress建的博客删了,用textpattern重新建了一个独立博客,http://www.shenlongbin.com,可以把它当成博客园上内容的备份,但导入我以前的一大堆文章非常有难度。经过一番折腾,终于把博客园的内容导出为文本,再导入到textpattern中了。
第一步:C#
编程把博客园内容读取出来
博客园的管理端提供了博客备份功能,可以生成一个学习了metaweblog编程知识,内部采用了很多地方都引用了
博客园的metaweblog的访问接口可以访问:
http://www.cnblogs.com/speeding/services/metaweblog.aspx,从而获得详细的描述信息。实际上在
我们单位访问互联网要用到代理,还要密码验证,所以关键代码得添加几行:
MetaWeblogCnblogs blog = new MetaWeblogCnblogs();
blog.Url = "http://www.cnblogs.com/speeding/services/metaweblog.aspx";
Uri proxyURI = new Uri("http://myproxyhost.myproxydomain.com:80");
System.Net.WebProxy proxyObject = new System.Net.WebProxy(proxyURI, false);
proxyObject.Credentials = new System.Net.NetworkCredential("proxy_username", "proxy_password");
blog.Proxy = proxyObject;
Post[] posts = blog.getRecentPosts("speeding", "speeding", "my_blog_admin_password", 50);
这样就可以获得博客内容了,但需要再调用getPost才能获得详细的信息,这里就可以看到摘要和关键词了。
Post detail = blog.getPost(post.postid.ToString(), "speeding", "my_blog_admin_password");
第二步:利用pandoc把html内容转换为textile标记
Post中的description中都是html标记,而textpattern默认的标记语言是textile,所以需要将其转换为textile,关于textile标记的百科知识见这里。
这里要用到著名的pandoc了,这个神奇的工具竟然是用haskell写成了,以前学习haskell语言的时候以为只是一种教学语言,真有人写出了实用程序!
把博客中内容写入temp.html文件中,再用下面的命令行就可以转换了。
pandoc.exe -t textile -o textile.txt temp.html
主要代码:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "..\\..\\pandoc.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "-t textile -o textile.txt temp.html";
using (Process exeProcess = Process.Start(startInfo)) {
exeProcess.WaitForExit();
}
return File.ReadAllText("textile.txt");
第三步:生成import.txt文件
对几百篇博客文章循环处理,追加到import.txt文件即可,最后的文件用UTF8保存。
Movable Type博客的文本格式说明文档可以看这里: https://movabletype.org/documentation/appendices/import-export-format.html#example
简单说明一下:文件用UTF8编码存储,前面几行是单行文本信息,后面的BODY和EXCERPT是多行文本,多行文本需要用5个短横分开,每篇文章用8个短横分开,最简单的一个例子:
TITLE: A dummy title
AUTHOR: shenlongbin
DATE: 01/31/2012 03:31:05 PM
PRIMARY CATEGORY: reading
CATEGORY: reading
-----
BODY:
This is the body.
Another paragraph here.
Another paragraph here.
-----
EXCERPT:
See, this entry does not have an extended piece; but it does have an excerpt. It is special.
-----
--------
里面的日期格式有要格要求,关键代码:
IFormatProvider culture = new CultureInfo("en-US", true);
string date = post.dateCreated.ToString("dd/MM/yyyy hh:mm:ss tt", culture); // 08/05/2002 04:05:23 PM
第四部:上传import.txt文件,导入
文件必须放在public_html/textpattern/include/import
目录下,并且文件名一定是
import.txt。
实际上textpattern的管理端可以导入Movable Type(File/MySQL)、Blogger、b2、WordPress等格式的博客,但支持文本文件导入的只有Movable Type和Blogger。
在textpattern的管理界面上执行import操作,导入成功时会出现博客文章的列表。
其它
以前都是用blog_backup这个小程序来备份我的博客,现在发现用这个小程序可以备份得更为彻底。一番折腾,学到了这些知识点:movableType, metaweblog,
原标题:把博客园的博客导出为MovableType的文本格式
关键词: