首页 > 技术, 杂记 > 搬家日记(X-Space到WordPress)

搬家日记(X-Space到WordPress)

2009年2月8日

搬家工作基本完成,颇发扬了自已动手,丰衣足食的精神,记录一下吧。

我的blog原先架在Discuz!的附属的Supesite的X-Space上,目的是转到现在的wordpress上来。本来以为会有现成的blog搬家工具,结果各处一搜,竟然都不支持X-Space自已host的这种blog,唯一看到一个叫blogbak的,也只能把X-Space上的blog导到它自己的51某某站上。
那没有现成的工具,那就用RSS吧,结果发现X-Space不能把日志导出成RSS2.0的文件,作罢。那,从WP这边导入X-Space的rss的feed总是万能的了吧,结果再一次被X-Space的RSS输出打击掉,它只输出一定长度的文章,结果长的文章的后半部分就被截掉了,而且不能通过设置改变这个行为。。。。

没办法,自己写程序搬家好了。。。不过也好,这样comment和commentor的联系方式什么的都能留下,否则我就放弃他们了
(注:上面的功能新版的X-Space好像已经有了,不过我的版本很老。。。)

我写的这些代码适用于满足以下条件的人:
1.是自己host的X-Space和wordpress,自己的主机或者虚拟主机都行,专门的博客提供商(BSP)就不行了
2.X-Space和wordpress在同一个数据库中(一般虚拟主机都这样),如果不是,就得自己改改代码了
3.X-Space的文字编码是gb2312,wordpress的是UTF-8(话又说回来,要是编码相同,连程序都不用了,完全靠SQL也能完成搬家)

搬家步骤:

  1. 正常地安装wordpress
  2. 首先,要小改一下X-Space在数据库里的supe_spacecomments表,在它之中加一列integer列,叫wpID,用于保存原blog里日志的ID和新WP的blog中日志的ID的对应
  3. 打开本文附件convertscript.zip里的两个PHP文件,把里面的数据名、用户名密码等改成实际的值,上传到自己的虚拟主机上
  4. 执行convertArticle.php,把原有的日志转换到WP中(新文章的作者会是默认的id=1,也就是admin用户)
  5. 执行convertComment.php,把原有的comment也转到WP中
  6. 跑一下这句sql: UPDATE `wp_posts` SET `post_name` = md5( `post_content` ) WHERE `post_name` = “”, 用来给每篇日志生成一个post_name,用在该文的静态地址中

至此,搬家基本就算是完成了,不过有点美中不足,就是WP的wp_posts表中有一列叫comment_count,算是个冗余的计数信息吧。默认它是0的,我写了下面的sql以填写它的值:

UPDATE `wp_posts` AS w
INNER JOIN
(
    SELECT p.`ID` AS `wpID` , count( * ) AS `comment_count`
    FROM `wp_posts` AS p
    INNER JOIN `wp_comments` AS c ON p.`ID` = c.`comment_post_ID`
    GROUP BY p.`ID`
) AS ct
ON w.`ID`=ct.`wpID`
SET w.`comment_count`=ct.`comment_count`

但是我的512j的服务器上mysql是4.0.22版本,还不支持子查询。。。。
不过,这个字段有没有用我也不确定,因为各种地方显示的comment计数都是正常的。。。

最后,小感慨一下。以后挑blog建的时候,要先研究好这东西的接口怎么样,否则就容易上X-Space这样的贼船了。。。

