Nota Spip-contrib
Une contrib pas complètement bordée, mais qui devrait intéresser du monde, donc publication. N’hésitez pas à utiliser ce forum pour vos suggestions et contributions.
Il existe désormais un plugin pour SPIP>1.9 réalisé par chryjs, qui rempli encore mieux cette fonction que ce squelette : Migre static - plugin de migration d’un site. À moins que vous n’utilisiez une version de SPIP plus ancienne que la 1.9, vous avez tout intérêt à vous tourner vers le plugin.
Objectifs du squelette :
Récupérer toutes les pages d’un site web statique pour en faire des articles dans SPIP. Tout cela en prenant quelques précautions :
- Veiller à améliorer le coté sémantique et à rendre l’article modifiable dans SPIP par des rédacteurs : transformer autant que possible le HTML des pages web en raccourcis typographiques de SPIP.
- Rendre les images, documents et liens valides dans SPIP : donc transformer les adresses web qui seraient relatives à l’ancien site en adresses absolues.
- Veiller à ce que les transformations ne soient pas destructives.
- Garder de la « traçabilité » : il doit être possible de comparer facilement le nouvel article (dans SPIP) avec l’ancien (sur le site statique).
Comment l’installer et l’utiliser :
Pour l’installer c’est très simple : placez le fichier « migration.html » dans votre répertoire de squelettes (en général « squelettes »).
Pour l’utiliser, il faut d’abord y faire des petites modifications :
Dans le code source du squelette il y a des commentaires comme :
« //***À modifier par les utilisateurs***
» aux alentours des lignes 34 et 57.
- Au premier endroit, ligne 34 :
//***À modifier par les utilisateurs***
$dochtml=recup_page('http://undomaine.truc/la_liste_des_pages.html'); //renseigner avec l'URL de la liste des pages
Vous devez modifier l’URL « http://undomaine.truc/la_liste_des_pages.html
» par l’adresse internet d’un fichier qui contient la liste des pages à migrer sous forme de liens absolus (du type « <a href="http://mondomaine.tld/chemin/truc/bidule/unedespages.html">titre ou bien http://mondomaine.tld/chemin/truc/bidule/unedespages.html</a>
»).
- Au second endroit, ligne 57 :
//Quelques variables qu'il faut changer en fonction des cas:
//***À modifier par les utilisateurs***
$auteur=18; //id_auteur de tous les articles récupérés dans SPIP
$id_rub=12; //id_rubrique de ces articles
$id_mot=151; //id_mot à affecter à chaque article.
Vous devez modifier les variables avec l’id [1] de l’auteur que vous affectez à l’article (ici n°18), de la rubrique dans laquelle vous mettez —sans doute temporairement— l’article (ici n°12) et d’un mot-clé que vous associez à l’article (ici le mot clé n°151. Cela me sert à identifier facilement les articles migrés automatiquement).
Si vous utilisez SPIP 1.8.3 ou des versions antérieures, vous devez créer à la racine de votre site SPIP un fichier nommé « migration.php3 » qui contient :
<?php
$fond='migration';
$delais = 12 * 3600;
include ('inc-public.php3');
?>
Pour Spip 1.9 et suivants, cette manipulation n’est pas nécessaire [2]
Ensuite il ne reste plus qu’à appeler la page du squelette concernée pour que la migration démarre : avec SPIP 1.9 et suivants c’est « http//votresite/spip.php?page=migration
», avec un SPIP plus ancien c’est « http//votresite/migrations.php3
».
Ce que ce script fait en détail :
- Ce squelette récupère une liste d’adresses internet contenues
dans la page webhttp://undomaine.truc/la_liste_des_pages.html
(à changer bien sûr), qui contient une suite de liens hypertexte vers les pages à migrer dans spip. - Pour chaque adresse du site statique récupérée, il extrait le titre (ce sera le titre de l’article SPIP), isole le
<body></body>
de la page et le traite de la façon suivante :- complétion des chemins relatifs, afin d’obtenir des chemins absolus,
- transformation des balises p, b, i, em, strong, hx en raccourcis typo de SPIP,
- transformation des liens type
<a href=""></a>
en[->]
à la SPIP.
- Puis le
<body></body>
modifié est intégré dans un nouvel article SPIP avec :- un auteur choisi
- un mot-clé choisi
- un lien vers la page originelle
- le tout dans une rubrique choisie
- l’article a le statut « en cours de rédaction »
- Affiche dans le navigateur le résumé de tous les travaux du script.
Les limites de la solution proposée :
La limite principale est que je ne sais pas du tout programmer ! J’ai bidouillé à droite à gauche, le nez dans la doc de php et en jetant des coups d’œils ailleurs sur le web. J’ai fait de nombreux tests chez moi et ça marche même si je ne suis pas encore satisfait.
Il est évident que compte tenu de mon absence de compétence en php, le code doit être particulièrement « gruik » comme disent les Geeks et donc truffé de bogues et amplement perfectible (donc, à vos contributions !)...
Ce qui me manque encore (TODO par quelqu’un d’autre parce que moi je suis pas sûr d’y arriver en moins de 10 ans) :
- Rendre le squelette plus accessible aux gens qui n’aiment pas se compliquer la vie : Le rendre capable de parcourir le site statique lui-même et d’y relever directement les adresses des pages à faire migrer (et non pas devoir passer par une série de find . -name "*.htm*">~/la_liste_des_pages.txt
et d’expression régulières en perl pour obtenir seulement la liste des pages web).
- rendre propre le HTML avant de le mettre dans Spip. Car les pages web statiques à migrer dans Spip ont été écrites avec divers éditeurs genre Frontpage et Dreamweaver et le code est très sale. Il n’est pas rare d’y voir :
<font face="Symbol"><p>·</font><font face="Arial"> </font><font face="Arial" size="2">Gniagniagnia<br>
<font face="Symbol" size="2">·</font><font face="Arial" size="2">
avec des balises non fermées bein sûr, etc. J’ai essayé avec tidy (voir code php dans le squelette), sans succès.
- Insérer les images et docs dans la base de donnée... Là c’est plutôt complexe. Je pense que je pourrais parvenir à tout insérer sans discernement et remplacer le HTML par le raccourci qui convient, mais le gros problème vient du fait que de nombreuses images (de déco principalement, genre puces et logos) sont réutilisées dans plusieurs pages web. Le pire étant que ces images, bien qu’identiques sont en plusieurs exemplaires sur le site statique, à des URL différentes.
- transformation de certains raccourcis typos comme :
-
- Les ancres et les hr à transformer en raccourcis typos
-
- Les ol/li et ul/li à transformer par des puces-typo de SPIP : il faut faire un truc récursif et ça me fait très mal à la tête d’essayer de trouver comment on fait.
-
- J’utilise la formidable contrib’ Génération automatique de numérotation, table des matières et références (dont on se demande pourquoi ce n’est pas encore en standard dans SPIP) de chtitux et mortimer et j’aurai aimé récupérer les niveaux des
<hx>
sous la forme de «{{{*
», où le nombre d’étoiles correspond au niveau du titre. Là encore, c’est un truc récursif qui m’échappe.
- J’utilise la formidable contrib’ Génération automatique de numérotation, table des matières et références (dont on se demande pourquoi ce n’est pas encore en standard dans SPIP) de chtitux et mortimer et j’aurai aimé récupérer les niveaux des
- Enfin ultime désir qui ne sera jamais satisfait : Que le code HTML des pages statiques soit nettoyé de tous ces horribles enchevêtrements de tableaux qui servent à la mise-en-page et vont casser celle de SPIP basée sur de merveilleux CSS. Mais est-ce humainement possible de concevoir ça ?
Pour conclure
Voilà ! Ce script (qui est devenu squelette parce que je n’arrivais pas autrement à utiliser « spip_query ») j’y réfléchis depuis environ un an (mais pas souvent hélas) et je me suis mis à écrire (et surtout débugger chaque instruction, tant je suis nul) depuis quelques semaines. Il va me rendre un fier service car je n’ai pas loin de 2000 pages statiques à faire passer dans SPIP.
Il ne fait pas tout le boulot (classement dans SPIP dans les bonnes rubriques et avec les bon mots-clés, récupération de l’auteur, de la date, et d’autres babioles), mais aide quand même pas mal.
J’espère qu’à vous aussi il sera utile !
Discussions par date d’activité
3 discussions
Très utile cette contrib ! Justement j’ai aussi des pages HTML migrer sur spip.
Mais telle quelle, cette contrib ne me va pas :-). Est-il possible d’y contribuer et de définir des objectifs ensemble ?
Cette contrib’ est GPL donc tu peux y contribuer et la modifier sans souci.
Pour ma part, avant de la mettre « en production » j’ai fait quelques petites modifs que je répercuterai d’ici la fin de la semaine (surtout sur la conversion en raccourcis typos).
Pour ce qui est de définir des objectifs, je ne suis pas sûr d’avoir le temps de beaucoup y travailler désormais que la migration de mon site est faite. Mais je suis ouvert à toute discussion-modification-contribution !
Je vois ça comme ça :
- Définition de règles de transformation de code html en spip (comme ... en ...), communes à toutes les pages. Je suggère d’écrire ces règles dans un fichier .txt, afin de pouvoir les améliorer et/ou les adapter à son site.
- Parcours de tous les fichiers d’une structure répertoires/pages, où les répertoires deviendront des sous-rubriques et les pages des articles.
- Pour chaque page, parcours du code html pour nettoyage des balises et attributs périmés (notamment ), et en même temps exécution des règles de transformation. Le code est alors sous la forme d’une arborescence de balises.
- Réécriture du code nettoyé et transformé.
- Création du nouvel article.
Pour l’instant j’ai réalisé le nettoyage du code html (3e et 4e actions) de pages écrites avec FrontPage. Il m’en faudrait d’autres pour tester.
Mais j’ai des problèmes :
- pour parcourir une arborescence de répertoires/pages, il faut la télécharger sur le site (d’un autre côté, ça évite le vol de site)
- je n’ai pas résolu les problèmes des images...
Bonjour,
Je trouve cet article interressant car je suis un nouveau venu dans le monde spip.
Le seul probleme est que je n’arrive pas à utiliser ce script.
En effet dès que j’essai, il ne me trouve rien (j’ai un message d’erreur).
Pour info, mon fichier et dnas un répertoire squelettes/.
J’utilise la dernière version de SPIP.
Quelqu’un peut m’aider SVP.
Merci !
Bonsoir,
cet article m’intéresse aussi beaucoup, j’ai un site statique de 500 articles à migrer sous SPIP ....
j’ai essayé le script, j’obtiens :
j’ai raté quelque chose ?
La fonction file_get_contents est censée se trouvée où ?
Pour info je suis au dernier niveau de Spip, et hébergé chez OVH.
Merci par avance.
j’ai moi aussi un souci. Tout à l’air de bien fonctionner puisque j’ai une page me listant l’intégralité des articles et me disant qu’ils ont été ajoutés à la base de spip mais lorsque je fais un petit tour sur la partie privée, aucun d’entre eux n’apparaît.
J’ai fait attention à ce que l’identifiant de l’auteur soit bien le bon (pas dur, il n’y en a qu’un) et à ce qu’une rubrique réceptrice existe (pas dur là aussi)
J’avoue que je sèche complètement.
Aurais-je raté quelque chose ?
J’ai exactement le même problème, je paramètre tout comme il faut (j’ai vérifiée plusieurs fois) et j’ai le message disant que tout est bien inséré dans la base spip, et quand je m’y rend il n’y a absolument rien... étrange... quelqu’un de calé en devellopement pourrais t’il dire pourquoi ? car cet outil est , dans l’absolu, exactement ce que je recherche, même si il n’est pas complet. Ca m’évitera de faire 200 ou 300 copier / coller ...
En fait, il semblerait que tous les articles se retrouve avec le numéro d’identifiant 0 et que celui-ci ne s’incrémente pas. Peut-être faudrait-il creuser de ce côté là mais mes compétences techniques sont un peu limites.
Répondre à ce message
Bonjour,
J’essaie d’utiliser la contribution « Faire migrer un site statique vers spip » http://www.spip-contrib.net/Faire-migrer-un-site-statique-vers#forum391856
j’obtiens ce message
titre :ADBDP : journées 2002 : Didier Guilbaud
<http://www.adbdp.asso.fr/associatio...>
/L’article n°0 (titre : ADBDP : journées 2002 : Didier Guilbaud ) est dans la base de Spip !/ <http://www.adbdp.asso.fr/associatio...>
fini !
*Fatal error* : Cannot break/continue 1 level in *c :\program files\easyphp1-8\www\spipadbdp\ecrire\public.php(173) : eval()’d code* on line *49* <http://www.adbdp.asso.fr/associatio...>
Est-ce un abonné à déjà utiliser cette contribution avec succès et pourrait éclaire ma lanterne.
Cordialement. BS
Répondre à ce message
Félicitation, pour quelqu’un qui affirme ne pas savoir coder, c’est plutôt bien.
Pour ma part si j’avais 2000 pages à transcrire.
wget -m permet de faire un mirroir en local sur sa machine
find la_racine_du_site_local -iname « *.htm[l]* » |xargs un_sous_programe
dans le sous programme
nettoyage du html et transformation en xml avec tidy (c’est fait pour cela) avec l’option -asxhtml
utilisation d’une feuille, ou plusieurs xslt pour faire la transformation et écrire automatiquement le programme php d’importation
(la transformation peut être faite avec xsltrpoc ou avec les possibilité de manipulation XML de php5)
L’avantage de la feuille xslt et la manipulation « facile » quand on maitrise le xslt.
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 :
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.
Suivre les commentaires : |