« My Notification Area | 首页 | WYSIWYG的梦想--WRITELY »

成功从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里的日志和评论都导了过来。老版本的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="&nbsp;";
    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="&nbsp";
    $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


引用:

本篇引用地址:
http://www.vetcafe.net/cgi-bin/mt3/mt-tb.cgi/2465

评论:

这个功能一定牛得很吧

我也不知道强不强,反正能用就行啦.

发表评论

(如果您以前没在这里发表过评论,也许您发表的评论需要Blog主人的审核才能显示在这里,感谢您的静候。)