MTで記事アセットを一括登録する際はSQLが便利
Movable Typeで画像と記事を紐づけする記事アセットを使用する際、過去の全記事分を手動で追加するのは限界があります。
そのような場合、データベースでSQLコードを実行してmt_objectassetを一括で編集すると便利です。
例えば、試しに1記事分のみ画像を記事アセットに追加してみると、管理画面では以下のように表示されます。

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

このテーブルを眺めてみますと、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などとして出力します。

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

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

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

この中にも「画像のファイル名」があるため、上記のリストと照合すれば、記事IDと画像IDの組み合わせが判明します。
■Pythonで「記事IDと画像IDの組み合わせ」一覧を作成
次に、上記で出力されたファイルを元に、Pythonで記事のIDごとに記事本文のなかから「画像のファイル名」だけを抽出します。その抽出された「画像のファイル名」を元に、最初の「画像のID」と「画像のファイル名」のリスト一覧と照合し、ヒットすれば、その組み合わせで紐づけします。
生成AIにPythonでコードを書いてもらえば、簡単にできますが、そのログはこのようなプロセスとなっていました。

記事毎に本文を解析し、画像のファイル名があれば、アセットIDの番号と紐づけをするプロセスとなります。すると、上記の「画像のID」と「記事のID」の組み合わせの一覧が判明します。
■PythonでSQLコードを作成
最終的には、その「記事ID」と「画像ID」の組み合わせ一覧をデータベースのSQLで一括登録することにより、全記事の記事アセットに反映させることができます。このSQLコードもPythonで生成AIに書いてもらうとよいでしょう。
結果的に、データベースで実行するためのSQLファイルを出力したのがこちらになります。

試しに、最初の1行だけ実行してみますと、上記データベースのmt_objectassetの箇所に新しく1行が加えられ、管理画面の方でも正常に反映されました。念のため、この作業をやる前にデータベースのバックアップをとってから実行することをおすすめします。
結果に問題がないようでしたら、残りのSQLコードもすべて一括で実行し、最終的には全記事分の記事アセット登録が完了します。
流れとしましては、「MTの新規テンプレートで.txtファイル出力」 → 「パソコン上でPython解析」 → 「PythonでSQLファイルの生成」 → 「データベースでSQL実行」の流れとなります。
記事アセットの追加は手動でもできますが、記事数が膨大な時は大変なため、上記の方法で一括登録すると簡単です。
現状、当ブログでは記事アセットを使用する機会はありませんが、いずれ関連記事に画像を表示する際に使用してみたいと思います。