冰古blog » wordpress » 2006 » 04 » 24 » wordpress2.0 rss import文件分析及oblog导入

wordpress2.0 rss import文件分析及oblog导入

今天(昨天写好,本来打算在wplog上发的,但那个DH空间老是503死活发不了,只好发到这里了。)帮一位网友将oblog备份xml文件转换成适用于wordpress2.0 import的(伪)rss文件。
将此格式写出,方便大家搬家到wordpress。

<item>
    <title>标题</title>
    <pubdate>日期</pubdate><!-- post的日期,可选 -->
    <dc :date>备选日期</dc><!-- pubdate的备选项。如果两个都没有,将使用导入时日期时间 -->
    <category>目录</category><!-- post的目录,可选。 -->
    <dc :subject>备选目录</dc><!-- category的备选项。如都无,使用options中的Default post category -->
    <guid .+?>post的permalink</guid><!-- 可选 -->
    <content :encoded>内容</content>
    <description>备选内容</description>
</item>

由此,能用于wordpress2.0 import的最简xml格式为:


标题 日期
内容

既然知道了import所需文件的格式,转换工作也就变得简单了。
当你有其他blog的备份xml文件时,通过记事本等工具将相应内容的标签改为所需标签即可!
例如oblog:

1、打开oblog的备份文件
oblog备份转换成适用于wordpress导入的rss文件

2、在编辑处选择”替换”
oblog备份转换成适用于wordpress导入的rss文件

