FeedAPI+Feed Element Mapper to Feeds

D6からD7へアップグレードすることを想定し、その移行手順を確立するため、Acquia Dev DesktopでDrupal7のローカルサイトを構築してテストしています。

できればDrupal7をクリーンインストールしたいと思い、エクスポート/インポートで対応できるかを検証しています。
Node Exportというモジュールがあるようですが、Drupal7ではFeedsのインポート機能で読み込むようになっているとかいないとか、そこで今回は、エクスポート/インポートの確認とDrupal 6で使用しているFeedAPI+Feed Element Mapperからの移行を目的としています。

Drupal 6.x

Drupal6では次のようになっています。

1.FeedAPI+Feed Element Mapper

(1)モジュール情報

モジュール(admin/build/modules)では以下のモジュールを有効にしています。
feedapi_2011092804

これら以外にFileFeedも有効にしてあります。
また、パーサーにはSimplepipeを優先的に利用しています。別途、Simplepipeライブラリが必要になります。Simplepipeにしている理由としてはマッピング可能なインスタンス項目が増えるためです。なお、最新版のSimplepipe1.2ではYouTubeのRSSフィードで全く別のタイトルの一覧を入手してしまっていたのでSimplepipe1.1.xを使用しました。

(2)Feedノードの設定値

Feedへの登録は以下のように2件だけですので、Feedsを導入して新規登録にて対応可能です。
feedapi_2011092801

新規登録の場合は、稼動から年数が経過していると累積分があるため、フィードURLで取得できる数<累積分になっているとリフレッシュでは再作成されないので失うことになります。
今回は2件ともすべてのコンテンツがリフレッシュで作成されました(取得数=累積数だった)ので問題なしです。

各項目の設定内容

この画面で入手先URL、パーサー、プロセッサー、更新周期、作成するコンテンツタイプの指定を行っています。

以下は、Feedの設定内容です。
・パーサーはSimplepipe parserとPHP5のCommon Syndication parserを有効にしてあります。
・プロセッサーで動画コンテンツを作成するようにしてあります。
※動画コンテンツタイプはemfield+Media:YouTube+MediaFrontを使ってYouTubeの動画URLからOSMプレイヤーを設置したノードを作成します。
※その他、FileFieldとImageFieldでアップロードした画像ファイルと動画ファイルからもOSMプレイヤーを設置したノードを作成します。
feedapi_2011092802
feedapi_2011092805

MAP情報
Feed ItemとノードItemの対応です。
※取得できるFeed Itemは使用するパーサーで異なります。
feedapi_2011092803
 

Drupal 7.x

1.Feeds+Job Scheduler

FeedsはFeedAPIの後継になります。そして、Job Schedulerモジュールが要件になっています。
Feedsではいろいろと機能が追加されていますので、FeedAPIより多機能です。
Feedsには内部モジュールにFeeds Importerがあり、従来のFeed形式やOPML形式以外にもCSVやXML形式のファイルからノードやユーザをインポート可能なようです。
今回はFeedAPI+Feed ElementMapperの移行手順というよりはFeedsで何がどこまでできるかが調査の目的になります。
仮にFeedsモジュールですべてのノードのインポートができるのであれば、Drupal7へはアップグレードではなく新規インストールで対応できる可能性が高まります。
実際に「Node Export」モジュールでは、インポートはFeedsで~といった説明もあります。

(1)モジュール情報

モジュール(admin/modules)では以下のモジュールを有効にしています。
feedapi_2011092806
feedapi_2011092807

モジュールを有効にすると、「Feeds」と「Feed Item」の2つのコンテンツタイプとViewsが作成されます。
Feedに個別のFeed URLを入力したノードを作成すれば、ここからインポートすればFeed Itemにノードが作成されます。
インポートして作成したノードのリストはFeed ItemのViewsで閲覧できる仕組みになっており、D6のときのFeed API+Feed Element Mapperと同じようなインターフェースになります。

(2)Feedsの設定値

Feedsでは新しいFeedの登録はFeeds ImportersのNEW IMPORTERS(admin/structure/feeds/create)から行います。

基本設定

基本設定でAttachするコンテンツタイプを選択すれば、そのコンテンツタイプに個別のURLを登録することが可能です。
しかし、登録した内容を確認するには「/import」ページにアクセスしなければ閲覧できません。これようのメニューがないようなのでアドレスに直接入力するか、Feeds Importer「admin/structure/feeds」の画面にある「import」のリンクからアクセスすることになります。
feedapi_2011092810

Fetch

みなれないのがこのFetchですが、入力がURLの場合とファイルの場合とで2種類あります。

Select a Fetcher

feedapi_2011092811

Settings for HTML Fetcher

feedapi_2011092812

Parser

Parserは他のモジュールを導入することでも追加できます。
YouTubeの動画用には、これまではSimplePipeを使用していましたが、YouTube ParserモジュールのYouTube Parserを使用することにしました。これも結局はSimplePipeです。
ただし、drurationやratingなどの詳細情報まで解析してくれますのでYouTube Parserがお勧めですが、入力するFeed URLを選ぶようで従来のFeedURLではparserエラーのため読み込めませんでした。YuTubeのサイトにある開発者用のYouTube Data APIのdemoページでいろいろ試して正常に動作するFeed URLを探すしかないようです。
タイトルや動画のURL程度であればCommon syndication parserかSimplePipeのほうが扱いやすいと思います。
ちなみにNode Exportモジュールを導入するとNode export parserが追加されます。これはNode Exportでエクスポートしたファイルのみ対応しています。

Select a Parser

feedapi_2011092813

Settings for Common syndication parser

feedapi_2011092814
 

Processor

Processorも同じく他のモジュールを導入することで追加できます。この中の機能でMAPがありますが、これがソースのインスタンスをターゲットノードのどのインスタンスにあてるかを決定することになります。Processorでどのようなインスタンスがソースにあるのかが実際のものが表示されないのでMAPは手探りで行うことになりました。
MAPするときにはユニークな項目(GUIDなど)を含めるようにすれば、その項目がProcessorのアップデートノードの判断に使用され正しく処理がされます。
Node Processorを使えばノードを作成することが可能になります。
ただし、入力が配列要素の場合はどのProcessorも対応していないようです。また、ターゲットが配列要素であっても同じアイテムを選択すると上書きされるようですのでどのProcessorも配列には対応していないようです。そのため、無制限に設定しているフィールドのインポートはそのままでは無理なようです。これができなかったのでWYSIWYG ImageFieldで作成した記事(ノード)はインポートできませんでした。しかし、言い換えれば複数のフィールド要素を持っていない場合はインポート可能だと思います。

Select a Processor

feedapi_2011092815

Settings for Node Porcessor

feedapi_2011092816
・テキストフォーマットには入力書式を設定します。
・コンテンツタイプに作成するノードのコンテンツタイプを設定します。

Mapping for Node Processor

feedapi_2011092817
・D6のときのように実際の結果が表示されないのでMAP設定は困難です。
※FetchをFile Uploadに設定した場合はソースは表示されませんのでフリーハンドで入力することになります。

(3)結果

D6のFeed API+Feed Element Mapperと同じことがFeedsでできることが確認できました。
しかし、FeedURLを設定したノードの表示が以前のようにメニューからは選択できないので、それが気になります。
また、今回はターゲットノードがMedia(Media+MediaFront)だったために「File Entity」の影響なども考慮することになってなかなかノードの作成(動画プレイヤーの表示)までが上手くいきませんでした。このMedia+MediaFrontについては別の記事に記載します。

Drupalバージョン

Drupal 6.x Drupal 7.x