はてなブログから画像をWordPressに一括移行する方法

副業

はてなブログから記事をエクスポートしてWordPressにインポートしただけでは、画像ははてなブログに残ったままになります。WordPressの記事では、はてなブログの画像を参照(直リンク)している状態です。

画像の場所が複数あると管理が大変になる他、せっかくSSDのサーバーを契約したので画像も移行することにしました。はてなブログからWordPressへ画像を一括移行する手順を紹介します。

はてなブログの画像URLをリスト化

はてなブログの本文から画像URLをリストアップします。Grep検索ができるテキストエディタが必要です。無料ソフトならサクラエディタがおすすめです。

公式ダウンロード – サクラエディタ

はてなブログの記事をエクスポート

はてなブログの詳細設定にエクスポート-記事のバックアップと製本サービスという項目があります。

「エクスポートしなおす」ボタンをクリックしてエクスポートファイルを作成し、「ダウンロードする」ボタンをクリックします。

画像URLの抽出

エクスポートしたファイルサクラエディタで開き、「検索」-「Grep」を選びます。

Grep条件入力ダイアログに、下記の内容を設定して検索ボタンを押します。

項目内容
条件 https://cdn-ak.f.st-hatena.com/images/fotolife.*png|https://cdn-ak.f.st-hatena.com/images/fotolife.*gif|https://cdn-ak.f.st-hatena.com/images/fotolife.*jpg
現在編集中のファイルから検索 チェック
正規表現 チェック
結果出力 「該当部分」を選択
結果出力形式 「結果のみ」を選択

条件に正規表現を使っています。 正規表現は、文字列のパターンを記号で指定する手法です。ファイル名のように1つ1つが異なるものを、正規表現に置き換えて検索することができます。 .(ドット)は任意の1字を表します。*(アスタリスク)は直前の文字の0回以上の繰り返しを意味します。.*とつなげることで、何文字かわからないけど文字列の連続を表すことができます。

参考正規表現の基礎

画像URLがリストアップできました。後で使うのでこのままファイルを消さずに置いておいてください。

画像をローカルへ一括ダウンロード

Web上にある画像を一括でローカルへ保存できるソフトを使って、はてなフォトライフにある画像をダウンロードします。今回はDSダウンローダーを使います。

リンクDSダウンローダーの詳細情報 : Vector ソフトを探す!

DSダウンローダーを開きます。白い空欄部分に、Grep検索で抽出したURLリストを貼り付けます。

画像のダウンロード先を変更する場合は「オプション」タブを選択してダウンロードディレクトリを設定します。デフォルトではマイドキュメントになっていますので、専用のフォルダを作った方がわかりやすいです。

右上にある「Download」ボタンをクリックするとダウンロードが始まります。件数が多いと時間がかかります。

WordPressへ画像をアップロード

WordPressのメディアライブラリを開き、DSダウンローダーで保存した画像を全てアップロードします。Controlキー+Aを押して全選択するか、Shiftキーを押しながら最初と最後のファイルを選択すれば複数選択ができます。

WordPress記事内のURLを一括置換

私は先にWordPressへ記事をインポートしてしまっていたので、プラグインを使ってURLの一括置換を行いました。WordPressへ記事をインポートする前であれば、はてなブログからエクスポートしたテキストファイルを置換してからインポートしても良いと思います。

画像URLの一括置換はSearch Regexというプラグインを使いました。

Search Regexで次の内容を設定します。

項目内容
SourcePost content
Search pattern
#cdn\-ak\.f\.st\-hatena\.com\/images\/fotolife\/n\/はてなユーザーID\/[0-9]{8}#
Replace patternドメイン名/wp-content/uploads
Regexチェック

Search patternで正規表現を使っています。正規表現を使う場合、URLに含まれるドットやスラッシュ、ハイフンなどはエスケープ(直前にバックスラッシュを付ける)しなければなりません。

参考【保存版】正規表現でエスケープが必要な文字一覧表 – Qiita

[0-9]{8}は0~9の数字が8桁という意味の正規表現です。

Search Regexで正規表現を使う際は、デリミタという区切り文字で囲まないといけないらしいです。そのままだと「 Invalid regular expression: Delimiter must not be alphanumeric or backslash 」というエラーメッセージがでます。デリミタは英数字やバックスラッシュ以外であればなんでも良いみたいなので、#を使いました。

私はアップロードファイルを年月ごとに分けていないのでReplace patternが上記のようになりますが、年月ごとに分けている場合は年月を追加してください。