MTOS から Craft CMS に JSON 形式でデータを移行する方法

Craft CMS の Feed Me というプラグインを使って JSON フォーマットで MTOS から Craft にデータを移行しました。その方法をご紹介します。

Craft CMS Logo

MTOS に登録されている記事データを JSON 形式で Craft に移行しました。「Feed Me」という Craft プラグインを使ってとても手軽に移行できたので、その方法をご紹介します。

Feed Me プラグインのインストールと設定

はじめに Feed Me という Craft プラグインをインストールします。

このプラグインは、XML や RSS、ATOM、JSON などのフォーマットで Craft にデータをインポートすることができます。すべての機能を使いためには $99 の Pro 版を購入する必要がありますが、Entries だけなら無料版でインポートすることができます。

プラグインのインストール手順は下記のとおりです。

  1. 上記ページで ZIP ファイルをダウンロードして展開します。
  2. その中にある feedme ディレクトリを craft/plugins にアップロードします。
  3. 設定 > プラグイン のページへ移動し、 Feed Me プラグインの インストール をクリックします。
  4. Welcome to Feed Me! という画面が表示されるので Get Started をクリックしてインストール完了です。

craft-feedme01-min.png

Feed Me でインポートする JSON ファイルを作成

MTOS のインデックステンプレートで、Feed Me でインポートするための JSON ファイルを作成します。

JSON ファイルの書式は下記のとおりとなります。

{
 "channel": {
 "items": [
 {
 "title": "My Title",
 "slug": "my-title"
 },
 {
 "title": "Another Title",
 "slug": "another-title"
 }
 ]
 }
}

次に、この書式でインポートする記事の情報を書き出します。JSON を書き出すためのインデックステンプレートは下記のようになります。

<mt:Ignore>本文欄からサイトのホスト名部分を削除するための正規表現をセット</mt:Ignore>
<mt:SetVars>
pattern =/<mt:BlogURL>/g
replacement =<mt:BlogRelativeURL>
</mt:SetVars>
<mt:Ignore>配列のための変数を初期化</mt:Ignore>
<mt:SetVar name="items" />
<mt:Entries lastn="0">
 <mt:Ignore>配列 items に入れていく各アイテムをセットするハッシュ変数 item を初期化</mt:Ignore>
 <mt:SetVar name="item" />
 <mt:Ignore>各アイテムの情報をハッシュ変数 item にセット</mt:Ignore>
 <mt:SetVarBlock name="item" key="title"><mt:EntryTitle remove_html="1" /></mt:SetVarBlock>
 <mt:SetVarBlock name="item" key="id"><mt:EntryID /></mt:SetVarBlock>
 <mt:SetVarBlock name="item" key="body"><mt:EntryBody regex_replace="$pattern","$replacement" trim="1" /></mt:SetVarBlock>
 <mt:SetVarBlock name="item" key="date"><mt:EntryDate language="en"></mt:SetVarBlock>
 <mt:Ignore>ハッシュ変数 item を配列変数 items に push</mt:Ignore>
 <mt:SetVar name="items" function="push" value="$item" />
</mt:Entries>
<mt:Ignore>配列変数 items を変数 channel にセット</mt:Ignore>
<mt:SetVar name="channel" key="items" value="$items" />
<mt:Ignore>最終的に出力する変数 out に channel をセット</mt:Ignore>
<mt:SetVar name="out" key="channel" value="$channel" />
<mt:Ignore>変数 out を JSON で出力</mt:Ignore>
<mt:Var name="out" to_json="1" trim="1" />

投稿日時もインポートする場合は EntryDatelanguage="en" モディファイアをつけるのがポイントです。

また、本文欄に入っている画像の URL などからもホスト名部分を regex_replace モディファイアで削除しておきます。

regex_replace="$pattern","$replacement"

regex_replace モディファイアに渡している変数は、テンプレートの冒頭でセットしています。

このテンプレートで書き出した JSON の URL をメモしておきましょう。

画像を移動しておく

MTOS の本文欄に入っていた画像や、サムネイルが入っている asset_c ディレクトリを予め craft/public ディレクトリに移動しておきます。

Feed Me プラグインの設定とインポート

Feed Me プラグインをインストールすると、管理画面の左メニューに Feed Me というメニューが追加されます。これをクリックして Feed Me Feeds ページへ移動し New feed ボタンをクリックします。

craft-feedme02-min.png

各項目に必要な値を入れていきましょう。


名前

今回のインポートの設定を保存しておく名前です。 From MTOS としました。

Feed URL

先程書き出した JSON ファイルの URL です。

Feed Type

JSON Feed を選択します。

Primary Element

今回のフォーマットで作成した場合は items になります。

Element Type

エントリ を選択します。

セクション

データをインポートするセクションを選択します。

入力タイプ

データをインポートするセクションの入力タイプを選択します。

Import strategy

どのようにインポートするかを選択します。今回はデータの以降なので Create new elements を選択します。

Passkey

初期値のままでOKです。

Backup

OFF にしておきます。


ここまで入力したら、 Save & Continue ボタンをクリックします。

次に Craft のどのフィールドに JSON ファイルの値をインポートするかを設定します。

各項目のドロップダウンリストから必要な割り当てる情報を選択します。

この中で、 ステータス投稿者Don't import のままで、右側のドロップダウンリストから値を選択しました。 Entry IDDon't import にしました。

craft-feedme04-min.png

ページ最下部の Set a unique identifier for existing elements では重複チェックするフィールドを選択します。今回は スラグ だけ選択しました。

ここまでの設定が終わったら Save & Iimport ボタンをクリックしてインポートを開始します。

Processing complete! が表示されればインポート完了です。

craft-feedme05-min.png

インポートが終わったらサイドメニューの エントリ でインポートが成功しているか確認しましょう。

まとめ

今回は Feed Me プラグインのエントリのインポートを簡単にご紹介しました。

Pro 版を購入すればエントリ以外もインポートできるようになります。詳細は下記のページをご覧ください。

craft-feedme06-min.png

以上です。

Published 2017-04-27
Updated 2019-06-25