Migre static - plugin revisité pour la migration d’un site

pour passer d’un ancien site statique à SPIP

Passer d’un ancien site (statique ou avec un autre gestionnaire exotique) à SPIP sans en perdre le contenu et en disposant de tous les outils de SPIP : une migration de vos anciennes pages en articles et hop un site tout neuf... ou presque !

Ce plugin permet d’importer en masse des articles d’un ancien site statique (dont vous détenez les droits) dans votre nouveau site SPIP. Chaque ancienne page donnera un article. Vous pouvez choisir la rubrique et le mot-clé associé aux articles ainsi importés.

Télécharger le plugin

  • Ce plugin est disponible sur spip-zone ici :
    Dernière version du plugin migre_static sur spip-zone
  • vous y avez accès ici aussi

Installation et activation du plugin

Comme tous les plugins de SPIP, vous installez « migre_static » dans le répertoire plugins situé à la racine de votre site SPIP comme indiqué ici sur spip.net. Puis vous vous rendez dans l’espace privé et activez le plugin. Une fois activé dans la navigation des rubriques une case supplémentaire (à droite) s’affichera : « Migration d’un site statique ».

Chargement du plugin

Réaliser une migration de site

Avant de démarrer, il important de bien faire le point sur ce qui va se passer :

  1. On va définir, dans un fichier, la liste des anciennes pages (URLs) à migrer, ainsi que la ou les rubriques (dans le site SPIP) qui vont les contenir.
  2. Une fois ce fichier prêt, on le dépose sur l’ancien site. Ceci permet de vérifier que vous en possédez bien les droits !
  3. Puis on déclenche la migration. Celle-ci se déroule en plusieurs étapes. Par défaut, c’est une migration à blanc qui est proposée. C’est à dire que le plugin va vous montrer comment va se passer cette migration (pour quelques pages seulement) sans rien ajouter dans votre site SPIP. Si le résultat vous convient vous pourrez relancer la migration réelle cette fois.

Regardons maintenant en détail, chaque étape.

1. Construire la liste des pages à migrer

Pour migrer votre ancien site vous devrez construire la liste des pages que vous voulez importer (migrer). [1]

La description des pages à migrer doit se présenter sous la forme d’un fichier XML (un simple fichier texte [2] avec une présentation à respecter).

Voici un exemple d’une telle description reprise dans :

Exemple de description simple
Exemple de description complète
<migre_desc>
<rubrique>
	<titre>Anciens jeux</titre>
	<lang>fr</lang>
	<article>
		<titre>Premier jeu</titre>
		<url>http://www.jeux.com/jeu1.html</url>
	</article>
	<article>
		<titre>Deuxième jeu</titre>
		<url>http://www.jeux.com/jeu2.html</url>
	</article>
	<article>
		<url>http://www.jeux.com/jeu3.html</url>
	</article>
</rubrique>
<rubrique>
	<titre>Old games</titre>
	<lang>en</lang>
	<article>
		<url>http://www.jeux.com/game1.php?info=yes</url>
	</article>
	<article>
		<url>http://www.jeux.com/rep/game2.html</url>
	</article>
</rubrique>
</migre_desc>

-  La première rubrique « Anciens jeux » contiendra 3 articles, importés des URLs dont la liste est décrite (jeu1.html, jeu2.html...).
-  La deuxième rubrique « Old games » contiendra 2 articles, importés eux aussi des URLs qui sont décrits dans le bloc de cette dernière rubrique.
-  Vous pouvez forcer un titre pour un article. Celui-ci prendra la place de ce qui était indiqué dans votre ancienne page.

Vous noterez au passage que :

  • On peut définir la langue d’une rubrique.
  • Lorsque la langue des pages importées n’est pas définie explicitement c’est la langue de la rubrique qui les contient qui sera utilisée dans SPIP.
  • La définition de la langue n’est pas obligatoire. Dans ce cas c’est la langue de la rubrique mère, ou celle du secteur, qui sera utilisée.

Cas particuliers

Il est possible de spécifier des informations supplémentaires dans votre description des pages à migrer.

<rubrique>
	<id>2</id><!-- permet de spécifier un numero de rubrique déjà existant -->
</rubrique>
<rubrique>
	<titre>Sous rubrique de la rubrique numéro 2</titre>
	<id_parent>2</id_parent> <!-- permet de créer cette rubrique comme sous-rubrique de la rubrique numéro 2 -->
