MTで記事アセットを一括登録する際はSQLが便利

Movable Typeで画像と記事を紐づけする記事アセットを使用する際、過去の全記事分を手動で追加するのは限界があります。

そのような場合、データベースでSQLコードを実行してmt_objectassetを一括で編集すると便利です。

例えば、試しに1記事分のみ画像を記事アセットに追加してみると、管理画面では以下のように表示されます。

MTの記事アセット

この記事アセットは、データベース上ではmt_objectassetの箇所に保存されています。

データベースのobjectasset_blog_id

このテーブルを眺めてみますと、objectasset_blog_idのブログIDは「11」で全て同じ数字、「entry」の文字列も同じなため、「objectasset_asset_id」と「objectasset_object_id」の組み合わせが分かれば、データベース上でSQLを実行で一括登録できるはずです。

各項目は以下のような意味になります。

  • objectasset_id:連番(※自動で割り振られる)
  • objectasset_asset_id:【特定が必要】 画像のID
  • objectasset_object_id:【特定が必要】 記事のID
  • objectasset_blog_id:当ブログは「11」で一括(※ブログによって異なる)
  • objectasset_object_ds:「entry」で一括
  • objectasset_embedded:「0」で一括(※本文内の埋め込みの有無)
  • objectasset_cf_id:「0」で一括(※カスタムフィールド経由ではないの意味)

ただ、どの記事にどの画像が記事アセットとして追加されているのかについて、記事IDと画像IDの組み合わせが分からないとSQLコードの作成ができません。そのため、新規テンプレートでデータを出力したり、Pythonを使用しながら、「画像のファイル名」を元にこれらの組み合わせを調べる必要があります。

新規テンプレートで「画像のファイル名」を出力

まず、「画像のID」と「画像のファイル名」の組み合わせを一覧で出力しますが、MTで新規テンプレートを作成し、ファイルをassets.txtなどとして出力します。

MT新規テンプレートでリスト一覧を出力

すると、この組み合わせのリスト一覧が出力されます。

出力された画像とファイル名のリスト一覧

次に、上記とは別の新規テンプレートを作成して出力ファイル名をentries.txtなどとし、「記事のID」とmore部分までを含めた「記事本文」の組み合わせを一覧で出力します。

記事IDと記事本文を出力するテンプレート

この内容は以下のようなリストになります。

出力された記事IDと記事本文のリスト一覧

この中にも「画像のファイル名」があるため、上記のリストと照合すれば、記事IDと画像IDの組み合わせが判明します。

Pythonで「記事IDと画像IDの組み合わせ」一覧を作成

次に、上記で出力されたファイルを元に、Pythonで記事のIDごとに記事本文のなかから「画像のファイル名」だけを抽出します。その抽出された「画像のファイル名」を元に、最初の「画像のID」と「画像のファイル名」のリスト一覧と照合し、ヒットすれば、その組み合わせで紐づけします。

生成AIにPythonでコードを書いてもらえば、簡単にできますが、そのログはこのようなプロセスとなっていました。

Pythonコードによる照合のプロセス

記事毎に本文を解析し、画像のファイル名があれば、アセットIDの番号と紐づけをするプロセスとなります。すると、上記の「画像のID」と「記事のID」の組み合わせの一覧が判明します。

PythonでSQLコードを作成

最終的には、その「記事ID」と「画像ID」の組み合わせ一覧をデータベースのSQLで一括登録することにより、全記事の記事アセットに反映させることができます。このSQLコードもPythonで生成AIに書いてもらうとよいでしょう。

結果的に、データベースで実行するためのSQLファイルを出力したのがこちらになります。

出力されたSQLファイル

試しに、最初の1行だけ実行してみますと、上記データベースのmt_objectassetの箇所に新しく1行が加えられ、管理画面の方でも正常に反映されました。念のため、この作業をやる前にデータベースのバックアップをとってから実行することをおすすめします。

結果に問題がないようでしたら、残りのSQLコードもすべて一括で実行し、最終的には全記事分の記事アセット登録が完了します。

流れとしましては、「MTの新規テンプレートで.txtファイル出力」 → 「パソコン上でPython解析」 → 「PythonでSQLファイルの生成」 → 「データベースでSQL実行」の流れとなります。

記事アセットの追加は手動でもできますが、記事数が膨大な時は大変なため、上記の方法で一括登録すると簡単です。

現状、当ブログでは記事アセットを使用する機会はありませんが、いずれ関連記事に画像を表示する際に使用してみたいと思います。

関連記事: