Feedsモジュールを調査したのでメモ。
動作環境
Drupal 9.0.0
モジュール
- Feeds 8.x-3.0-alpha8
- Feeds Extensible Parsers 8.x-1.0-alpha4
モジュールの機能
- CSVやJSONからコンテンツ、ユーザ、タクソノミータームなどを一括インポートできる。
主な使い方
-
Feed type
を定義する -
feed
を追加・実行
Feed type
はIN/OUTの指定とマッピング定義。Fetcher, Parser, Processorを決めて、マッピングを指定する。
-
Fetcher
- データ取得方式を指定。方式だけ指定してfeed追加時に実際のファイルパスを指定する。 選択肢:URLからダウンロード・ファイルアップロード・ディレクトリ
-
Parser
- データ形式を指定。CSV・JSON・RSS・XMLなど。
-
Processor
- インポート先のエンティティを指定。コンテンツ、ユーザ、タクソノミーターム、メニュー、ブロックなど。 コンテンツエンティティが対象。
-
マッピング
- データ項目とエンティティ項目の紐付けをする。 例えばコンテンツのタイトルやフィールドをcsvのヘッダやJSONのkeyで紐付けできる。 ユニークの指定すれば、更新も可能。
実行はコンテンツを作成する要領でfeed
を作成し、取り込みたいファイル(URL)を指定、Save and import 。
インポートしたエンティティはfeed item
として管理対象になるので、一括削除や更新・新規が混じった再インポートも可能。
その他できること
- エンティティリファレンスのフィールドは、何で検索して紐付けるか指定できる。名前、id、uuidも指定できる。 ない場合は、自動生成して紐付けの指定も可能。
- drupalのcron機能に沿って自動更新が可能。 ディレクトリにCSV配置してcronで定期実行できるので、外部システムから定期取込という仕様に対応できそう。
- バックグラウンド実行ができる。
- 実行ステータスを持っているので2重実行はできない。素敵!
できないこと
- URLからダウンロードできるが認証がある場合、URLに認証情報が含められればOK。OAuthとかはNG。
- フィールドがリスト形式の場合、データ元は管理画面のプルダウン見えている名称ではなく、内部で認識している値を指定する必要がある。
- 2020/10/07追記 Feeds Tamper で解決できるかも。
- ユーザインポートでロールを指定する機能がない。
- メディアのインポートはできない。メディア = ファイル&メディア、2つエンティティを対応する必要があるからだと思う。
- コンテンツの翻訳登録はNG。
- 2021/12/02追記 マッピングのフィールド指定で言語を指定すればできる。良い感じに翻訳コンテンツも同時に作成される。
- 1つのCSVから複数のコンテンツタイプをまとめてインポートはできない。コンテンツタイプごとにFeed typeも分ける必要がある。
カスタマイズの範囲
-
Fetcher/Parser/Processor/Target(マッピングの定義)は全部プラグインなのでやや手間でも作りたい放題。
-
イベントの定義が豊富なので、
EventSubscriber
でカスタマイズでもいいかも。- インポート前、Fetcher/Parser/Processor それぞれ実行時、インポート完了後
- エンティティのバリデーション前、save前、save後
代替手段
あえていうならMigrate API
。多言語でコンテンツインポートなら、Migrate APIしかない気がする。
それ以外ならFeeds + カスタマイズでいいんじゃないかな?とも思う。