3、在相应的位置填上适当的内容(oblog为:log替换为item]]> 替换为 ]]></content><![CDATA[#isubb 替换为 <content:encoded><![CDATA[),按”全部替换”
oblog备份转换成适用于wordpress导入的rss文件

4、到了此步,基本已经完成。但oblog备份的”post内容”是没有任何html标签格式的,就这样导入,blog上显示必定成一团。这时我们可以写一小段php代码,使post内容具有一定的格式(下列php代码可在”post内容”分段处添加<br />):

< ?php
$xml = "";
$f = fopen( 'oblog.xml', 'rb' ); //oblog.xml为刚才转换后的oblog备份文件
while( $data = fread( $f, 4096 ) ) { $xml .= $data; }
fclose( $f );
 
preg_match_all( "/\<item\>(.*?)\< \/item\>/s", $xml, $items );

foreach( $items[1] as $item ){
$item = str_replace ("\r\n", '<br />', $item);
echo '<item>'.$item."</item>\r\n";
}
?>

5、将上面代码保存为php文件,运行之,将生成文档保存为xml文件,到此时转换完成!

哦,对了。oblod备份的编码为“gb2312”,转成“UTF-8”,只需在记事本中“另存为”,然后把编码设为“UTF-8”后保存就行了。

29 Responses to “wordpress2.0 rss import文件分析及oblog导入”

  1. […] 分类里 然后 你就要不停的整理。。。。 参考文章:冰古的《wordpress2.0 rss import文件分析及oblog导入》 Posted in 技术|共享 […]

  2. 0000 says:

    发不了尖括弧?
    </content:encoded>
    不是</content>

  3. 0000 says:

    LZ漏了一点
    要不导进去是没有内容的

  4. 冰古 says:

    第三应该是这样的:

    oblog为:log替换为item,]]> 替换为 ]]></content:encoded>,<![CDATA[#isubb 替换为 <content:encoded><![CDATA[

    当时不知道为什么就把后面那个:encoded漏掉了

  5. akay says:

    不好意思,我再补充一下:

    你说的替换第三种:

  6. akay says:

    冰古,你好,因为以前写的博是以oblog程序搭建的,所以一直在想找这样的能将OBLOG导入到WP的方法,不过今天照你所说的做了,导入成功,但是每篇文章只有题目而没有内容,这是怎么回事啊?望赐教!

  7. […] oblog的生之逢时,使之成为最普遍的BSP搭建系统。这几天一直考虑帮一位同学把数据从他的oblog转入wordpress。网络上最容易搜索到的是冰古写的一篇教程,但照着做了结果只导入题目却不能显示内容。在转悠一圈没有找到直接的转换工具后,决定自己依葫芦画飘,比较一下二者rss文件的结构。 用oblog自带的功能备份日志以xml格式导出(最好转换成UTF-8),用写字板打开,现在需要改动以下几处: log替换为item 替换为 +0000 ]]>替换为]]> […]

  8. 冰古 says:

    嗯,id缓存是数据库的。

  9. WindWood says:

    id缓存其实应该是数据库的,因为对于自动增长的字段数据库会记住下一个值应该是什么。而wp的导入问题是在导入程序上,因为数据库直接操作insert不会不连续,用发post的UI操作也不会不连续,就是导入的时候发生不连续。

  10. 冰古 says:

    @WindWood,

    wp的rss导入程序还是完全根据xml的存储顺序递增

    的确是这样的。

    wordpress好像对id有缓存的,即使你删除了原来的post(or page),增加post(or page)时,它还是从原id号递加的。当然不是没有办法解决的,参照这篇post -> 让comments的id号连续起来

    当然我这篇post只是说明一下思路,没有考虑id的顺序问题。

  11. WindWood says:

    关于导入时实现文章id号与以前的一致
    原先指望用来控制文章id号与之前文章的一致,可是后来发现,wp的rss导入程序还是完全根据xml的存储顺序递增(如果错了,请指正)。因此专门写了一个php程序,将原先的233条记录的xml补充成450条记录的xml:将xml导入DOM;然后根据guid为下标将每一个item存入一个数组;接着遍历数组,创建新的空白item填充空的数组单元;最后删除所有DOM里的item,从数组里依序appendChild到item。把DOM保存成新的xml就成功了。

    ❓ 问题来了,在进行导入的时候,导入的文章会从3开始编号(如果安装时不创建样例page,则从2开始编号)。直接数据库操作,id是对的,可如果通过源代码里$wpdb->query执行操作完,得到的id就是错的了。

    目前还是没明白该如何完美的解决这个问题。只能用这样的方案:首先取消安装时自动安装post和page,其次将xml编号为1的文章去掉,然后导入xml,最后通过mysql直接添加第一篇文章。

  12. […] 冰古blog查看数最多的2006年的posts是: 1、wordpress2.0 rss import文件分析及oblog导入 (3498 views) 2、昨天阅读 (3364 views) 3、更新blogbus to wordpress转换程序 (1408 views) 4、我使用的plugins (1114 views) 5、从blogbus跳转到WordPress (916 views) Tags:mysql , proxy , 总结 […]

  13. […] http://bingu.net/blog/326/wordpress2-rss-import-file-format-and-oblog-import/  This entry is filed under 未分类. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site. Leave a Reply […]

  14. […] Posted in Tech articles | Trackback | del.icio.us | Top OfPage […]

  15. thisiswiki says:

    能否把你的Gtalk/MSN给我,我们直接交流。好吗?

  16. thisiswiki says:

    >>>>> POST 443475 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Present!
    2004-05-12 03:40:36
    ————————————————————————

    两份特别的礼物,really a world full of uncertainty and coincidence.

    >>>>> POST 443469 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    情深说话未曾讲
    2004-05-22 21:20:50
    ————————————————————————

    这个名字应该是。。。

  17. thisiswiki says:
    &gt;&gt;&gt;&gt;&gt; POST     443475 &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;
    Present!
    2004-05-12 03:40:36
    ------------------------------------------------------------------------
    
    两份特别的礼物,让我不知道该表什么情。。。
    
    
    
     It&#39;s really a world full of uncertainty and coincidence.
    
    
    
    &gt;&gt;&gt;&gt;&gt; POST     443469 &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;
    情深说话未曾讲
    2004-05-22 21:20:50
    ------------------------------------------------------------------------
    
    这个名字应该是

    以上,“Present!”是标题,然后是时间,然后下面的是内容

  18. Bingu says:

    thisiswiki,
    你可否发一份歪酷的备份文件给我呢?
    因为我没用过歪酷的blog。

  19. thisiswiki says:

    冰古能不能提供一下歪酷blog的搬迁呢?它们导出的格式是txt档的,但是没有如oblog般的中间字符。

  20. Bingu says:

    WindWood,
    谢谢指正
    id号好像比较难实现吧,因为导入时是按导入顺序递加id的。
    除非你的备份是顺序的,wp里也没有其他post。

  21. WindWood says:

    很感谢,参考你的格式,可以成功转化我的网页备份了。

    开始遇到问题:rss导入的时候,rss里的文章时间是
    August 26, 2003 11:31 PM
    可是导入后在系统里看到的文章时间就是
    2003-08-26 3:31:00 pm了。

    后来看了一下源代码,似乎和
    $post_date = gmdate(‘Y-m-d H:i:s’, $post_date);

    有关系,把gmdate改成date就好了,呵呵。

    现在唯一的缺憾就是如何让文章保持原来的文章号了。

  22. […] 最后,这样导入后还是有问题,一般是日志的第一段丢失,以及最后加上了"]]>" 等等。要解决这个问题只能先修改RSS备份文件,参考这里: http://bingu.net/blog/326/wordpress2-rss-import-file-format-and-oblog-import/ 当然,原来水木日志上的一些字体和颜色设置,导入到都实效了,这个也没辙的啦。 期间发现,my donews 的wordpress系统也是支持导出的,见这里: http://my.donews.com/ak47/2006/09/12/mydonews_export/ […]

  23. 冰山一角 says:

    链接叉烧包 2006.5.17

    冰古分析了wordpress2.0 rss import文件及oblog导入

  24. 冰古 says:

    不好意思啊,因为我把adsl停了,现在上网极不方便,你所说的情况现在可能不能帮你解决。

    可能是第一行代码中多了一个空格(就是?号后的空格),你删掉试试。:wink:

  25. wayhome says:

    为什么我运行这段php代码时是直接显示代码的内容呢?
    运行你的另外一个blogbus2wp的程序是因为你打包好的,就很正常

  26. […]   wordpress2.0 rss import文件分析及oblog导入。 […]

  27. Bingu says:

    怪我没有讲清楚,那步有三个地方要改:
    log 替换为 item

    ]]> 替换为 ]]></content>

    <![CDATA[#isubb 替换为 <content:encoded><![CDATA[

  28. boywfh says:

    抱歉,我还是有很多不明白的地方。是不是只需要替换log到item?
    因为我的xml备份文件中有些url里面包含了log这个字符,所以我替换的时候用的是到和到,但是导入wp之后,出现的问题是,只有标题,而没有内容。。。

Leave a Reply