Note pour ceux que le sujet n’intéresse absolument pas, avant que je vous perde : je serais à l’Épitanime à partir de ce soir. Je ne ferais sûrement pas toutes les nocturnes, pour le reste ça dépendra beaucoup des circonstances et de sur qui je tombe vu que mes accompagnateurs se sont tous désistés les uns après les autres et que les conventions tout seul c’est quand même très chiant, Épitanime ou pas.
Enfin, je digresse je digresse. L’intérêt de ce billet est avant tout de présenter un petit bout de code programmé à la base pour faciliter l’émancipation de プルプルリン. Mais comme une autre fangirl était intéressée et sûrement bien d’autres qui ne sont pas dans mes petits papiers et ne peuvent pas savoir quel genre de geekeries j’ai dans mes cartons, je publie ça et advienne que pourra.
Le problème, la solution
Donc, qu’est-ce que ça fait exactement ? Il s’agit d’une exportation aussi complète que possible d’un blog Gamekult vers un format de fichier utilisé à la base par Wordpress pour exporter son contenu d’un blog Wordpress à un autre. Vous donnez un pseudo Gamekult, il vous sort un fichier compressé qui contient toutes les données nécessaire pour que votre nouveau blog fasse son boulot.
Contenu concerné
- Les billets
- Les catégories
- Les commentaires
- Les images
Limites du scripts
- Quelques tentatives ont été faîtes pour préserver la mise en page, mais certaines options avancées comme les images flottantes ne seront pas conservés
- Les commentaires auront tous une IP et un email invalide, faute d’accès aux données en question
- Une partie du code tient un peu de la magie noire (prédiction de l’emplacement final des miniatures) et pourrait potentiellement poser problème. En particuliers, un élément base renseigné comme il faut (l’URL absolue complète de l’accueil de votre blog) devra être ajouté à votre thème si vous utilisez des URL amménagées (en /2009/05/10/mon-billet/ au lieu de /?p=123).
Utilisation
Le code est disponible via Subversion. Rien ne vous empêche de faire tourner le script de votre côté comme un grand, mais il va vous falloir un minimum de compétences techniques pour l’utiliser. Si c’est le cas, voir la partie suivante pour quelques détails. Sinon, vous pouvez trouver un geek dans votre entourage, ou me demander gentiment par mail. Je précise quand même que je ne suis pas non plus un bon samaritain, la quantité d’aide que je suis prêt à fournir aux parfaits inconnus est limitée.
Pour les balises spoiler, il vous faudra activer le plugin Wordpress Tiny Spoiler.
Baragouinage technique pour les intéressés
Ce script fonctionne sur deux phases. La première arpente le blog comme n’importe quel moteur de recherche et recueille toutes les informations nécessaires du code HTML des pages. Le contenu des billets est traité pour préserver la mise en page une fois coupé des styles CSS et scripts Javascript de Gamekult. La deuxième construit le document XML final, au format WXR (Wordpress eXtended format).
Le tout est programmé en Python, testé sous Python 2.5 et 2.6. Il dépend des modules PIL (Imaging), lxml, html5lib, pytz et pytidylib. Tous sont présents sur le Python Packages Index et peuvent donc facilement être installés avec les setuptools. Tous à l’exception de pytidylib ont été packagés pour Debian.
Bug qui pourrait être réglé
Pour une raison qui m’échappe encore, seul Safari semble uploader le fichier XML correctement. Internet Explorer, Firefox et Opera posent tous des problèmes lors de la première phase. Pas testé avec Chrome ou Safari sous Windows. D’ici à ce que je règle ça, les intéressés peuvent toujours m’envoyer le fichier XML tiré du script pour que je leur renvoi un fichier XML issu de Wordpress.
Au rang des détails, les images en début et fin de balises spoilers sont sujettes à un bug d’affichage et n’aparaissent pas dans le corps du billet, même si elles sont correctement importées dans la biliothèque d’images. Une retouche sera nécessaire à ce niveau.
Bug qui ne sera jamais réglé
L’importation est un processus très lourd, en particulier les images qui demandent à Wordpress d’aller les télécharger une à une et de créer toutes les miniatures nécessaires. De ce fait, et suite à des limitations de Wordpress, de PHP et du protocole HTTP, l’importation du fichier est très instable et va probablement planter à plusieurs reprises. Wordpress est capable de détecter les doublons avec ce qu’il a déjà importé, vous n’avez donc à priori qu’à retenter jusqu’à ce qu’il arrive au bout du fichier. Le problème peut toutefois devenir très gênant si votre hébergeur est lent, au point de complètement bloquer le processus si votre blog dépasse en plus une certaine taille. Si vous n’arrivez vraiment pas à vous débrouiller avec, essayez d’importer sur un Wordpress installé sur un serveur local et ensuite de faire une migration complète (système de fichier + base de données).
Voilà, en tout cas je suis content d’en avoir fini avec ça, même si je ne peux pas nier que c’était intéressant de coder mon premier bot et d’explorer les capacités du module lxml. Je vais enfin pouvoir retourner à la glande :]