Damien l'avait annoncé il y a quelques temps : lui aussi passe sous
WordPress. Il suit ainsi
Vinch,
Soph & Ced et
Denis. Mais la différence entre
Damien et les 3 personnes que je cite est que Damien a son blog chez
TypePad et que putain c'est qu'une sale chienne quand il faut la migrer (TypePad, pas Damien). Pourquoi ?
Quand on migre un blog, on aime garder la même structure de lien. C'est important pour les articles référencés sur d'autres sites et dans Google. Normalement, un petit coup de réécriture très bien géré par WordPress fait l'affaire une fois que tous les champs sont importés. Seul problème : TypePad n'exporte pas le 'post slug', le nom du post, afin que celui-ci puisse être importé dans WordPress et que l'on puisse reconstruire exactement le même URL que sous TypePad, il faut donc trouver une façon de le retrouver.
Qu'est donc ce 'post slug' ? Dans le cas d'URL ci-dessous
http://lor.em.ips.um/2007/03/coucou_tout_.html
le 'post slug' est 'coucou_tout_', automatiquement abrevé par TypePad à 15 caractères avec des underscores au lieu d'espaces (la ou WordPress n'a pas vraiment de limite en taille et mets des tirets).
On pourrait penser dans un premier temps d'écrire un script qui régénère le post slug type TypePad (c'est-à -dire, underscores et 15 caractères), mais parfois, les post slug sous TypePad sont totalement différents de ce dont on s'attend et diffèrent des titres. Pas une option donc pour Damien à qui j'avais dis qu'il était tout à fait possible de maintenir ses permaliens. J'ai donc utilisé une methode un peu amateur mais efficace pour retrouver ses post-slug : JavaScript (avec GreaseMonkey).
J'ai manuellement ouvert chaque 'mois' des archives sur son blog actuel, pour aller retrouver par moyen de JavaScript via GreaseMonkey tous les permaliens dans sa page que j'ai ensuite collé dans un fichier texte, en respectant l'ordre chronologique décroissant, via ce script GreaseMonkey:
var titles = document.getElementsByTagName("h3");
var txt = "" ;
for(i = 0 ; i < titles.length ; i++){
txt+=titles[i].firstChild.href.split("/")[6].split(".")[0]+"<br/>";
}
var resultDiv = document.createElement("div");
resultDiv.innerHTML=txt;
document.documentElement.ownerDocument.body.appendChild(resultDiv);
Il est évident que si vous voulez l'utiliser sur un autre blog, vous devrez adapter le script en fonction de la structure des permaliens et de l'endroit où le permalien peut être trouvé.
Cliquez ici pour télécharger cette bonne base de script GreaseMonkey.
Une fois tous les mois parcourus, j'ai été dans la base de données effacer tous les messages standards d'une installation vierge WordPress. Ensuite, Damien a pompé tous ses billets et commentaires à partir de son fichier export TypePad. Une fois cela fait, j'ai fait une requête SQL que j'ai exporté dans un fichier .csv :
select ID
from wp_posts
where post_status='publish'
order by ID desc
Nous avons maintenant, si tout va bien, 2 listes de la même taille. D'une part, une liste ressemblant à ceci, qui contient les post slug, que nous avions copié-collé dans un fichier texte plus haut :
belgique_les_pa
la_couleur_de_v_1
la_rumeur_du_jo
…
Et d'autre part, Ã partir du .csv, les ID des posts :
1034
1033
1032
…
1034 est l'id du billet qui doit avoir comme post slug 'belgique_les_pa', c'est analogiquement pareil pour les autres. Il me fallait donc à partir de ceci écrire un petit script allait faire une mise à jour de la base de données. Mais avant ça, j'ai transformé les listes en arrays (tableaux), très facile avec des editeurs de texte comme EditPlus sous Windows :
Les post slug :
var slug = new Array() ;
slug[slug.length]='belgique_les_pa';
slug[slug.length]='la_couleur_de_v_1';
slug[slug.length]='la_rumeur_du_jo' ;
Les id :
Var ids = new Array() ;
ids[ids.length]=1034;
ids[ids.length]=1033;
ids[ids.length]=1032;
Et finalement le script qui va générer une requête :
for(i = 0 ; i < ids.length ; i++){
document.writeln("update wp_posts set post_name='"+slug[i]+"' where id='"+id+"';<br/><br/>");
}
et qui donne comme requêtes SQL que l'on peut par exemple insérer dans PHPMyAdmin :
update wp_posts set post_name='belgique_les_pa' where ID='1034';
…
Une fois que les requêtes générés ont été executés, il ne vous reste plus qu'a configurer le type d'URL dans WordPress, dans le cas de Damien :
/bloggingthenews/%year%/%monthnum%/%postname%.html
En daar is de werk.
Je sais que c'est un peu capilotracté comme méthode, mais c'était marrant à faire. Ce serait bien plus simple si TypePad ajoutait le post slug dans son fichier export. Il existe probablement d'autres méthodes (bien plus simples), mais heureusement, TypePad n'est pas trop répandu dans la blogosphère belge.