Importer du contenu avec Drupal Rodolfo Ripado
Qui suis-je? Rodolfo Ripado, alias gaspaio Lead développeur Drupal chez Membre enthousiaste de la communauté Drupal Modules : Simple Subscription, Custom Tokens, Swftools Plugins(en cours de publication) Cuisine régulièrement des données à la sauce Drupal
Un accompagnement open source à 360 Novembre 2011 Présentation d'alter Way
Les imports de contenus Quand avons-nous à faire à des imports? Migrations : refontes de sites avec récupération des données Synchronisations : transferts de données entre différentes plateformes Aggrégation de contenus (RSS, Twitter,...) Les imports : un problème récurent!
Est-ce compliqué? Souvent... Un site Drupal moyen atteint facilement les 80 modules et les 150 tables, hétérogènes et interdépendantes Chaque import semble unique Solutions coûteuses et non réutilisables Difficile à estimer Beaucoup de complications inattendues
T.O.C. Concevoir un import de données vers Drupal Les étapes - Les subtilités - La checklist Tous les chemins mènent à Drupal... mais comment? Les outils disponibles - Choisir son outil Feeds Migrate Pour aller plus loin
Les étapes d un import Extraire Transformer Enregistrer Combiner Mapper Filtrer node_save() user_save() taxonomy_term_save() Extraire : récupérer et parser les données d origine Combiner & mapper : re-arranger les données pour les faire correspondre à des objets Drupal Filter : néttoyer les données (trim(), strip_tags(),...) Enregistrer : utiliser l API Drupal pour Stocker les nouveaux contenus Drupal Mettre à jour des contenus existants
Les subtilités des imports La propreté des données d origine sont les données conformes au format annoncé? La quantité des données (500 ou 50.000 nodes)? Les références et les données croisées Les médias la localisation, la taille et le format des fichiers Les ressources de l équipe avons-nous de bons développeurs disponibles pour le projet? La disponibilité du client pour répondre aux questions
La checklist de l import Extraire Préférer les bases de données aux fichiers Bien définir les formats d origine Avoir une idée claire des relations entre les données d origine Déterminer des critères de validité des données Transformer Clarifier les transformations possibles des données Avoir une table de correspondances claire
La checklist de l import (fin) Enregistrer Selon la quantité de données, les outils/procédures ne seront pas les mêmes Mettre en place des outils de communication développeurs-client rapides Pour les grandes quantités, préférer les migrations par synchronisations successives plutôt qu un seul gros import. La méthode est aussi importante que la technique!
Les outils disponibles Les modules spécifiques User import framework (CSV only, vise à la simplicité plutôt qu à l exaustivité) User import (5-6.x only) Node import (6.x only, semble semi-abandonné) Les frameworks génériques Feeds : un moteur générique d aggrégation de contenus Migrate : enfin un vrai ETL pour Drupal?
Comment choisir son outil? Bonus habituels d un bon module Drupal Développeurs actifs et réactifs Richesse de l éco-système (plugins, patches, etc) Code de qualité, APIs claires Documentation abondante Fonctionnalités secondaires importantes : Rollback, mise à jour de contenus existants Support de la Batch API, des imports via le Cron et/ou via Drush Configuration via l interface graphique
Feeds Au début il y avait FeedAPI Moteur d agrégation de contenus RSS, ATOM, CSV, ical Développé rapidement pour les besoins de la distribution Managing News Entièrement refait à neuf autour de 2009 Feeds : framework d import de contenu dans Drupal Très flexible (une API simple et bien documentée) Configuration via GUI Intégration à Features Nombreux goodies... Maintenu par des Drupal Rock Stars : @alex_b, @davereed
Feeds: architecture & goodies Un Feeds Importer est un objet avec 3 composantes : Fetcher : extrait les données d une source et les convertit en string Parser : analyse la string et construit un tableau PHP Processor : construit un objet Drupal et l enregistre via l API Les bonus Intégration à la Batch API : import par étapes Possibilité d importer par le cron (via job_scheduler) Feeds Tamper : interface graphique pour filter les données
Feeds : les + et les - Les + : Facilement configurable, intégration facile des nouvelles classes à l interface graphique Ecosystème riche et actif : parsers et mappers à foison... De nombreux addons pour affiner son import sans coder Un système de log de messages intégré Les - : Le code n est pas toujours bien commenté Utilisation de la Batch API : peu performant lors de gros imports Gestion des ressources très limitée
Migrate Développé par Cyrve, start-up américaine spécialisée dans les problématiques d imports massifs (maintenant Acquia) : The Examiner.com The economist Moshe Weitzman : Mr Drush. Migrate : un outil robuste pour dévelopeurs et chefs de projet.
Migrate : architecture Tout se passe dans les classes Migration : Définition de l équipe technique, de la source et de la destination Ajout des mappings des champs : Option Callback : permet de filter les valeurs avant l import Option SourceMigration : permet de retrouver les identifiants d objets précédemment importés Gestion de valeurs multiples Modèle de migrations successives et interdépendantes Gestion dynamique des ressources machine : Intégration à la Batch API et surtout à Drush Calcul des timeouts et des limites de mémoire à la volée
Migrate : les + et les - Les + : Prise en charge native de structures de données complexes Très performant grâce à sa gestion des ressources à la volée Intégration à Drush (migrations/mises à jour scriptables ) Interface graphique orientée reporting De nombreux exemples disponibles, prise en main aisée pour le dévelopeur PHP moyen Les - : Il faut coder... Relativement jeune, donc écosystème un peu limité cf. migrate_extras (http://drupal.org/project/migrate_extras)
Pour aller plus loin Drupal.org évidemment... http://drupal.org/project/feeds http://drupal.org/project/migrate Migrating to Drupal : http://drupal.org/documentation/migrate Les présentations de Moshe Weitzman : http://london2011.drupal.org/conference/sessions/data-migrationdrupal http://www.acquia.com/resources/acquia-tv/conference/migratingsocial-content-drupal-1 Ou moi, dans 5 minutes autour d un café(!)
Où me joindre Si vous n avez pas le temps pour un café(!)... Sur le stand d rodolfo.ripado@alterway.fr ggaspaio@gmail.com Drupal.org / Twitter : Gaspaio Des questions?