Le pro­blème, la solu­tion

Donc, qu’est-ce que ça fait exac­te­ment ? Il s’agit d’une expor­ta­tion aussi com­plète que pos­si­ble d’un blog Game­kult vers un for­mat de fichier uti­lisé à la base par Word­press pour expor­ter son con­tenu d’un blog Word­press à un autre. Vous don­nez un pseudo Game­kult, il vous sort un fichier com­pressé qui con­tient tou­tes les don­nées néces­saire pour que votre nou­veau blog fasse son bou­lot.

Con­tenu con­cerné

  • Les billets
  • Les caté­go­ries
  • Les com­men­tai­res
  • Les ima­ges

Limi­tes du scripts

  • Quel­ques ten­ta­ti­ves ont été faî­tes pour pré­ser­ver la mise en page, mais cer­tai­nes options avan­cées comme les ima­ges flot­tan­tes ne seront pas con­ser­vés
  • Les com­men­tai­res auront tous une IP et un email inva­lide, faute d’accès aux don­nées en ques­tion
  • Une par­tie du code tient un peu de la magie noire (pré­dic­tion de l’empla­ce­ment final des minia­tu­res) et pour­rait poten­tiel­le­ment poser pro­blème. En par­ti­cu­liers, un élé­ment base ren­sei­gné comme il faut (l’URL abso­lue com­plète de l’accueil de votre blog) devra être ajouté à votre thème si vous uti­li­sez des URL ammé­na­gées (en /2009/05/10/mon-billet/ au lieu de /?p=123).

Uti­li­sa­tion

Le code est dis­po­ni­ble via Sub­ver­sion. Rien ne vous empê­che de faire tour­ner le script de votre côté comme un grand, mais il va vous fal­loir un mini­mum de com­pé­ten­ces tech­ni­ques pour l’uti­li­ser. Si c’est le cas, voir la par­tie sui­vante pour quel­ques détails. Sinon, vous pou­vez trou­ver un geek dans votre entou­rage, ou me deman­der gen­ti­ment par mail. Je pré­cise quand même que je ne suis pas non plus un bon sama­ri­tain, la quan­tité d’aide que je suis prêt à four­nir aux par­faits incon­nus est limi­tée.

Pour les bali­ses spoi­ler, il vous fau­dra acti­ver le plu­gin Word­press Tiny Spoi­ler.

Bara­goui­nage tech­ni­que pour les inté­res­sés

Ce script fonc­tionne sur deux pha­ses. La pre­mière arpente le blog comme n’importe quel moteur de recher­che et recueille tou­tes les infor­ma­tions néces­sai­res du code HTML des pages. Le con­tenu des billets est traité pour pré­ser­ver la mise en page une fois coupé des sty­les CSS et scripts Javas­cript de Game­kult. La deuxième cons­truit le docu­ment XML final, au for­mat WXR (Word­press eXten­ded for­mat).

Le tout est pro­grammé en Python, testé sous Python 2.5 et 2.6. Il dépend des modu­les PIL (Ima­ging), lxml, html5­lib, pytz et pyti­dy­lib. Tous sont pré­sents sur le Python Packa­ges Index et peu­vent donc faci­le­ment être ins­tal­lés avec les setup­tools. Tous à l’excep­tion de pyti­dy­lib ont été packa­gés pour Debian.

Bug qui pour­rait être réglé

Pour une rai­son qui m‘échappe encore, seul Safari sem­ble uploa­der le fichier XML cor­rec­te­ment. Inter­net Explo­rer, Fire­fox et Opera posent tous des pro­blè­mes lors de la pre­mière phase. Pas testé avec Chrome ou Safari sous Win­dows. D’ici à ce que je règle ça, les inté­res­sés peu­vent tou­jours m’envoyer le fichier XML tiré du script pour que je leur ren­voi un fichier XML issu de Word­press.

Au rang des détails, les ima­ges en début et fin de bali­ses spoi­lers sont sujet­tes à un bug d’affi­chage et n’apa­rais­sent pas dans le corps du billet, même si elles sont cor­rec­te­ment impor­tées dans la bilio­thè­que d’ima­ges. Une retou­che sera néces­saire à ce niveau.

Bug qui ne sera jamais réglé

L’impor­ta­tion est un pro­ces­sus très lourd, en par­ti­cu­lier les ima­ges qui deman­dent à Word­press d’aller les télé­char­ger une à une et de créer tou­tes les minia­tu­res néces­sai­res. De ce fait, et suite à des limi­ta­tions de Word­press, de PHP et du pro­to­cole HTTP, l’impor­ta­tion du fichier est très ins­ta­ble et va pro­ba­ble­ment plan­ter à plu­sieurs repri­ses. Word­press est capa­ble de détec­ter les dou­blons avec ce qu’il a déjà importé, vous n’avez donc à priori qu‘à reten­ter jusqu‘à ce qu’il arrive au bout du fichier. Le pro­blème peut tou­te­fois deve­nir très gênant si votre héber­geur est lent, au point de com­plè­te­ment blo­quer le pro­ces­sus si votre blog dépasse en plus une cer­taine taille. Si vous n’arri­vez vrai­ment pas à vous débrouiller avec, essayez d’impor­ter sur un Word­press ins­tallé sur un ser­veur local et ensuite de faire une migra­tion com­plète (sys­tème de fichier + base de don­nées).

Voilà, en tout cas je suis con­tent d’en avoir fini avec ça, même si je ne peux pas nier que c‘était inté­res­sant de coder mon pre­mier bot et d’explo­rer les capa­ci­tés du module lxml. Je vais enfin pou­voir retour­ner à la glande :]