### 移行した
そういうわけで昨日下記のスクリプトをnode.jsで作り、WordpressデータをMT形式でエクスポートし、はてなブログにインポートした。記事数は3000ちょっとであるがインポートにはかなりの時間を要した。
記事中の自ブログへのURL等もそれなりに変換してエクスポートしている。
var fs = require('fs');
var Q = require('q');
var dbj = fs.readFileSync('dbinfo.json', 'utf-8');
var dbinfo = JSON.parse(dbj);
var mysql = require('mysql');
var mySQLConn = mysql.createConnection({
user: dbinfo.user,
password: dbinfo.password,
database: dbinfo.db
});
var mySQLQuery = Q.nbind(mySQLConn.query, mySQLConn);
var categoryQuery = 'select wp_terms.name,wp_terms.slug from wp_term_relationships left join wp_term_taxonomy on wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id left join wp_terms on wp_term_taxonomy.term_id = wp_terms.term_id where wp_term_relationships.object_id = ';
var sepI = '-----\n';
var sepR = '--------\n';
function createMTExportFile() {
var defer = Q.defer();
mySQLQuery('select wp_posts.*,wp_users.display_name as user_name from wp_posts left join wp_users on wp_posts.post_author = wp_users.id where post_status in ("publish","draft") order by post_date desc')
.then(function (params) {
var result = params[0];
console.log('createMTExportFile start');
var i = 0;
var contStr = '';
function loop() {
var r = result[i];
mySQLQuery(categoryQuery + r.ID)
.then(function (p) {
var categoryRecords = p[0];
contStr += 'TITLE: ' + r.post_title + '\n';
contStr += 'BASENAME: ' + decodeURI(r.post_name) + '\n';
contStr += 'STATUS: ' + r.post_status + '\n';
contStr += 'ALLOW COMMENTS: 0 \n';
contStr += 'CONVERT BREAKS: 0 \n';
var dt = r.post_date;
contStr += 'DATE: ' + ('0' + (dt.getMonth() + 1)).slice(-2) + '/' + ('0' + (dt.getDate() + 1)).slice(-2) + '/' + dt.getFullYear() + ' '
+ ('0' + dt.getHours()).slice(-2) + ':' + ('0' + dt.getMinutes()).slice(-2) + ':' + ('0' + dt.getSeconds()).slice(-2) + '\n';
if (categoryRecords.length > 0) {
for (var idx = 0, end = categoryRecords.length; idx < end; ++idx) {
contStr += 'CATEGORY: ' + categoryRecords[idx].name + '\n';
}
}
contStr += sepI;
contStr += 'BODY: \n';
var postContent = r.post_content;
postContent = postContent
.replace('/blog/wp-content/uploads/', '/content/')
.replace(/[\"\']http\:\/\/[^\"]*\/blog\/[^\"]*\/([^\/\"]*)\/[\"\']/igm, '"http://sfpgmr.hatenablog.jp/entry/$1"')
.replace(/[\"\']http\:\/\/[^\"]*\/blog\/([^\"\/]*)\/[\"\']/igm,'"http://sfpgmr.hatenablog.jp/entry/$1"')
.replace(/(\[amazon_vcitem[^/]*\/amazon_vcitem?\])/igm, '<!-- $1 -->');
contStr += postContent + '\n';
contStr += sepI;
contStr += sepR;
}).done(function () {
++i;
if (i < result.length) {
loop();
} else {
defer.resolve(contStr);
}
}, function (err) { console.log(err);defer.reject(err); });
};
loop();
});
return defer.promise;
}
Q(createMTExportFile())
.then(function (MTStr) {
return Q.nfcall(fs.writeFile, 'mt.txt',MTStr);
}).then(function () {
mySQLConn.end();
}).catch(function (err) {
mySQLConn.end();
console.log(err);
})
;
console.log('** End of Program **');
テーマデザインはとりあえずデフォルトのものを使用している。ゆくゆくはカスタマイズするつもりではある。いつになるかはわからないが。。