livedoorブログからWordPressへ移行したい
livedoorブログからWordPressへ移行する場合、通常はlivedoorブログからデータをエクスポートして、WordPressへインポートします。詳しい手順はネットを探せばいろいろ出てきますので、こちらのブログなどを参考にしていただくとして、面倒なのが画像の取得と画像URLの変換です。今回簡単なツールを作ってみました。
変換プログラム
このプログラムはエクスポートしたファイルから<IMG>タグと<A HREF>タグを探して、画像ファイルを片っ端からダウンロードしていくものです。<A HREF>も参照しているのは、livedoorブログでは画像の拡大をする場合にリンクしているためで、<A HREF>タグの場合はJPEG/PNG/GIFのみダウンロードします。
#!/usr/bin/php
<?php
$outdir = "imgs";
$new_baseurl = "https://YourBlogURL/wp-content/uploads/".$outdir;
$infile = $argv[1];
if(! is_dir($outdir)) mkdir($outdir, 0755);
if(! is_file($infile)) die("no file\n");
foreach (explode("\n",file_get_contents($infile)) as $line) {
$line = preg_replace_callback('/(<img [^>]+>)/i', function($m){
return preg_replace_callback('/src=(["\'])([^"\'?]+)\??[^"\']*(["\'])/i', function($mm){
return 'src='.$mm[1]. downloadimg($mm[2]) .$mm[3];
}, $m[1]);
}, $line);
$line = preg_replace_callback('/(<a [^>]+>)/i', function($m){
return preg_replace_callback('/href=(["\'])([^"\'?]+)\.(jpg|jpeg|png|gif)\??[^"\']*(["\'])/i', function($mm){
return 'href='.$mm[1]. downloadimg($mm[2].'.'.$mm[3]) .$mm[4];
}, $m[1]);
}, $line);
echo $line."\n";
}
exit;
function downloadimg($url) {
global $outdir, $new_baseurl;
if(preg_match("~\Ahttps?://~", $url)) {
$buff = @file_get_contents($url);
if(strlen($buff) > 0) {
for ($i=0; $i<100; $i++) {
$newname = (($i>0) ? $i.'_' : '') . basename($url);
$outpath = $outdir.'/'. $newname;
if(! is_file($outpath)) {
file_put_contents($outpath, $buff);
$url = $new_baseurl.'/'.$newname;
break;
}
}
}
}
return $url;
}
?>
使い方
はじめに $new_baseurl をWordPressの画像を置くURLに書き換えてください。
変換するにはコマンドラインから実行します。
$ ./ldblog_img_convert.php backup.txt > backup_new.txt
ダウンロードした画像ファイルは img/ フォルダに保存されるので、WordPressのディレクトリにコピーしてください。backup_new.txtの中の画像のURLは、新しいWordPressでのURLに書き換わっています。もしURL古いままだった場合は、ファイル名がうまく認識できなかったのかもしれません。ダウンロードに失敗した場合はURLは変換しません。
まだ数個の記事でしか動作テストしていないので、バグや改良点がありましたらご指摘ください。