Esportare dati da Drupal 7 in formato CSV o XML con PHP

Come si possono esportare i dati di un sito Drupal 7 in formato CSV o XML? Spesso è necessario dover memorizzare i contenuti delle entità (come nodi, commenti, utenti, ordini commerce ecc.) in formato CSV o XML. In questo articolo verrà presentata una soluzione per programmare una semplice procedura in PHP che genera un file contenente i dati da esportare.

Esportazione di dati Drupal in formato CSV ed XML
Esportazione di dati Drupal in formato CSV ed XML

Preparazione dei dati con Views data export

Uno dei sistemi più usati per esportare i dati di entità Drupal 7 su file è l’uso del modulo Views data export. Questo modulo permette infatti di creare una vista e salvarne l’output in diversi formati.

In particolare sono supportati i formati CSV ed XML, inoltre permette anche di salvare file XLS, DOC e testo semplice.

Il modulo funziona molto bene ed inoltre permette di richiamare le viste attraverso drush per automatizzare la creazione dei file ma però ha una grosso difetto: il comando per drush non accetta argomenti della vista come parametri vanificandone l’utilità in moltissimi casi.

Vediamo quindi come sfruttare in modo diverso questo modulo all’interno di uno script PHP personalizzato per risolvere il problema.

Come creare uno script PHP per l’esportazione dei dati

Visto che il modulo Views data export non è sufficiente per una procedura di esportazione dati complessa, lo possiamo integrare all’interno di un modulo per Drupal scritto in PHP.

Per prima cosa dovrà essere creata una vista usando il modulo Views data export. Questa vista serve per creare il file CSV o XML con i dati desiderati ed in questa si possono impostare gli eventuali argomenti (parametri).

Successivamente la vista può essere eseguita attraverso del codice PHP usando la funzione views_embed_view() che permette di passare alla vista gli argomenti desiderati.

Il risultato dell’operazione sarà una stringa contenente i dati nel formato specificato nella vista.

A questo punto abbiamo a disposizione una variabile che potrà essere memorizzata in un file e si potrà pianificare l’esecuzione dello script usando il metodo che più si preferisce, ad esempio con un processo cron di sistema oppure gestito da Drupal.

Note per la programmazione dello script

Attenzione: il modulo Views data export imposta l’header HTTP Content-Type in formato text/csv (o text/xml) e ciò potrebbe causare alcuni problemi. Pertanto è consigliato reimpostarlo in formato ‘text/html’ dopo aver richiamato la funzione views_embed_view.

Ecco quindi alcuni frammenti di codice PHP per esportare dati da Drupal 7 in maniera programmatica.

  • Codice per salvare il risultato della vista in una variabile:
$out = views_embed_view('nome_vista', 'nome_display',  ...parametri... );
  • Codice per reimpostare l’header HTTP:
drupal_add_http_header('Content-Type', 'text/html; utf-8');
  • La variabile $out conterrà il risultato della vista e potrà essere memorizzata in un file, ad esempio così:
file_put_contents('nome_file', $out);

Si può usare questo stesso meccanismo per inviare i dati ad un webservice in formato XML. Grazie al modulo Views data export non è necessario programmare manualmente la parte legata al caricamento dei dati ed alla preparazione del file.