Drupal:以编程方式运行Feeds Importer - 在何处放置代码

时间:2014-03-24 17:43:26

标签: drupal-7 drupal-feeds

使用Cron运行Feed导入程序时,导入程序会超时,导致导入不完整。我尝试使用脚本来执行导入程序,并且我已经多次遇到过此代码:

<?php
function MODULE_NAME_cron() {
  $name = 'FEED_NAME';
  $source = feeds_source($name);
  $source->import();
}
?>

然而,当执行此操作时,我收到一条错误消息,说没有feed_source()函数,这让我相信我只是不知道在哪里放这个代码(一个单独的php文件就是不是& #39;为我工作)。有人可以帮我从这里出去吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您需要调用$source->startImport();方法而不是$source->import();

答案 1 :(得分:0)

我刚刚在这里发布了一个类似问题的答案:https://drupal.stackexchange.com/questions/90062/programmatically-execute-feed-import/153434#153434,这可能有所帮助。简而言之,如果您使用批处理api,则在表单提交挂钩中,或者如果您正在使用批处理API,则不使用批处理api(安装挂钩,安装配置文件)

所以在你的情况下

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());
    }
  }
}

可以从cron调用,或者使用feed导入程序的计划执行