J'ai mentionné l'autre jour (et vous avez dû le remarquer en parcourant ces pages) que j'étais passé d'un blog Wordpress à un site internet fait de pages statiques. Le tout en utilisant l'outil Pelican.
Ce billet est le premier d'une série. Une série où je vais un peu raconter mon process, mes difficultés, les outils utilisés et comment je mets tout ça en place. Ce sera un peu décousu, parce que rien n'est encore figé. Y a pleins de choses encore bancales. D'autres qui seront révisées. D'autres en cours d'essai.
Si vous souhaitez échanger sur les sujets évoqués ici, n'hésitez pas à me contacter via les réseaux sociaux ou sur les plateformes où je traîne. J'échangerai publiquement avec plaisir.
De Wordpress au Markdown
Tout commence donc dans Wordpress. Parce que c'est là qu'étaient mes données et ce blog. Dans le panneau d'administration, une option permet d'exporter tout ou presque le contenu du blog sous la forme d'un fichier xml. Just do it.
L'objectif ensuite était de pouvoir transformer tout ça en fichiers markdown bien organisés, et d'avoir, si possible, récupéré l'ensemble des images et autres données hébergées. Heureusement, pas besoin de réinventer la roue, puisque que quelqu'un s'en est déjà chargé, et que tout est disponible sur github : https://github.com/lonekorean/wordpress-export-to-markdown.
J'utilise donc cet outil pour transformer tous mes billets et toutes mes pages au format Markdown. Cerise sur le gateau : le script s'occupe d'aller chercher l'ensemble des images, et je me retrouve avec une arborescence de fichiers qui correspond bien à ce que j'envisageais :
Une première passe de nettoyage
J'ai tenté de passer tout ça à Pelican directement, mais autant le dire : c'était un échec monumental. Les raisons étaient multiples : format des métadonnées, parsing de certains éléments ayant gardé le html, options mal réglées pour la localisation des éléments.
Donc, quel est la solution ? Et bien, nettoyer tout ça ! Et c'est parti pour utiliser deux outils à ma disposition : regex et Python ! Oui, si la programmation et vous ça fait deux, ça va commencer à piquer...
Je ne rentrerai pas dans le détail du script mais, en gros, il corrige du formatage sur le titre du billet, il rajoute un slug, une URL d'origine (pour des redirections), il met en place une Catégorie dédiée et pas mal de petits trucs.
Ce script est un peu à l'arrache parce qu'il a été mis en place au tout début du process, et il ne sera, sauf catastrophe, jamais relancé.
Une question d'images
Bon, ça marche pas mal tout ça quand je le passe dans Pelican. Par contre, je me retrouve avec un poids total assez monstrueux. Et tout ça, ça vient des images en multiples exemplaires dans les répertoires, avec différentes tailles parce que Wordpress a généré différentes versions pour la même image. Et parfois, des images ne sont même plus utilisées. Comment faire ? Et bien... Python à la rescousse !
Là encore, n'attendez pas un script optimisé : c'est pour un tir en one-shot ! Surtout que j'ai ici quatre fonctions distinctes, dont deux d'analyse que j'ai lancé en amont pour identifier ce que j'avais à faire.
Ensuite, une fonction me permet de faire le nettoyage nécessaire en supprimant tous les fichiers non référencés. Puis un dernier script va rationaliser la taille des images (600 pixels max de largeur). Pourquoi ? Pourquoi pas ! Cela garde une qualité d'image correcte pour l'usage que j'en ai, et si besoin (ce script n'étant pas intégré au process final), je pourrais revenir sur les images après-coup.
Bon, on arrête là pour ce soir ? La prochaine fois, je parlerai un peu des débuts de la publication, de Pelican lui-même et de quelques scripts de "post" que j'ai mis en place.
Et pour finir, voici un script nécessaire pour le premier, qui nettoie un peu les liens des billets. Très utile pour les liens internes au blog.