服务器即将到期,不想再续租,自己的博客已经转成静态的了,放到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 /> => ' . $res . '<br /><br />';
}
?>