ロリポブログからWordPressにURLを変更せずに移行する

ロリポップの契約更新期限が来たのですが、メールはGoogle Apps使ってるし、基本的にテストサイト等はheteml使ってるし、ロリポップってこのblogくらいしか使わなくなっちゃったんですよね。
んで、そのままblogの為だけにまた1年更新するのも管理が面倒でもったいない気がするのでhetemlに一本化しようかと思ってロリポブログ→WordPressの移行をやってみた。
んでやっぱりURLが変更されるのもちょっと切ないので無理矢理URLを変更せずに移行(厳密には前のURLから辿れるように)した。

エクスポート

ロリポブログの「設定」→「エクスポート」でxml形式にて保存する。
で、そのままだとjugem形式なので一旦WordPressでインポート可能なMT形式を迂回する。
このサイト素晴らしい!JUGEM形式のブログデータをMovableType4形式に変換

画像はこのエクスポートではもちろん付いてこないので、ロリポブログの画像管理からチマチマと画像をダウンロードしとく。。。
とりあえずoption+クリック連打で保存した><
あと、WordPressだとカテゴリとかでURLが階層構造になるので、画像のパスが “images/xxx.png” とかになってるのを絶対パスの “/images/xxx.png” にしておく。
エクスポートしたファイルをエディタで置換!

インポート

WordPressの管理ページの「ツール」→「インポート」で「Movable Type and TypePad」をクリックしてさっきのファイルをアップロードする。
これだけだと画像がないので、記事の画像パスに合うようにルートフォルダにimagesってフォルダを作り、さっきダウンロードした画像達をftpとかでアップロードする。
WordPress的な画像の管理方法ではないのですが、イチイチ手作業でアップしてられないので気にしないことにする!

URLを保持する

とりあえずの移行だったらこれまでの手順でいけるのですが、数は少ないと思いますがリンク張ってくれたりブクマしてくれてる方もおられますので、前のURLから辿れるようにする。
ロリポブログの場合URLが http://ブログ/?eid=xxxxx って感じなのですが、そもそもこの記事のIDが引き継がれません><
かなり地味な作業になるのですが、記事のIDを手作業で振りなおす必要があります。

↓私はこんな手順でやりました
・ロリポブログの記事管理から記事の一覧をコピペして、Excelに貼っつける
・WordPressの記事IDを追記
・CSVで保存して適当なスクリプトでこんなSQL文を生成


update wp_posts set ID = xxxxxx where ID = yyy ;
update wp_comments set comment_post_ID = xxxxxx where comment_post_ID = yyy ;
update wp_term_relationships set object_id = xxxxxx where object_id = yyy ;
:
:

※wp_postsのGUIDにもURLが書いてあるのですが、どこで使うのかわからないので放置。。

ちなみにスクリプトはPythonで書いたこんなの(A列に本来の記事ID、H列にインポート後の記事IDとする)
改行コードはCRLFってコトで(MacのExcelの場合CRになるから注意)


for line in open("blog.csv"):
dat = line[:-2].split(',')
print "update wp_posts set ID =",dat[0]," where ID = ",dat[7],";"
print "update wp_comments set comment_post_ID = ",dat[0]," where comment_post_ID =",dat[7],";"
print "update wp_term_relationships set object_id = ",dat[0]," where object_id = ",dat[7],";"

これで記事IDが一致するのですが、WordPressのURLは http://ブログ/?p=xxxxx なので若干違う。
mod_rewriteとかで対応しようとしたのですが、どうもGETパラメータを含むURLをうまくrewriteできないので(mod_rewriteとか正規表現苦手です><)、かなり無理矢理感がありますがindex.phpを書き換えたw


if (!empty($_GET['eid'])) {
$id = $_GET['eid'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://blog.maesan.jp/'.$id.'.html');
}

※これをindex.phpの先頭に追加で。
※パーマリンクの設定を %post_id%.html にしているのでこうしてますが、各自の設定でやってください。

まとめ

思ったよりは簡単に出来ましたが、それでも面倒です。。
やっぱり気をつけることは画像関係でしょうか、本来のWordPressの方法ではないので次に別のところとかに移行するときにまた大変になるような気はします。んでGUIDってフィールドも若干気にはなるw
なんというか、ブログ専用のサービスとか使うと始めるにはすごく楽なんですけど、いざというときに自由がきかなくて大変ですねぇ。

 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
Filed under: Internet — maesan 7:08 PM