</rubrique>

Et quelques autres encore que je vous laisse découvrir.

Utilisation de la description des pages à migrer

Une fois ce fichier créé, appelons le migre_description.xml par exemple. Il faut maintenant le déposer sur le site statique ( dans notre exemple : http://www.jeux.com/ ) de sorte qu’avec votre navigateur vous puissiez le consulter en ligne ( par exemple : http://www.jeux.com/migre_description.xml ).

Cette condition est rendue obligatoire pour s’assurer que vous avez bien le droit d’accès aux données du site en question.

Attention : Seules les pages dont l’URL est similaire à celle du site statique seront importées. Les autres seront ignorées.

2. Initialisation de la migration

Dans l’espace privé de SPIP, en tant qu’administrateur, vous allez dans une rubrique "principale" (pas nécessairement un secteur) dans laquelle vous souhaitez importer les rubriques et les articles, par exemple une rubrique créée pour l’occasion : Import ou Archives. Vous cliquez sur « Migration d’un site statique->saisie des informations ».

Démarrage de la migration à partir d’une rubrique

Vous accédez alors à la page de Saisie des informations pour la Migration d’un site statique. Il vous faudra renseigner :

  • obligatoirement : L’adresse de la liste des pages à importer, par exemple : «  »" class="spip_url spip_out auto" rel="nofollow external">http://www.jeux.com/migre_description.xml».
  • de façon facultative : choisir un mot-clé (Article) qui sera mis sur chaque article ainsi créé (par exemple le mot-clé Archive). Le choix d’un mot-clé n’est pas obligatoire.
  • obligatoirement : choisir s’il s’agit d’un import à blanc (le résultat des pages importées est seulement affiché après traitement) ou si vous lancez la migration effective. Je vous recommande un test à blanc (avec quelques pages) avant de vous lancer en masse !!!

Puis vous pouvez déclencher la migration (ou le test à blanc) en appuyant sur le bouton « Valider ».

Saisie des informations de la migration

3. Réalisation de la migration

Selon que vous avez choisi un import à blanc ou une migration réelle :

  • Pour chaque page (donc chaque article) sera affiché (s’il a pu être importé) : une fenêtre avec son affichage après traitement de SPIP (#TEXTE), une fenêtre avec sa source comme si vous éditiez un article.
Résultat de la migration de pages à blanc
  • En cas d’import réel , pour chaque page est affiché le titre de l’article et son numéro. En cas d’erreur, le message d’erreur est affiché pour chaque page concernée.
Résultat de la migration de pages

4. Mise à jour des liens ( URLs )

Une fois l’import réel effectué, vous pourrez effectuer la « mise à jour des liens ».

-  Les liens relatifs ou absolus sont mis à jour automatiquement au moment de la migration (si c’est possible).
-  Si vous effectuez une migration par blocs (plusieurs fichiers de description), une possibilité supplémentaire de mise à jour est proposée en cliquant (à la fin de l’étape 2) sur l’option « de mise à jour des liens ». Cette fois c’est l’intégralité des articles qui sera parcourue pour effectuer cette mise à jour et non pas seulement le bloc importé.

Dans notre exemple :

  • si dans l’article « Premier jeu », j’ai un lien du type <a href="http://www.jeux.com/jeu2.html">Allez voir ce jeu</a>
  • Il sera remplacé par [Allez voir ce jeu->art1012] où art1012 sera le numéro de l’article créé pour l’article « Deuxième jeu ».

Fonctionnalités détaillées

Un petit inventaire non exhaustif des fonctionnalités de ce plugin :

  • import massif de pages web à partir d’une liste fournie par l’utilisateur,
  • possibilité de pré-visualisation des articles avant une migration réelle (import à « blanc »),
  • la possibilité d’indiquer la rubrique d’import dans la liste sous la forme <rubrique></rubrique> par blocs.
  • la possibilité de forcer la langue : <lang></lang>
  • au moment de l’import :
    • nettoyage du code (tidy) HTML de la page d’origine,
    • extraction du titre du document,
    • extraction de la langue du document, si celle-ci n’est pas définie, utilisation de la langue par défaut de la rubrique contenante,
    • extraction du corps de la page à importer au minimum la partie comprise entre les balises BODY,
    • conversion du jeu de caractères de la page vers celui utilisé par le site utilisant SPIP,
    • possibilité de réduire le bloc à importer à une zone définie du BODY,
    • conversion du HTML en balises typographiques de SPIP par le biais de filtres successifs,
    • possibilité d’ajouter des filtres, de modifier les filtres standards avant import des pages,
    • ajout éventuel de mot-clés pour tous les articles importés,
    • affichage du lien vers les articles créés lors d’un import réel,
  • action optionnelle pour Découper un texte en pages et/ou en onglets à l’aide du plugin Couteau Suisse, si ce plugin est installé ainsi que cette fonction. La balise de découpage ++++ est insérée en amont de chaque intertitre.
    • Transformation des liens internes d’origine vers les articles importés lorsque c’est possible.
    • réduction de l’affichage des parties affichées et traitées (seulement les 5 premières pages) lors d’un import à blanc

Historique

Inspiré de Faire migrer un site statique vers SPIP cet outil a été entièrement revu pour être intégré sous forme de plugin. Les fonctionnalités supplémentaires sont :

  • certains traitements ont été améliorés notamment l’encodage (UTF-8, ISO8869 etc.),
  • des possibilités de tests (import à blanc),
  • un niveau « expert »
  • intégration complète dans l’interface de SPIP, notamment du point de vue des rubriques et des mots clés.
  • Internationalisation : fourni en français et en anglais, et support d’autres langues (pour peu que quelqu’un fournisse les fichiers de langue !).

A la différence de Le bouton mémo, il permet de :

  • ne migrer que des pages d’un site que l’on possède. En effet, contrairement au bouton mémo, il est possible d’importer/copier un site complet sans problèmes. D’où la nécessité de brider cette copie, chose que ne permet pas le bouton mémo, même s’il reste dans du page par pages...
  • de migrer des dizaines, voire des centaines de pages d’un seul bloc, ou rubrique par rubrique.
  • de fonctionner comme un plugin et de respecter l’architecture de SPIP (action, exec) et de ne pas être un mélange de squelette, de formulaire et de fonctions... Bref, plus propre j’espère !

Paramètres avancés - niveau expert

Pour ceux qui voudraient améliorer le rendu de la migration certains paramètres peuvent être modifiés avant démarrage de la migration. Attention ce sont des expression régulières PCRE (utilisée par la fonction PHP preg_replace). Certaines sont préremplies : c’est le traitement standard prévu.

Lors de l’initialisation de la migration, en cliquant sur la flèche Filtres de conversion des balises HTML, vous pourrez :

  • avec la balise de début et de fin de bloc : sélectionner la partie du BODY qui vous intéresse (seule la partie située entre ces deux balises sera prise en compte dans l’article importé). Ceci peut être utile si on veut éviter de récupérer le haut de page ou d’anciens menus qui n’ont pas d’intérêt dans un article. Voir en fin de page pour plus d’explications.
  • Pour chaque balise vous pouvez modifier : son mode de sélection, sa conversion éventuelle (une conversion vide implique la suppression de la balise, un filtre de sélection vide implique qu’il n’y aura pas de traitement).
  • Vous pourrez ajouter vos propres filtres de pré-traitement et/ou de post-traitement.
Paramétrage pour les experts

Utilisation de CFG

La configuration du plugin migre_static utilise le plugin CFG (qui doit donc être installé). C’est optionnel (au moment de la rédaction de cet article). Cela permet un accès plus simple au paramétrage de la migration et à certains aspects non accessibles par ailleurs.

Fonctionnalités envisagées - TODO

  • de même la possibilité d’indiquer le mot clé dans la liste (à intégrer dans le fichier de description)
  • amélioration des filtres
  • présenter les filtres sous forme dynamique (formulaire web à enrichir)
  • définition des balises de début et fin de bloc par rubrique, par article
  • de même pour les balises de conversion
  • rendre possible la définition de balise de bloc qui ne soient pas des expressions régulières mais une simple chaîne à comparer (strcmp)

Pour définir le bloc à importer de chaque page

Vous pouvez utiliser le même système que ci-dessus pour ajouter un <!-- BEGIN --> et <!-- END -->, il suffit de remplacer, par exemple, un <div id="article">

par un <!-- BEGIN --><div id=article>

et un <!-- END --><div id=footer">

(la balise juste après le div de l’article) avant de lancer la migration. Dans ce cas vous pouvez renseigner les balises de début de bloc et de fin de bloc dans la partie « configuration avancée » avec l’exemple fourni dans cette page.

Notes

[1Dans la précédente version cette liste était une simple suite d’URLs ligne par ligne. Ce format est toujours supporté, mais présente de nombreuses limitations

[2en UTF-8

Discussion

7 discussions

  • Bonjour,
    Ce plugin est-il en remaniement ou bien remplacé par un autre ?
    Merci beaucoup.

    Répondre à ce message

  • 4

    Bonjour...

    Pb numero 1 : sur un fichier xml assez complexe, le plugin ne me garde qu’une seule rubrique et mets tous les articles dedans

    Pb numero 2 : je n’arrive à récupérer aucun texte.
    J’ai tenté de trouver le contenu des fonctions :

    		$body=migre_chercher_body($page_a_traiter);
    //echo "longb:".strlen($body)."<br>\n";
    		$body=migre_filtrer_body($body);
    //echo "longv:".strlen($body)."<br>\n";
    		$body=migre_nettoie_url($body,$adresse);
    //echo "longd:".strlen($body)."<br>\n";
    		$body=migre_html_to_spip($body);

    qui sont utilisées dans inc/migre_class.php mais je n’ai pas réussi à les trouver...

    Avez vous une idée du pb ?

    • Oui j’ai quelques idées. J’ai commencé à corriger mais je suis pris par le manque de temps malheureusement. Je ne lâche pas l’affaire car j’en ai moi-même besoin...

      Dès que les tests de la version corrective seront nickel je publie et on pourra voir si cela corrige les problèmes que vous avez rencontré.

    • Hello Chryjs...

      Je suis en train de bosser dessus aussi ...

      Si tu pouvais publier au risque de casser (c’est pas hyper grave)... on pourrait avancer un peu plus vite certainement...

      Je suis sur la reconnaissance des raccourcis spip principalement en ce moment...

      Je peux publier mes modifs si ca t’intéresse...

      kent1

    • Je voudrais bien mais pas le temps...
      C’est vraiment trop buggué et sans doc...

      N’hésite pas à publier sur SVN je rattraperai sans soucis (j’espère).

    • Est-ce que une version post 1.9 est disponible quelque part ?

    Répondre à ce message

  • josephtux

    Bonjour,

    Ce plugin permet-il de remplacer uniquement la page d’accueil de SPIP ? ( par une page statique, avec sa feuille de style, la seule à ne pas utiliser SPIP )

    Sans une aide (et sans ce plugin, je n’y arrive pas, sauf en mettant spip dans un sous répertoire et un sous-domaine, et la page d’accueil dans la racine du domaine ) Mais dans ce cas la page d’accueil de spip est celle qui est renvoyée par le bandeau et autres liens vers sommaire.html de SPIP

    L’idée de base était de remplacer spip/squelettes/sommaire.html , mais c’est en vain

    Merci à tous

    Répondre à ce message

  • bonjour assistance informatique

    Est ce possible de migrer ce site bonjour assistance informatique qui tourne sous Wordpress vers SPIP que je trouve plus souple ?

    Répondre à ce message

  • test en vue de l’utilisation du plugin avec SPIP2 -> presque bon
    -  Le formulaire issu du lien disponible dans les rubriques : /ecrire/?exec=migre_formulaire&id_rubrique=2 fonctionne correctement mais
    -  Le formulaire de la page cfg du plugin : /ecrire/?exec=cfg&cfg=migrestatic est incomplet, il lui manque la partie déroulante du bas : Filtres de conversion des balises HTML (facultatif).

    Je crois que je vais pouvoir l’utiliser pour récupérer un site en statique, merci pour le travail. A un petit bug près il me semble que le plugin mérite le tag « SPIP2 »

    Répondre à ce message

  • Bonjour,

    J’ai utilisé ce plugin mais n’ayant pas réussi à paramétrer le chemin du dossier images dans le site statique, je me retrouve avec des messages d’erreur à la pelle : vérifiez vos droits IMG/distant...

    Merci
    conil26

    Répondre à ce message

  • Bonjour,

    Est-ce que le plugin a été mis à jour depuis les derniers commentaires ?
    Je voudrais, grâce à ce plugin, faire la migration d’un site Joomla vers SPIP...

    Cordialement,

    Teddy

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom