2009/04/29

On Change !!

J'en avais ras le bol de l'hébergement Free, j'avais surtout marre de ne pas pouvoir éditer mes billets en vim proprement sans passer par des outils/add-ons tordus, j'ai donc mis un petit blosxom directement chez moi, après l'ajout de quelques plugins : antispam, tags, tagcloud, metaclear, metamail, paging, entries_index, Markdown et writeback, je me retrouve avec un beau blog en perl pour lequel j'édite les news en vim directement, que demande le peuple.

J'ai quand même du me coder moi même un petit plugin pour faire de la colorisation syntaxique des bloques de codes, mais quoi de plus simple avec perl et Syntax::Highlight::Engine::Kate.

Un petit script perl maison pour importer les données de dotclear via l'interface XMLRPC :

use Data::Dumper;
use Encode;
use Date::Manip;
use HTML::WikiConverter;
use RPC::XML::Client;
use RPC::XML;
use strict;

my $xmlrpc = RPC::XML::Client->new('http://baptux.free.fr/index.php?xmlrpc/default');
my $request = RPC::XML::request->new("metaWeblog.getRecentPosts",RPC::XML::string->new("1"),RPC::XML::string->new("bapt"),RPC::XML::string->new("secret"),RPC::XML::int->new(25));
my $result=$xmlrpc->send_request($request);
my %entries={};
for my $value (@{$result->value}) {
        my $filename=encode("utf-8",decode("iso-8859-1",$value->{title}));
        my $title=encode("utf-8",decode("iso-8859-1",$value->{title}));
        $filename =~ s/\s+/_/g;
        $filename =~ s/é/e/g;
        $filename =~ s/è/e/g;
        $filename =~ s/à/a/g;
        $filename =~ s/"//g;
        $filename =~ s/'//g;
        $filename =~ s/\(//g;
        $filename =~ s/\)//g;
        open(FILE,">data/$filename.txt");
        print FILE "Title: $title\n";
        print FILE "Tags: ",$value->{mt_keywords},"\n\n";
        my $content = encode("utf-8",decode("iso-8859-1",$value->{description}));
        $content =~ s/<br\ \/>/<br>/g;
        my $wc = new HTML::WikiConverter( dialect => 'Markdown' );
        print FILE $wc->html2wiki( $content );
        close FILE;
        print $filename, $value->{dateCreated},"\n";
        my $date = ParseDate($value->{dateCreated});
        $entries{"/usr/local/www/virtualhosts/blog/data/$filename.txt"}=UnixDate($date,"%s");
}
open(ENTRIES,">plugins/state/.entries_index.index");
print ENTRIES Dumper \%entries;
close ENTRIES;

Ce script se connecte sur mon ancien blog récupère la liste des posts (25 car je n'en avais que 25) crée dans un répertoire data et fichier .txt pour chaque post, les convertis au format markdown et en utf8.

Afin de conserver les dates des posts, il crée aussi un fichier plugins/state/.entries_index.index contenant les dates epoch de création de chaque post.

Ce script n'est pas parfait j'ai du faire quelques manipulations à la main pour finaliser le formattage des posts, mais il fait quand même le plus gros du boulot.

Par contre j'ai perdu tous les commentaires, dommage.

Dans quelques jours je vous parlerai plus en détail du petit plugin de colorisation syntaxique

EDIT : oui je sais mon code perl est pas beau, on peut faire plus simple et beau mieux :)

EDIT2 : il n'y a pas de grosse base de donnée SQL qui pu derrière, juste du bon vieux flat file

Name :
URL (optional) :
Write here: "ETOOMUCHSPAM"
Comments :