testtestHome

Conserver le post name en passant de TypePad à WordPress…

15.03.2007 par Mich
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.
tags: . . |
T'es le pro de l'importation
Plus jamais
Qué bordel.

Ainsi donc si j'ai bien compris, on n'a pas accès à la DB ( puisque base propriétaire ) et on doit se fier à un format d'export pourri. Ça me ferait flipper d'à ce point ne pas me sentir "chez moi".

On fait avec l'inspiration du moment bien sûr, mais il me semble qu'une solution plus cohérente et plus automatisée aurait pu se faire en php ou autre
Clair, mais c'était vite fait avec un peu de JS/DOM

En php tu fais un petit preg_match a condition que tu réussi du premier coup déjà a avoir la bonne expression régulière Evidemment, au moment où j'ai vite fait ce que j'ai fait plus haut, je n'avais pas de php sous la main. On pourrais envisager de faire un script pour que d'autres puissent facilement l'utiliser, mais franchement, j'ai d'autres priorités
ah ce bon vieux Greasemonkey. Je ne m'en sépare pas de celui-ci

beau boulot en tout cas Mich

c'est fou tout ce monde qui passe sous WP en ce moment... Ced a vraiment lancé une vague
Ced for president
J'y suis passé avant Ced
Sinon, je pensais qu'on allait te traiter de geek, il n'en est rien
c quoi wordpress ?


nan ça va j'déconne !
kooolman
Vinch> je dis ca pour rire, car Denis avait dis "Ced qui a instigué le mouvement"

kooolman> Quoi t'es encore sous DotClear ?! Migre
Il se passe quoi avec wordpress, une nouvelle feature qui tue ? Des posts qui s'écrivent tout seul ?

Ah, peut-être est-il soutenu par autre chose qu'une bande de dévots crachant à la gueule du nouveau venu tout en buvant les paroles du patron tyrannique ...

Je suis en train de chipoter avec typo, mais pas en vue d'une migration, ça sera plutôt une spin-off. Assez élitiste, en fait tous les blogs sous typo sont tenus par ... des programmeurs ruby on rails qui ne parlent que de ça. Puissant potentiel mais impossible sans mettre les mains sous le capot.
Quel talent Mich !

Oui oui Ced président

Vinch nul n'est prophète en son pays

aiiki> De toute façon, moi je reste sous michpress

Denis> Quel merde ce typepad
bon ben puisque (presque) tout le monde est sous wordpress, je vais switcher à Habari, Nah!
Moi je vais utiliser notepad et bloguer en .txt

Pour le moblog et les photos j'utiliserais de l'ASCII-art
Denis > Ced roi alors ?

Marin > Toujours une longueur d'avance
c'est beau cet esprit d'aventure qui existe ici
Vais ouvrir une boite spécialisée en migration
Je comprends rien à l'indigestion, cela ne m'inquiète pas....
Laisser un commentaire
  • Nom *

  • Email *

  • Homepage

  • Commentaire *

  • * = champs requis


  • Je suis amnésique