技术, 杂记 , , ,

  1. zikki
    2009年2月8日23:56 | #1

    你的tag cloud居然是linux最大……

  2. 2009年3月28日23:50 | #2

    楼主你好,我用了你的方法,但是转换过去的数据都是乱码。我费了很大劲把我的数据编码转换成gbk,但还是出问题。

    如果我的数据直接是utf8的,能怎样用sql直接转了?我不是很懂sql。想请教一下。 还是用这程序的话,是否直接去掉iconv,但我测试了下还是不行。

  3. 2009年3月30日09:55 | #3

    @三毛
    如果确定你的X-Space的存储用的是UTF-8,那么把下面两行里的iconv去掉就成了:
    $subject = addslashes(iconv(“GB2312″, “UTF-8″, $arr['subject']));
    $message = addslashes(iconv(“GB2312″, “UTF-8″, $arr['message']));
    变为:
    $subject = addslashes($arr['subject']);
    $message = addslashes($arr['message']);

    你说你直接去掉iconv仍然是乱码,我建议你检查一下你数据表的编码是什么,可能是你连数据库时即用的默认编码与数据库不匹配。知道数据表的编码后可以在mysql_connect()连上数据库以后紧跟一句:SET NAMES ‘gb2312′,用以指明编码(gb2312改为实际情况)
    可以参考:http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

  4. 2009年3月30日13:03 | #4

    我试过将所有涉及编码的都设置为utf8,数据库版本5.0.51a-c,MySQL 字符集: UTF-8 Unicode (utf8),连接校对是utf8_general_ci,那个库的连接校对也是utf8_general_ci,导出的数据用ultraedit打开是utf8的,然后也是像你说的这样去掉iconv,但是还是抓出来的数据是乱码~~

    我现在用的方法就是直接用sql先插入message和subject
    INSERT INTO `wp_posts` ( `post_content`, `post_title`) SELECT b.message,i.subject FROM `supe_spaceitems` as i INNER JOIN `supe_spaceblogs` as b WHERE i.itemid=b.itemid AND i.uid=2
    然后用你的程序update里面的$timeLocal.和.$timeGMT.

    好麻烦~~ 楼主我能否和你用IM联系下?Orz..
    QQ 32584058 Gtalk:sanmao@ffbbs.net

  5. 2009年3月30日17:35 | #5

    还有这句 UPDATE `wp_posts` SET `post_name` = md5( `post_content` ) WHERE `post_name` = “”
    mysql里跑不了~

  6. 2010年10月17日21:46 | #6

    找wordpress 迁移到X-SPACE 的。找到了你这篇 继续找

  7. dakucai
    2011年6月29日15:03 | #7

    loudly,您好,附件已经不能下载,能分享下吗,谢谢!

  8. 2015年8月10日21:05 | #8

    the jokesters 2015 – pandas the journey home 2014, the beat beneath my feet.

  9. 2015年10月19日03:32 | #9

    fair play lottery csgo – css lottery, play and win.

  10. 2016年4月26日04:15 | #10

    airports mci flights eldoret to nairobi airline issues airport bfi flights nsw south coast cheap airline tickets manila to boracay cheap tickets volaris airline discount tickets harlem globetrotters flights from ybr to ydn airlines dreamliner discount tickets flamingo land
    airports in sr find air asia x flights psp flight information defence hotel reservation service contact number search flight location cheap tickets momondo flight fk-301 dbl airports operations hna airlines group airport oaks motel online hotel booking srinagar airport tax information airport bki discount tickets old tucson studios cheap air tickets to fuzhou
    cheap air tickets udaipur to delhi flights from pfo to lon cm airlines code airport klia limo airlines trends ultralight airports airline rules jln flights airline bike fees flight information asiana airlines flights wpg to calgary lufthansa flights search
    cheap flights ahmedabad to bangalore flight running information india discount tickets madame tussauds london southwest airlines flight check cheap tickets to hre airport runway signs flights auckland to queenstown airport ltbj airport ues mcchord flight information pcl airlines united airlines flight emergency landing

  11. 2016年6月19日19:59 | #11

    выездной мобильный шиномонтаж электроугли – мобильный шиномонтаж, шиномонтаж передвижной.

  12. 2016年6月19日20:39 | #12

    Скачать видео с Facebook – Facebook Video Indir, Comment Telecharger video Facebook.

  13. 2016年6月21日19:12 | #13

    Мобильный Шиномонтаж Русско-высоцком – Шиномонтаж в Яльгелево, Мобильный Шиномонтаж в Петергофе.

  1. 目前还没有任何 trackbacks 和 pingbacks.