PHPを使って、ライブドアブログのインポートデータから画像ファイルの取得とURL変換を一括で行う方法

ブログ引っ越し
Alexas_FotosによるPixabayからの画像

前回の記事

では、ライブドアブログからの画像ダウンロードに「巡集」というソフトを使っていましたが、画像数が多い場合かなりの時間がかかります。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変換を行う

プログラムファイルを作成

以下のコードを「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時間かかりました。


どれか1つクリックお願いします。
 にほんブログ村 ライフスタイルブログ セミリタイア生活へ longstay88_31 

コメント

タイトルとURLをコピーしました