フィードモジュールを使用してリモートコンテンツを正常にインポートできます。手動でインポートボタンをクリックします。モジュールから、またはルールモジュールからPHPコードを実行して、コードからインポートプロセスを実行する必要があります。
カスタムモジュールで次のコードを試しました。
_function imports_cron_cron(){
drupal_set_message('Import-CRON responding to cron execution! ...');
$importer_id = 'publications_import';
$url = "http://xml/url";
$feeds_source = feeds_source($importer_id);
$feeds_config = $feeds_source->getConfigFor($feeds_source->importer->fetcher);
$feeds_config['source'] = $url;
$feeds_source->setConfigFor($feeds_source->importer->fetcher, $feeds_config);
$feeds_source->save();
$feeds_source->startImport();
drupal_set_message(' .... ENDING IMPORTS-CRON CALL!');
}
_
drupal_set_message()
呼び出しは両方とも正常に実行されますが、ノードはインポートされません。
誰か助けてもらえますか?
コードは問題ないようです。私は私のプロジェクトの1つ(これはcsvインポーター、同様の概念)でいくつかの同様のコードを使用します:
function custom_function($importer_id, $csvfile_path) {
// Load the Feeds Source object.
$source = feeds_source($importer_id);
// Load the source fetcher config.
$fetcher_config = $source->getConfigFor($source->importer->fetcher);
$fetcher_config['source'] = $csvfile_path;
$source->setConfigFor($source->importer->fetcher, $fetcher_config);
$source->save();
$source->startImport();
}
フォアグラウンド構成を使用していることを確認してください。これにより、バッチプロセスを「内部」で実行できますdrupalプログレスバーが表示されます。または、強制することもできます。
// Tweak the importer configuration, to enable "Process in the background".
$config = array(
'process_in_background' => TRUE,
);
$source->importer->addConfig($config);
// Execute the import.
別のアプローチはそれをスケジュールすることです
// Schedule the import, and make sure importer is scheduled, too.
$source->schedule();
$source->importer->schedule();
私はこれについてたくさん見ました。これが私の見解です。コマンドラインからこれを実行でき、インストールプロファイルから実行できるようにしたいと考えています。
したがって、以前の回答と documentationIveseen /からヒントを得て、Iveは、
このためにバッチAPIを使用しないでくださいunless
a)フォームapiからこれを実行している(ユーザーがクリックする)
または
b) drushコマンド を作成している。
これがモジュールのインストールで機能したものです
function load_data(){
// Files to import in specific order.
$files = array(
'challenge_importer' => 'data/challenges.csv',
);
$file_location_base = drupal_get_path('module', 'challenge');
foreach ($files as $feed => $file) {
$feedSource = feeds_source($feed);
// Set the file name to import
$filename = $file_location_base.'/' . $file;
if (!file_destination($filename, FILE_EXISTS_ERROR)) {
$config = $feedSource->getConfig();
$config['FeedsFileFetcher']['source'] = $filename;
$feedSource->setConfig($config);
$feedSource->save();
while (FEEDS_BATCH_COMPLETE != $feedSource->import());
}
}
}
どこ
データはモジュール/データに保存されます
この構造では、複数のファイルを定義された順序でインポートできます。
私はあなたがもっと何かをする必要があると信じています
$node = new stdClass();
$node->type = 'feed';
$node->title = 'My feed';
$node->feeds['FeedsHTTPFetcher']['source'] = 'http://example.com/rss.xml';
node_save($node);
https://drupal.org/node/6227 (プログラムによる操作)をご覧ください。