导出Wordpress日志到新浪博客

  服务器即将到期,不想再续租,自己的博客已经转成静态的了,放到GitHub Pages上当然是最好的选择, 服务器上另一个朋友的博客打算入住新浪博客, 于是就涉及到怎么迁移数据的问题了, 好在新浪博客还算比较开放,支持MetaWeblog XML-RPC API,写了一段简单的脚本,搬家成功。

  不过新浪博客的API貌似不支持dateCreated,因此导入后所有日志的发布时间都变成当前时间了,另外脚本也没有对日志分类进行处理,好在日志不多,手动调整也不是那么麻烦。

<?php
/**
 * 导出Wordpress日志到新浪博客
 * Created by JinnLynn 2013.01.11 http://jeeker.net/
 */
require('./wp-blog-header.php');
require('wp-includes/class-IXR.php');

define('SINA_XMLRPC', 'http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php');

if ($_GET['action'] != 1) {
?>
<br />
<form action="?action=1" method="post">
    新浪账户: <input type="text" name="usr" value="" /><br />
    新浪密码: <input type="password" name="pwd" value="" /><br />
    <input type="submit" value="导出" /><br />
</form><br />
导出前请确认已开通了新浪博客,并设置了正确的账户密码。
<?php
    return;
}

$usr = trim($_POST['usr']);
$pwd = trim($_POST['pwd']);
if (empty($usr) || empty($pwd)) {
    echo '<br /><span style="color:red;">用户名或密码错误。</span><a href="javascript:history.back()">back</a>.';
    return;
}

// 登陆测试
$params = array(0, $usr, $pwd);
$sina_xmlrpc = new IXR_Client(SINA_XMLRPC);
$sina_xmlrpc->query('metaWeblog.getCategories', $params);
$res = $sina_xmlrpc->getResponse();
unset($sina_xmlrpc);
if (isset($res['faultCode'])) {
    echo '<br /><span style="color:red;">用户名或密码错误。</span><a href="javascript:history.back()">back</a>.';
    return;
}

$query = new WP_Query();
$query->query( array( 'post_type'       => array('post', 'page'), // 导出类型
                      'order'           => 'ASC',
                      'posts_per_page'  => 10000 )
              );
while ($query->have_posts()) {
    global $post;

    $query->the_post();

    $layout = $post->post_type;
    $title = get_the_title();
    $date = get_post_time('Y-m-d H:m:s');
    $author = get_the_author();
    $content = $post->post_content;
    $content = apply_filters('the_content', $content);
    $content = str_replace(']]>', ']]>', $content);

    $content .= '<p id="original-post-date" style="color:#ccc"><br />-----<br />原文发表于:'. $date . '</p>';

    $sina_post = array( 'title'       => $title,
                        'dateCreated' => get_post_time('Y-m-d\TH:m:s\Z', true), //!? 没有作用
                        'description' => $content);

    $params = array(0, $usr, $pwd, $sina_post, true);

    $sina_xmlrpc = new IXR_Client(SINA_XMLRPC);
    $sina_xmlrpc->query('metaWeblog.newPost', $params);
    $res = $sina_xmlrpc->getResponse();

    unset($sina_xmlrpc);

    if (isset($res['faultCode'])) {
        $res = '<span style="color:red;">导出失败</span>';
    }

    echo $title . '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> ' . $res . '<br /><br />';
}
?>

Source on gist

PJ2WP WXR

  PJ2WP是一个PJBlog到Wordpress的数据转换程序。

  说实在不是很想发这个小程序,毕竟PJBlog2是我使用的第一个比较满意的博客系统,至少在我搭建个人博客的初期是这样的,但可惜随着使用时间的延长和个人需求的不断增多,PJBlog2 在功能、扩展性上的诸多局限也逐渐显现,即使是最近刚刚发布的PJBlog3,与Wordpress相比,其间的差距也确实不在一个数量级上。

  或许我们应该给PJBloger们提供体验更优秀的博客系统的机会,也许PJ2WP能够帮你更容易达到这个目的。

  PS: 本程序是ASP脚本;同样适用于PJBlog3。

  • 基于Wordpress官方专用数据转移格式“WordPress eXtended RSS”(或简称WXR)。
  • 数据相对完整转移,原PJBlog中的文章、评论、标签、通告等主要数据都将无损转换。
  • 可指定要导出的作者、分类。
  • 可选择是否导出评论通告等

  注意: 该转换程序的上次更新已经是很遥远之前了,因此无法保证能应用在现在的PJBlog上,使用前请慎重,做好数据备份。

Source on gist

Screenshot

PJ2WP WXR Screenshot

Read more...