GreyMatterかららくらくインポート

MovableTypeのマニュアルでは、

「greymatterでのデータをインポートする際はテンプレートをいじって全件出力されるようにしましょう」

とずいぶん投げやりな方法が書いてありますが、以下のスクリプトを使うと個別記事のデータファイルからインポート用のテキストファイルを直接生成できます。

以下のファイルを仮にdattoimp.plとしてデータファイルのあるフォルダに保存し、

./dattoimp.pl > gmalldata.imp
とします。(ActivePerlの場合は工夫してね)すると gmalldata.imp というファイルが出来上がりますので、これをインポート用フォルダにftpなどでアップロードし、Movabletypeでのインポート処理を行ってください。

#!/usr/bin/perl
# 起動前設定 はじめ
# インポート側で補完されるから不要といえば不要
$defaultcategory = "default"; # 規定のカテゴリ名
$usegmauthor = 0; # 0: 下記の $defaultauthor を著者名として使用する
# 0以外: データファイルの著者名を使う
$defaultauthor = "me"; # 規定の著者名
# 起動前設定 おわり


# 読者コメントの処理
sub getcomment(){
my ($line) = @_;
my(@body, @head, $g);

@body = split(/\|\*\|/, $line);
@head = split(/\|/, $body[0]);

# コメントヘッダ
print "-----\n";
print "COMMENT:\n";
print "AUTHOR: $head[0]\n";
print "EMAIL: $head[2]\n";
print "IP: $head[1]\n";
print "URL: $head[3]\n";
printf "DATE: %02d/%02d/%04d %02d:%02d:%02d %2s\n",
$head[5], $head[6], $head[7], $head[8], $head[9], $head[10], $head[11];

# コメント本文
$body[0] = $head[12];
foreach $g(@body){
print "$g\n";
}
print "\n";
}


$author = $defaultauthor;
$author = $a[11] if ($usegmauthor != 0);
foreach $f(`\\ls -1 *.cgi`) {
chomp($f);

open I, $f;

# 1行目から
$in = <I>;
$in =~ s/[\xd\xa]//g;
@a = split(/\|/, $in);
$hour++;
print "TITLE: $a[2]\n";
printf "DATE: %02d/%02d/%04d %02d:%02d:%02d %2s\n", $a[4], $a[5], $a[6], $a[7], $a[8], $a[9], $a[10];
print "CATEGORY: $defaultcategory\n";
# 著者情報は
print "AUTHOR: $author\n";
print "-----\nBODY:\n";

# 2行目は捨てる
$drop = <I>;

# 3行目は本文頭
$out = <I>;
$out =~ s/[\xd\xa]//g;
$out =~ s|\</?p\>||gi;
$out =~ s/\|\*\|/\n/g;
print $out,"\n";

# 4行目は本文続き
$out = <I>;
$out =~ s/[\xd\xa]//g;
if (length ($out) > 0) {
print "-----\nEXTENDED BODY:\n";
$out =~ s|\</?p\>||gi;
$out =~ s/\|\*\|/\n/g;
print $out,"\n";
}

# 5行目以降は読者のコメント
while (<I>){
s/[\xd\xa]//g;
next if (length($_) == 0);
&getcomment($_);
}

close I;

print "--------\n";
}