web-dev-qa-db-ja.com

XMLデータを定期的にインポートするように移行をスケジュールする

1時間に1回など、定期的にXMLをインポート/更新するようにMigrateをスケジュールすることはできますか?多分ルールで?

編集:ルールをフックするために、このためにモジュールのスケルトンを作成しました。

イベント:インポートされていないノードがある場合、または最後のインポートから15分以上経過している場合

条件:移行のマシン名とその終了日のタイムスタンプ

アクション:2つ必要です。1つはインポートとロールバックを行い、もう1つは更新とインポートを行います。

アクションを開始するために呼び出す関数と、引数を取得する関数を見つけるのに苦労しています。コアの移行関数(フィールドハンドラーなどではない)に関する適切なドキュメントがあるので、必要な関数を確認できますか?

編集2このcron関数で終了しました。これはどのように書かれていますか?そして、私はそれを私のモジュールの残りの部分に置くことができますか?また、インポート済みのノードを更新するように指定する必要もあります。それ、どうやったら出来るの?

    function mymodule_cron() {
            $last_run = variable_get('mymodule_last_cron', 0);
            $interval = variable_get('mymodule_interval', 60);
            if(time() - $last_run > $interval){
                 variable_set('mymodule_last_cron', time());
                 $migration = Migration::getInstance('ImportNodes');
                 $result = $migration->processImport();
            }
     }
2
dodododo

目標を達成するための最良の方法は、ルールではなくDrupalのcronを使用することだと思います。

Cronは、必要な頻度に応じて、関数の実行をトリガーするサービスです。

移行を実行するには、カスタムモジュールに hook_cron を実装する必要があります。スクリプトに必要な頻度に注意する必要があります。 この例 が便利だと思いました。

プログラムで移行を実行する方法は?述べたように here 、それは非常に簡単です:

<?php
  $migration = Migration::getInstance($machine_name);
  $result = $migration->processImport();
?>
3
ermannob

Drupal 8の場合、 Migrate Scheduler モジュールを使用できます。内部的にCron APIを使用します。

移行スケジューラモジュールは、特定のスケジュールで移行を実行する機能を提供します。

PS:私はモジュールの作者であり、メンテナーです。フィードバックは 問題キュー で歓迎されます。

0
AjitS

フィードモジュール をご覧になりましたか?それは多分あなたがやろうとしていることであなたを助けるかもしれません。また、 Feeds XPath Parser は、特定のXMLで役立ちます。

0
Karl Jóhann