前回の記事
では、ライブドアブログからの画像ダウンロードに「巡集」というソフトを使っていましたが、画像数が多い場合かなりの時間がかかります。8時間たっても20%も終わっていなかったので、余分なファイルはダウンロードせず、画像のみをダウンロードできる方法を探しました。
検索してこの記事を発見しました。PHPを使って、ファイルのURLを書き換えるのと同時に画像ファイルのダウンロードもできる方法です。
WindowsでPHPを使えるようにする
WindowsではそのままではPHPが使えないので、PHPが使えるようにします。
Visual C++ (Visual Studio 2015) が入っているか確かめる
PHPを動かすには、Visual C++ (Visual Studio 2015)が必要です。
他のソフトでも使うことが多いので、既にインストールされている可能性があります。
既にインストールされている場合、インストールしようとするとセットアップ失敗となるので
確認することができます。
こちらにアクセスします。

64bitならx64を、32bitならx86を選択して「次へ」

ダウンロードしたインストーラーを起動します。
既にインストールされている場合は、インストールできないのでそのまま次に進みます。
インストールされていない場合は、指示に従ってインストールします。
同意してインストールします。

既にインストールされている場合、セットアップ失敗になります。

PHPをインストールする
こちらにアクセスして「Windows downloads」を選択します。

リンク先でダウンロードするファイルを選びます。
x64とx86は64bitと32bitの違いです。

Thread Safeはこの説明の通りです。今回はThread Safeの方を選べば良いと思います。

ダウンロードするバージョンのZipをダウンロードします。(例は64bitのThread Safe)


ダウンロードしたzipファイルを解凍し、
フォルダ名をphp-7.3.9に変更します。
そのフォルダをC:直下に移動します。

「php.ini-production」というファイルを
このフォルダ内で複製し、

「php.ini」という名前に変更します。

環境変数の設定
インストールした PHP にパスを通します
ウインドウズマークを右クリックして
「設定」を選択

「システム」を選択

「バージョン情報」から「システム情報」を
選択します。

「システムの詳細設定」を選択します。

「環境変数」を選択します。

下の段の「Path」を選択して、「編集」します。

「新規」を選択

一番下に書き込めるようになるので、「C:\php-7.3.9」と記入して「OK」を選択します。

動作確認
コマンドプロンプトでPHPが動くか確認します。

ウインドウズマークから
「Windowsシステムツール」内にある
「コマンドプロンプト」を選択します。
「php -v」と入力して「エンターキー」を押します。
PHPのバージョンが表示されたら成功です。

PHPで画像ダウンロードとURL変換を行う
元のブログの画像が2000枚以上の場合は、下記の方法で一度にダウンロードすると後で整理するときに困ったことになります。その場合はbackup.txtダウンロード時に分割をお勧めします。
プログラムファイルを作成
以下のコードを「Mery」などのエディターに貼り、4行目の
「YorBlogURL」の部分を新ドメインに書き換えて、
「ldblog_img_convert.php」と名前を付けて保存します。
#!/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;
}
?>
このコードはこちらの記事から使わせていただきました。
簡単に言うと、backup.txtを読み込んで <IMG>タグと<A HREF> が出てきたら、
そのリンク先の画像をダウンロードし、URLを新ドメインに書き換えるというものです。

保存する場所は、
「C:\Users\ユーザー名」です。
backup.txtの修正
ライブドアブログのURLは全て「http://」だと思っていたのですが、エクスポートした
「backup.txt」を見ると、2019年5月27日の記事には「http://」と「https://」が混在しており
これ以前の記事は「http://」、以降の記事は「https://」となっていました。

上記のPHPは「http://」対応で、「https://」が混在していると面倒なことになるので
「https://」を「http://」に変換しておきます。


こちらも保存する場所は、
「C:\Users\ユーザー名」です。
PHPを実行
コマンドプロンプトを起動して、下のように入力(コピペ)して「エンターキー」を押します。
php ldblog_img_convert.php backup.txt > backup_new.txt
エラーが表示されず、カーソルが点滅していれば実行されています。
ファイル数が多ければ時間がかかりますので、そのまま待ちます。

次の行に移ったら終了です。

実行結果の確認

「ldblog_img_convert.php」を保存した
「C:\Users\ユーザー名」フォルダ
に、「imgs」というフォルダができていて、
その中に画像が保存されています。
新しくできた「backup_new.txt」ファイル
中の画像URLが新ドメインに書き換えられて
います。
このような「Could not open input file」というエラーが出た場合「ldblog_img_convert.php」
ファイルの保存位置が間違っている可能性が高いです。コマンドプロンプトに表示されている場所
この例なら「C:\Users\ユーザー名」のフォルダに「ldblog_img_convert.php」と「backup.txt」の両方が入っていることを確かめてから、再度実行してみましょう。


今回は約46,000ファイル、約20GBの画像
ダウンロードに約11時間かかりました。
画像が大量にあるときの注意点
元のブログに大量に記事と画像がある場合、一度にすべてをダウンロードして新しいブログにアップロードすると
後で記事を整理するときに大変になります。できれば2000枚以下になるように分割したほうが良いです。
その場合、ライブドアからダウンロードするときに期間を指定して.txtファイルをダウンロードします。

どれか1つクリックお願いします。


コメント