web-dev-qa-db-ja.com

フィードインポートモジュールのトリガー

Drupal 7JSONファイルによってフィードされる予定のWebサイト。このファイルは実際には、定期的に(例では3時間ごとに)実行されるETLツールによって処理および更新されます。

ETLツールが出力JSONファイルを処理したら、Drupal Feedsモジュールにインポートを開始するように指示する方法が必要です。

出来ますか ?それともCRONでこれを行う必要がありますか?

理想的には、このジョブは特定のURL呼び出しによってトリガーされます(CRONが特定のURLにアクセスして手動で呼び出せるのと同じように)。

3

@Gaydaburaの手がかりに基づいて、モジュールを作成しました。ここに答えがあります:

1。独自のパスを定義するためにhook_menuを使用

function toot_menu() {
  $items = array();
  $items['toot/import'] = array(
    'page callback' => 'toot_callback',
    'title' => 'Import tool',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK
  );
  return $items;
}

2。ドキュメントを使用してデータを解析する関数を記述

function toot_callback($key = '') {
  if ($key != 'defined_key') {
    return t('Unauthorized access');
  }
  else {
    $myFeed = feeds_source('feed_unique_id');
    while (FEEDS_BATCH_COMPLETE != $myFeed->import());
    return t('Import successfull');
  }
}
3

プログラムでフィードインポーターをトリガーする場合-

1) feeds_source() を使用してフィードソースをロードします-引数importer id [これはインポーターのマシン名です; 'feeds_source'テーブルで確認できます]

$feeds_source = feeds_source([importer_id]);

2)構成をセットアップします-

$feeds_config = $feeds_source->getConfigFor($feeds_source->importer->fetcher);
$feeds_config['source'] = $url;//url of file | url of site

3)設定をフィードソースに設定します

$feeds_source->setConfigFor($feeds_source->importer->fetcher, $feeds_config);
$feeds_source->save();

4)インポートを開始します

$feeds_source->startImport();

Urlからデータを取得するためにこれを実装しました。ファイルで試したことはありませんが、これは動作するはずですが、構成部分にいくつかのマイナーな変更がある可能性があります。

それ以外の場合は、cronを使用してもフィードをトリガーできると思います。 Elysia Cron は、「各タスクを細かく制御し、カスタムcronジョブをサイトに追加するいくつかの方法」を提供する優れたモジュールです。

これがお役に立てば幸いです。

2
SGhosh