it-swarm.com.de

Importieren Sie programmgesteuert einen Feed

Ich kann Remote-Inhalte mithilfe des Feeds-Moduls erfolgreich importieren, indem ich manuell auf die Schaltfläche Importieren klicke. Ich muss den Importvorgang aus Code ausführen, entweder aus einem Modul oder aus PHP Code aus dem Rules-Modul).

Ich habe den folgenden Code in einem benutzerdefinierten Modul ausprobiert.

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!');
}

Beide Aufrufe von drupal_set_message() wurden erfolgreich ausgeführt, es wird jedoch kein Knoten importiert.

Kann mir bitte jemand helfen?

6
sisko

Ihr Code scheint in Ordnung zu sein. Ich verwende einen ähnlichen Code in einem meiner Projekte (dies ist ein CSV-Importer, ähnliches Konzept):

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

Stellen Sie sicher, dass Sie die Vordergrundkonfiguration verwenden. Auf diese Weise kann der Stapelprozess "innerhalb" ausgeführt werden. drupal mit Anzeige des Fortschrittsbalkens. Oder Sie können ihn erzwingen:

// Tweak the importer configuration, to enable "Process in the background".
$config = array(
  'process_in_background' => TRUE,
);
$source->importer->addConfig($config);

// Execute the import.

Ein anderer Ansatz könnte darin bestehen, dies zu planen

// Schedule the import, and make sure importer is scheduled, too.
$source->schedule();
$source->importer->schedule();

Dies ist ein guter Artikel über Feeds Importer

13
jorgetutor

Ich habe viel darüber gesehen. Hier ist meine Meinung, ich möchte dies über die Befehlszeile und über ein Installationsprofil tun können.

wenn ich also Hinweise aus früheren Antworten und aus dem DokumentationIvegesehen /gefunden habe, bin ich zu der Erkenntnis gekommen, dass

verwenden Sie hierfür nicht die Batch-API , es sei denn

a) Sie tun dies über die Formular-API (ein Benutzer klickt)

oder

b) Sie schreiben ein Drush-Befehl .

das ist es, was ich in einer Modulinstallation zum Laufen gebracht habe

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

wo

  • challenge_importer ist ein Feed-Importeur.
  • herausforderung ist das Modul.
  • daten werden in Modul/Daten gespeichert

    mit dieser Struktur können Sie mehrere Dateien in einer definierten Reihenfolge importieren lassen.

1
Tim Marsh

Ich glaube, Sie müssen etwas ähnlicheres tun

$node = new stdClass();
$node->type = 'feed';
$node->title = 'My feed';
$node->feeds['FeedsHTTPFetcher']['source'] = 'http://example.com/rss.xml';
node_save($node);

Sie sollten einen Blick auf https://drupal.org/node/6227 (Programmatic Operations) werfen.

0
Steven