Livedoor ブログに書いてきたブログ記事400件を Blogger に移動するため、いろいろやってみました。
今回は、MovableType 形式で Livedoor ブログの記事を取得して Blogger にインポートすることができましたので、その過程をメモがてらご紹介します。
本記事の内容を実行する場合は、まずはテスト環境(稼動していない新しいブログ)で十分に検証を重ねた上で行ってください。
追記 ブログテンプレートを修正しました 11/08/05
日付がインポートした日の日付になってしまう記事ができてしまう。
また、それ以外のエントリーもそもそも正しい日付でインポートできない(9時間づれてしまう)問題に気付きブログテンプレートに以下の修正を行いました。
- 日付を一旦世界標準時に直す
- 0:00 PM は 12:00 PM とする
またブログへのトラックバックは、インポートできないためコメントととしてインポートするようにしておきました。
さらに便利な公告除去機能も付いていますが、無料ブログでの公告削除は規約違反のため、バックアップをエクスポートしたら速やかにもとのデザインに戻しておきましょう。
MovableType形式でLivedoorブログから記事をエクスポートする
無料版でMT形式エクスポートを得るためのアプリがリリースされています。しかしそれぞれに問題がありエクスポートを得ることができませんでした。
- ライブドアリッパー
- 記事が欠ける、コメント・トラックバックが取得できない
- LivedoorBlogRead
- 動かなかった… かりに動いても Feed を元にしているようなので50件以上以前の過去記事は取れないかも
MovableType形式出力用のブログテンプレートを使う
そこで、今回は以下のようなブログテンプレートを制作してみました。このテンプレートをあなたの Livedoor ブログに適用したうえで Blog のトップページを表示するとほぼMTエクスポート形式の表示になります。
このページを、全てを選択(Ctrl + A)してテキストエディタに貼り付ければ、(ほぼ)MTエクスポート形式が得られます。余分なテキストが前に入りますのでそこだけ削除します。
~.logなどといったファイル名で保存しておきましょう。また、テキストのエンコードは utf8 がよいと思います。(後で使用するMovableType2Bloggerにエンコードの制限があったような気がします。)
さらに、このテンプレートには記事とコメントの日付を自動でMT形式に変換する javascript がついているのですばらしいですね。(但し動作確認はFirefox3.6のみです)
ブログテンプレートの変更
ブログテンプレートの変更は、ブログ設定 > デザイン > デザインカスタマイズから行います。変更はトップページのみです。
また、ブログ設定 > 基本設定 > トップページの表示件数 から表示件数を最大の50件にします。
一度に表示できるのは50件まで
トップページに表示できる記事は最大で50件です。そこでページ最上部のナビゲーションをクリックして50件以降を表示します。。
ということで、記事の総数が多い場合、以上の作業を適宜繰り返すことになります。例えば、記事の総数が500件の場合作業は10回になります。
MovableType形式出力用のブログテンプレート(修正済み 11/08/05)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="ldblog-standard">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title><$BlogTitle ESCAPE$></title>
<style>
textarea {
border: 0;
width: 100%;
font-size: 10px;
overflow: hidden;
}
li {
display: inline-block;
}
</style>
</head>
<body>
<div>
<SetVar NavigatorRange>8</SetVar>
<SetVar NavigatorFirstPageText> << </SetVar>
<SetVar NavigatorLastPageText> >> </SetVar>
<SetVar NavigatorPrevPageText> < </SetVar>
<SetVar NavigatorNextPageText> > </SetVar>
<$IndexNavigator$>
</div>
<!-- Loop Start -->
<IndexArticlesLoop>
<div>
<!-- <IfDateChanged></IfDateChanged> -->
<!-- <a href="<$ArticlePermalink$>"></a> -->
AUTHOR: YourName<br />
TITLE: <$ArticleTitle ESCAPE$><br />
STATUS: Publish<br />
ALLOW COMMENTS: 1<br />
CONVERT BREAKS: default<br />
ALLOW PINGS: 1<br />
PRIMARY CATEGORY: <IfArticleCategory1><$ArticleCategory1$></IfArticleCategory1><br />
CATEGORY: <IfArticleCategory1><$ArticleCategory1$></IfArticleCategory1><IfArticleCategory2>,<$ArticleCategory2$></IfArticleCategory2><br />
DATE: <b><$ArticleDateYear$>/<$ArticleDateMonth$>/<$ArticleDateDay$> <$ArticleDateHour$>:<$ArticleDateMinute$>:<$ArticleDateSecond$></b><br />
-----<br />
BODY:<br />
<textarea><$ArticleBody$></textarea><br />
-----<br />
EXTENDED BODY:<br />
<IfArticleBodyMore><textarea><$ArticleBodyMore$></textarea><br /></IfArticleBodyMore>
-----<br />
<CommentsLoop>
COMMENT:<br />
AUTHOR: <$CommentAuthor ESCAPE$><br />
EMAIL: <$CommentEmail ESCAPE$><br />
URL: <$CommentUrl$><br />
DATE: <i><$CommentDateTime$></i><br />
<textarea><$CommentBody$></textarea><br />
-----<br />
</CommentsLoop>
<TrackBacksLoop>
COMMENT:<br />
AUTHOR: <$PingBlogName ESCAPE$><br />
EMAIL: <br />
URL: <$PingBlogUrl$><br />
DATE: <i><$PingDateTime$></i><br />
<textarea><a href="<$PingBlogUrl$>"><$PingTitle$>|<$PingBlogName ESCAPE$></a><br /><$PingExcerpt$></textarea><br />
-----<br />
</TrackBacksLoop>
<!-- <TrackBacksLoop>
PING:<br />
TITLE: <$PingTitle ESCAPE$><br />
URL: <$PingBlogUrl$><br />
IP: 127.0.0.1<br />
BLOG NAME: <$PingBlogName ESCAPE$><br />
DATE: <i><$PingDateTime$></i><br />
<textarea><a href="<$PingBlogUrl$>"><$PingTitle$></a><br /><$PingExcerpt$></textarea><br />
-----<br />
</TrackBacksLoop> -->
--------<br />
<br />
<br />
<!-- <IfArticleRating><$ArticleRatingIcon$></IfArticleRating> -->
</div>
</IndexArticlesLoop><!-- Loop End -->
<script language="JavaScript" type="text/javascript">
(function(){
var bArray = document.getElementsByTagName('B');
var l = bArray.length;
var b, inner, d;
for(var i=0; i<l; i++){
b = bArray[ i];
d = new Date( b.innerHTML);
b.innerHTML = convertXX( d.getUTCMonth() +1) +'\/' +convertXX( d.getUTCDate()) +'\/' +d.getUTCFullYear() + ' ' +
convert12( d.getUTCHours()) + ':' +convertXX( d.getUTCMinutes()) + ':' +convertXX( d.getUTCSeconds()) +
ampm( d.getUTCHours());
}
var iArray = document.getElementsByTagName('I');
var l = iArray.length;
for(var i=0; i<l; i++){
inner = iArray[ i].innerHTML;
d = new Date( [
inner.substring( 0, 4), '\/',
inner.substring( 5, 7), '\/',
inner.substring( 8, 10), ' ',
inner.substring( 12, 14), ':',
inner.substring( 15, 17), ':',
'00'
].join( ''));
iArray[ i].innerHTML = convertXX( d.getUTCMonth() +1) +'\/' +convertXX( d.getUTCDate()) +'\/' +d.getUTCFullYear() + ' ' +
convert12( d.getUTCHours()) + ':' +convertXX( d.getUTCMinutes()) + ':' +convertXX( d.getUTCSeconds()) +
ampm( d.getUTCHours());
}
var tArray = document.getElementsByTagName('TEXTAREA');
l = tArray.length;
var REG_ADS = /<div id="ad_rs"[^<]*?<\/div>/i;
for( i=0; i<1; i++){
inner = tArray[ i].innerHTML;
tArray[ i].innerHTML = inner.replace( REG_ADS, '');
}
function convertXX( n){
var str = '' + n;
return str.length == 1 ? '0' + str : str;
}
function convert12( t){
return convertXX( ( t > 12) ? '' + (t -12) : ( t === 0 ? 12 : t));
}
function ampm( t){
return ( t > 12) ? ' PM' : ' AM';
}
setTimeout(function(){
var ad = document.getElementById('ad');
if (ad) {
ad.parentNode.removeChild(ad);
}
else {
setTimeout(arguments.callee, 100);
}
}, 100);
})();
</script>
</body>
</html>
MovableType形式エクスポートファイルをBloggerに読み込ませてみる
本来なら、続いてブログ記事で使われている写真画像をダウンロードして、適宜にサーバに保存。その後にエクスポートファイルの写真のurlを新しいurlに置き換えなくてはなりません。
しかし、以上の作業を置いておいて、一度Bloggerに読み込んでみます。
この作業は、新しいBlogを作成して行いましょう。稼働中のブログの環境を破壊してしまったら大変です。
MovableType2BloggerでMT形式からAtom形式へ変換
MovableType形式からBloggerのxml形式への変換には、MovableType2Blogger という便利なWebアプリケーションがあります。
Bloggerへブログをインポート
このサービスで取得した xml ファイルを、Bloggerの管理画面の設定 > 基本 > ブログをインポート からアップロードします。
管理画面の記事一覧を表示すると、インポート済みの記事ができていますので、チェックをつけて公開にします。
追記
以下の問題は、テンプレートの修正で解消されています。Enjoy!
一部の記事で、日付が正しくない
一部の記事で、日付が正しくないことがあるみたいで、これは手動で設定します。僕の場合、一度のインポートで1~2件程度がインポートした日付で登録されてしまいました。
全ての記事がインポート時の日付になってしまう
また、以下のような問題も起きるみたいで、僕も実際に全ての記事の日付がインポート時(本日)のものになっていました。現在はほぼ問題ないため、MovableType2Bloggerに与えるMTエクスポート形式の日付がはじめのうちは正しくなかったためだと思います。
インポートした日付で間違いないです。むしろ、作成時の日付で反映することは、受け入れ側にとって、過去に遡ることになり、おかしなことになってしまいます。
この投稿に限らず、「ブログ」と「ホームページ」の区別がはっきりと認識されていないように思えます。「ブログ」は、各社ごとの機能に大差があり、引越すときは、今までのブログを捨てる覚悟でないと出来ません。
4 件のコメント
WSOH
WSOHです。
昨日はコメントありがとうございました。
・日付を一旦世界標準時に直す
・0:00 PM は 12:00 PM とする
の部分を詳しく教えて頂けないでしょうか?
この2点がわからず再度インポートしても
インポートしたままの日時になってしまいます;;
pbrocky
WSOHさん、こんばんわ。
再度インポートしても 全て の記事がインポートした日時のまま ということでしたら、
私の経験では(すいません、もう記憶があやふやですが)、
MT形式エクスポートのDATE:の部分のデータ形式が正しくなかったため、
MovableType2Bloggerで.xmlに変換したときに、変換をしたときの日付を自動で設定されていた、
というのが原因のように思います。
まずはお手元で、記事が一件~数件程度のダミーのMTエクスポート形式のデータを用意して、
MovableType2Bloggerで変換→bloggerへインポート を試されてはいかがでしょう?
その際には、記事の投稿日時の部分を以下のような形式にしてみてください。
DATE: 07/08/2008 05:00:36 AM
また、ご質問の件ですが以下のように考えています。
・日付を一旦世界標準時に直す
これについては、ブログの投稿日時を世界標準時に直しておかないと、
投稿日時が9時間(日付をまたぐ場合は日付も)ずれる、ということです。
確かに投稿日時は正しくありませんが、インポート時の日時になってしまう問題とは
別のこととなります。
・0:00 PM は 12:00 PM とする
ブログの投稿日時を24時間表記から12時間表記に直す必要があるのですが、
その際に 0時としてしまうと、これも不正なデータになってしまうようです。
これは PM 0時台に書いた記事だけ、MovableType2Bloggerによって
変換をしたときの日付を自動で設定されてしまった、のではないかと思っています。
○ DATE: 07/08/2008 12:30:36 PM
× DATE: 07/08/2008 00:30:36 PM
以上で、WSOHさんのお困りの件は解決できるかと思います。
もし、うまくいきませんでしたら、新しい状況と併せて以下の件もお報せください。
1.MTエクスポート形式のファイルのほうのバックアップはまだ手元にありますか?
2.Livedoorブログはまだ削除しないで残していますか?
3.MT形式のエクスポートは、有料ブログの機能で行いましたか?それともライブドアリッパーなどのサービスやソフトを使いましたか?
それでは、うまくいきますことを祈っています。
WSOH
ご丁寧にありがとうございます。
少しずつ試してみようと思います。
わざわざ、お時間を割いてコメント頂き
ありがとうございました。
WSOH
ちなみに下記の件ですが
1.MTエクスポート形式のファイルのほうのバックアップはまだ手元にありますか?
2.Livedoorブログはまだ削除しないで残していますか?
3.MT形式のエクスポートは、有料ブログの機能で行いましたか?それともライブドアリッパーなどのサービスやソフトを使いましたか?
有料版ライブドアでエクスポートしました。
そしてそちらのデータはまだ残っております。
そして以前のデータは下書き(非公開)の状態で残しております。
再度pbrockyさんのBLOGをなぞってやり直してみようと思います。