成功从Bo-blog 1.32迁移至Movable Type 3.2
经过近两天的时间,把我以前Bo-Blog里的日志和评论都导了过来。老版本的blog现在为只读,地址为http://www.vetcafe.net/blog
因为从Bo-Blog到Movable Type没有成品的转换程序,我自己想了一些笨的办法基本解决了问题。
首先学习了下
http://www.sixapart.com/movabletype/docs/3.2/f_import_format/
MT数据导入的格式。
然后又看了看Bo-blog的代码,发现它使用的是phplib的模版引擎。google到phplib模版的介绍。然后按照MT的格式要求写了静态模版和利用模版导出文本的export.php文件,其中php文件是改写的bo-blog原有blog.php文件。这样按照export.php?job=art&articleid=a_20060309_090743这样的格式就能得到一个log的输出文本。然后又写了一个mkexp.php生成一个所有输出的url列表,相当于一个站点地图。在freebsd下用wget下载这个url列表里的所有东西,就得到了全部log的符合MT导入格式的文本。由于忘记了自己原来的Bo-blog太老,是gb2312编码的。第一次导入到utf-8里的MT的时候得到的是一堆乱码,于是又写了个shell脚本用iconv把所有的文本转成了UTF-8的。再次导入基本成功。但发现图片和附件原来都是相对路径的连接,在MT里无法正确显示,就再用sed把文本里的相对路径改成了全路径。最后导入就成了现在的样子:-)
因为从Bo-Blog到Movable Type没有成品的转换程序,我自己想了一些笨的办法基本解决了问题。
首先学习了下
http://www.sixapart.com/movabletype/docs/3.2/f_import_format/
MT数据导入的格式。
然后又看了看Bo-blog的代码,发现它使用的是phplib的模版引擎。google到phplib模版的介绍。然后按照MT的格式要求写了静态模版和利用模版导出文本的export.php文件,其中php文件是改写的bo-blog原有blog.php文件。这样按照export.php?job=art&articleid=a_20060309_090743这样的格式就能得到一个log的输出文本。然后又写了一个mkexp.php生成一个所有输出的url列表,相当于一个站点地图。在freebsd下用wget下载这个url列表里的所有东西,就得到了全部log的符合MT导入格式的文本。由于忘记了自己原来的Bo-blog太老,是gb2312编码的。第一次导入到utf-8里的MT的时候得到的是一堆乱码,于是又写了个shell脚本用iconv把所有的文本转成了UTF-8的。再次导入基本成功。但发现图片和附件原来都是相对路径的连接,在MT里无法正确显示,就再用sed把文本里的相对路径改成了全路径。最后导入就成了现在的样子:-)
经过近两天的时间,把我以前Bo-Blog里的日志和评论都导了过来。老版本的blog现在为只读,地址为http://www.vetcafe.net/blog
因为从Bo-Blog到Movable Type没有成品的转换程序,我自己想了一些笨的办法基本解决了问题。
首先学习了下
http://www.sixapart.com/movabletype/docs/3.2/f_import_format/
MT数据导入的格式。
然后又看了看Bo-blog的代码,发现它使用的是phplib的模版引擎。google到phplib模版的介绍。然后按照MT的格式要求写了静态模版和利用模版导出文本的export.php文件,其中php文件是改写的bo-blog原有blog.php文件。这样按照export.php?job=art&articleid=a_20060309_090743这样的格式就能得到一个log的输出文本。然后又写了一个mkexp.php生成一个所有输出的url列表,相当于一个站点地图。在freebsd下用wget下载这个url列表里的所有东西,就得到了全部log的符合MT导入格式的文本。由于忘记了自己原来的Bo-blog太老,是gb2312编码的。第一次导入到utf-8里的MT的时候得到的是一堆乱码,于是又写了个shell脚本用iconv把所有的文本转成了UTF-8的。再次导入基本成功。但发现图片和附件原来都是相对路径的连接,在MT里无法正确显示,就再用sed把文本里的相对路径改成了全路径。最后导入就成了现在的样子:-)
文件列表如下:
export.php
在blog根目录下
<?php
require("global.php");
if (!$page) $page=1;
if (empty($tem)) {
$tem=$blogtem; }
$navall=@file("$dirblog/cat.php");
$catnav="<a xhref=blog.php>首页</a>";
for ($i=0;$i<count($navall); $i++) {
$navtmp=explode("|",$navall[$i]);
$catnav.=" $columnstring <a xhref=blog.php?job=showcat&cat=$navtmp[1]>$navtmp[2]</a>";
}
$catnav.=" $columnstring <a xhref=blog.php?job=listall>全部</a>"; //获取分类导航
if ($login_status==1 || $allowvisitorreply==1) {
$catnav.=" $columnstring <a xhref=blog.php?job=guestbook>留言</a>"; //留言本
}
$catnav.= $newurl;
for ($i=0;$i<count($navall); $i++) {
$navtmp=explode("|",$navall[$i]);
$navt2=$navtmp[1];
$categories[$navt2]=$navtmp[2];
} //获取分类数组
//Now starting TEMPLATE CLASS
include_once("blog/template.php");
$t = new template(".");
if ($job=="art") { //阅读某文
$isfound=0;
if (empty($articleid)) $isfound=0;
else {
unset ($allfiles);
$allfiles=file("$dirblog/list.php");
$allfilescount=count($allfiles);
for ($i=0; $i<$allfilescount;$i++) {
$latest=explode("|",$allfiles[$i]);
$id=$latest[1];
if ($id==$articleid) {
$articlereplys=$latest[5];
$articlename=$latest[2];
$appendpagetitle=$articlename;
$catidd=$latest[4];
$week=date("w", $latest[3]);
$weekday=array("星期日", "星期一","星期二","星期三","星期四","星期五","星期六");
$articletime=date("m/d/Y H:i:s",$latest[3]+($timezone*3600));
$isfound=1;
$foundindex=$i; //获得当前序号
if ($isowner==1) {
$editurl="<a xhref=mblog_edit.php?articleid=$articleid>编辑</a>";
$delurl="| <a xhref=mblog_edit.php?articleid=$articleid&action=del>删除</a>";
$noreplyurl="| <a xhref=mblog_reply.php?articleid=$articleid&action=delallreply>清空回复</a>";
} else {
$editurl="";
$delurl="";
$noreplyurl="";
}
break;
}
}
}
if ($isfound<>1) {
wronginfo("没有找到指定文章,它可能已被删除。或者你没有指定文章。");
} else {
$article=getarticle("$dirblog/$id.art");
$thiscat="{$categories[$catidd]}";
$reurl="<a xhref=mblog_reply.php?articleid=$articleid>发表评论</a>($articlereplys)";
if ($foundindex!=0) { //上一篇的链接
$tmplast=explode("|", $allfiles[$foundindex-1]);
$quicktoprevious="<a xhref=blog.php?job=art&articleid=$tmplast[1]><font face='Webdings'>3</font>上一篇 ".msubstr($tmplast[2],0,40)."</a>";
} else $quicktoprevious=" ";
if ($foundindex!=($allfilescount-1)) {//下一篇的链接
$tmpnext=explode("|", $allfiles[$foundindex+1]);
$quicktonext="<a xhref=blog.php?job=art&articleid=$tmpnext[1]>下一篇 ".msubstr($tmpnext[2],0,40)."<font face='Webdings'>4</font></a>";
} else $quicktonext=" ";
$previousandnext="<table width=95% cellpadding= cellspacing=0><tr><td>$quicktoprevious</td><td align=right>$quicktonext</td></tr></table>";
$seereply="";
$t -> set_file("export", "blog/template/$tem/export.htm");
$t->set_var(array("articleid"=>$articleid, "articlereplys"=>$articlereplys, "seereply" =>$seereply, "articlename"=>$articlename, "articletime"=>$articletime, "article"=>$article, "editurl"=>$editurl, "delurl"=>$delurl, "noreplyurl"=>$noreplyurl, "newurl"=>$newurl, "reurl"=>$reurl, "thiscat"=>$thiscat,"previousandnext"=>$previousandnext, "appendpagetitle"=>$appendpagetitle,));
$t->parse("out","export",true);
$t->p("out");
print "\n";
if ($articlereplys==0 || !file_exists("$dirblog/$articleid.rep")) {
// $reply="此文还没有任何评论。"; $replyinfo="提示:";
// $t -> set_file("rebody", "blog/template/$tem/reply.htm");
// $t->set_var(array("reply"=>$reply, "replyinfo"=>$replyinfo));
// $t->parse("mainbodyout","rebody",true);
}
else {
unset ($tmp);
$tmp=file("$dirblog/$articleid.rep");
$areply=@readfromfile("$dirblog/$articleid.rpl");
$tmpreply=@explode("\n|rep|", $areply);
if(count($tmp)>$repperpage) {$countreps=$repperpage; $morepre="<br><br><div align=right><a xhref=blog.php?job=seereply&articleid=$articleid>还有更多评论,点击查看全部</a></div>";}
else $countreps=count($tmp);
for ($i=0; $i<$countreps;$i++) {
$rep=explode("|",$tmp[$i]);
$replyauthorandemail=@explode("θθ", $rep[2]);
$replyauthor=trim($replyauthorandemail[0]);
if (!empty($replyauthorandemail[1])) $replyauthor="<a xhref=mailto:$replyauthorandemail[1] title='给评论者发信'>$replyauthor</a>";
$replyid=$i;
$week=date("w", $rep[3]);
$weekday=array("星期日", "星期一","星期二","星期三","星期四","星期五","星期六");
$replytime=date("m/d/Y H:i:s",$rep[3]+($timezone*3600));
$replyip=$rep[5];
$reply=getreply($tmpreply[$replyid]);
if ($i==($countreps-1)) $reply.=$morepre;
$replyinfo=$replyauthor." 在 ".$replytime." 评论:";
if ($isowner==1) $delreply="[<a xhref=mblog_reply.php?action=delreply&replyid=$replyid&articleid=$articleid>删除</a>]";
$t = new template(".");
$t -> set_file("rebody", "blog/template/$tem/exportr.htm");
$t->set_var(array("replyauthor"=>trim($replyauthorandemail[0]), "replytime"=>$replytime,"replyip"=>$replyip,"replyauthorandemail"=>$replyauthorandemail[1],"replyinfo"=>$reply));
$t->parse("out1","rebody");
$t->p("out1");
print "\n";
}
}
}
}
print "--------";
?>
模版文件
在你所用的模版的目录下
export.htm
--------
TITLE:{articlename}
DATE:{articletime}
CATEGORY:{thiscat}
-----
BODY:
{article}
-----
exportr.htm
COMMENT:
AUTHOR:{replyauthor}
DATE:{replytime}
IP:{replyip}
EMAIL:{replyauthorandemail}
{replyinfo}
-----
生成URL列表的mkexp.php
在blog根目录下
<?php
require("global.php");
ob_start();
$all=@file("$dirblog/list.php");
for ($i=0; $i<count($all); $i++) {
$tmp=explode("|", $all[$i]);
$theurl="$weburl/blog.php?job=art&articleid=$tmp[1]";
echo $theurl;
echo "\n";
}
$xml_file = fopen("exportlist", "w");
fwrite($xml_file, ob_get_contents());
fclose($xml_file);
ob_end_clean();
header("Location:blog.php");
?>
转utf-8的shell脚本
#!/bin/sh
for i in *
do
iconv -f gbk -t UTF-8 $i >tmp
cp tmp $i
done
因为从Bo-Blog到Movable Type没有成品的转换程序,我自己想了一些笨的办法基本解决了问题。
首先学习了下
http://www.sixapart.com/movabletype/docs/3.2/f_import_format/
MT数据导入的格式。
然后又看了看Bo-blog的代码,发现它使用的是phplib的模版引擎。google到phplib模版的介绍。然后按照MT的格式要求写了静态模版和利用模版导出文本的export.php文件,其中php文件是改写的bo-blog原有blog.php文件。这样按照export.php?job=art&articleid=a_20060309_090743这样的格式就能得到一个log的输出文本。然后又写了一个mkexp.php生成一个所有输出的url列表,相当于一个站点地图。在freebsd下用wget下载这个url列表里的所有东西,就得到了全部log的符合MT导入格式的文本。由于忘记了自己原来的Bo-blog太老,是gb2312编码的。第一次导入到utf-8里的MT的时候得到的是一堆乱码,于是又写了个shell脚本用iconv把所有的文本转成了UTF-8的。再次导入基本成功。但发现图片和附件原来都是相对路径的连接,在MT里无法正确显示,就再用sed把文本里的相对路径改成了全路径。最后导入就成了现在的样子:-)
文件列表如下:
export.php
在blog根目录下
<?php
require("global.php");
if (!$page) $page=1;
if (empty($tem)) {
$tem=$blogtem; }
$navall=@file("$dirblog/cat.php");
$catnav="<a xhref=blog.php>首页</a>";
for ($i=0;$i<count($navall); $i++) {
$navtmp=explode("|",$navall[$i]);
$catnav.=" $columnstring <a xhref=blog.php?job=showcat&cat=$navtmp[1]>$navtmp[2]</a>";
}
$catnav.=" $columnstring <a xhref=blog.php?job=listall>全部</a>"; //获取分类导航
if ($login_status==1 || $allowvisitorreply==1) {
$catnav.=" $columnstring <a xhref=blog.php?job=guestbook>留言</a>"; //留言本
}
$catnav.= $newurl;
for ($i=0;$i<count($navall); $i++) {
$navtmp=explode("|",$navall[$i]);
$navt2=$navtmp[1];
$categories[$navt2]=$navtmp[2];
} //获取分类数组
//Now starting TEMPLATE CLASS
include_once("blog/template.php");
$t = new template(".");
if ($job=="art") { //阅读某文
$isfound=0;
if (empty($articleid)) $isfound=0;
else {
unset ($allfiles);
$allfiles=file("$dirblog/list.php");
$allfilescount=count($allfiles);
for ($i=0; $i<$allfilescount;$i++) {
$latest=explode("|",$allfiles[$i]);
$id=$latest[1];
if ($id==$articleid) {
$articlereplys=$latest[5];
$articlename=$latest[2];
$appendpagetitle=$articlename;
$catidd=$latest[4];
$week=date("w", $latest[3]);
$weekday=array("星期日", "星期一","星期二","星期三","星期四","星期五","星期六");
$articletime=date("m/d/Y H:i:s",$latest[3]+($timezone*3600));
$isfound=1;
$foundindex=$i; //获得当前序号
if ($isowner==1) {
$editurl="<a xhref=mblog_edit.php?articleid=$articleid>编辑</a>";
$delurl="| <a xhref=mblog_edit.php?articleid=$articleid&action=del>删除</a>";
$noreplyurl="| <a xhref=mblog_reply.php?articleid=$articleid&action=delallreply>清空回复</a>";
} else {
$editurl="";
$delurl="";
$noreplyurl="";
}
break;
}
}
}
if ($isfound<>1) {
wronginfo("没有找到指定文章,它可能已被删除。或者你没有指定文章。");
} else {
$article=getarticle("$dirblog/$id.art");
$thiscat="{$categories[$catidd]}";
$reurl="<a xhref=mblog_reply.php?articleid=$articleid>发表评论</a>($articlereplys)";
if ($foundindex!=0) { //上一篇的链接
$tmplast=explode("|", $allfiles[$foundindex-1]);
$quicktoprevious="<a xhref=blog.php?job=art&articleid=$tmplast[1]><font face='Webdings'>3</font>上一篇 ".msubstr($tmplast[2],0,40)."</a>";
} else $quicktoprevious=" ";
if ($foundindex!=($allfilescount-1)) {//下一篇的链接
$tmpnext=explode("|", $allfiles[$foundindex+1]);
$quicktonext="<a xhref=blog.php?job=art&articleid=$tmpnext[1]>下一篇 ".msubstr($tmpnext[2],0,40)."<font face='Webdings'>4</font></a>";
} else $quicktonext=" ";
$previousandnext="<table width=95% cellpadding= cellspacing=0><tr><td>$quicktoprevious</td><td align=right>$quicktonext</td></tr></table>";
$seereply="";
$t -> set_file("export", "blog/template/$tem/export.htm");
$t->set_var(array("articleid"=>$articleid, "articlereplys"=>$articlereplys, "seereply" =>$seereply, "articlename"=>$articlename, "articletime"=>$articletime, "article"=>$article, "editurl"=>$editurl, "delurl"=>$delurl, "noreplyurl"=>$noreplyurl, "newurl"=>$newurl, "reurl"=>$reurl, "thiscat"=>$thiscat,"previousandnext"=>$previousandnext, "appendpagetitle"=>$appendpagetitle,));
$t->parse("out","export",true);
$t->p("out");
print "\n";
if ($articlereplys==0 || !file_exists("$dirblog/$articleid.rep")) {
// $reply="此文还没有任何评论。"; $replyinfo="提示:";
// $t -> set_file("rebody", "blog/template/$tem/reply.htm");
// $t->set_var(array("reply"=>$reply, "replyinfo"=>$replyinfo));
// $t->parse("mainbodyout","rebody",true);
}
else {
unset ($tmp);
$tmp=file("$dirblog/$articleid.rep");
$areply=@readfromfile("$dirblog/$articleid.rpl");
$tmpreply=@explode("\n|rep|", $areply);
if(count($tmp)>$repperpage) {$countreps=$repperpage; $morepre="<br><br><div align=right><a xhref=blog.php?job=seereply&articleid=$articleid>还有更多评论,点击查看全部</a></div>";}
else $countreps=count($tmp);
for ($i=0; $i<$countreps;$i++) {
$rep=explode("|",$tmp[$i]);
$replyauthorandemail=@explode("θθ", $rep[2]);
$replyauthor=trim($replyauthorandemail[0]);
if (!empty($replyauthorandemail[1])) $replyauthor="<a xhref=mailto:$replyauthorandemail[1] title='给评论者发信'>$replyauthor</a>";
$replyid=$i;
$week=date("w", $rep[3]);
$weekday=array("星期日", "星期一","星期二","星期三","星期四","星期五","星期六");
$replytime=date("m/d/Y H:i:s",$rep[3]+($timezone*3600));
$replyip=$rep[5];
$reply=getreply($tmpreply[$replyid]);
if ($i==($countreps-1)) $reply.=$morepre;
$replyinfo=$replyauthor." 在 ".$replytime." 评论:";
if ($isowner==1) $delreply="[<a xhref=mblog_reply.php?action=delreply&replyid=$replyid&articleid=$articleid>删除</a>]";
$t = new template(".");
$t -> set_file("rebody", "blog/template/$tem/exportr.htm");
$t->set_var(array("replyauthor"=>trim($replyauthorandemail[0]), "replytime"=>$replytime,"replyip"=>$replyip,"replyauthorandemail"=>$replyauthorandemail[1],"replyinfo"=>$reply));
$t->parse("out1","rebody");
$t->p("out1");
print "\n";
}
}
}
}
print "--------";
?>
模版文件
在你所用的模版的目录下
export.htm
--------
TITLE:{articlename}
DATE:{articletime}
CATEGORY:{thiscat}
-----
BODY:
{article}
-----
exportr.htm
COMMENT:
AUTHOR:{replyauthor}
DATE:{replytime}
IP:{replyip}
EMAIL:{replyauthorandemail}
{replyinfo}
-----
生成URL列表的mkexp.php
在blog根目录下
<?php
require("global.php");
ob_start();
$all=@file("$dirblog/list.php");
for ($i=0; $i<count($all); $i++) {
$tmp=explode("|", $all[$i]);
$theurl="$weburl/blog.php?job=art&articleid=$tmp[1]";
echo $theurl;
echo "\n";
}
$xml_file = fopen("exportlist", "w");
fwrite($xml_file, ob_get_contents());
fclose($xml_file);
ob_end_clean();
header("Location:blog.php");
?>
转utf-8的shell脚本
#!/bin/sh
for i in *
do
iconv -f gbk -t UTF-8 $i >tmp
cp tmp $i
done
评论:
这个功能一定牛得很吧
Posted by: sunu | 2006年03月10日 上午11时00分
我也不知道强不强,反正能用就行啦.
Posted by: sleetdrop | 2006年03月10日 下午04时40分