Ogawa::Buzz: MTからBloggerへの移行についての覚え書き(1)の続き。
Blogger Data APIを使ってMTからBloggerにデータを移行することもできます。
ひとまず、Blogger Data APIを使った簡単な移行ツールをPerlで書いてみました。
mt2blogger - Google Code
以下のように実行します。
$ ./mt2blogger --blog_id=1 --username=foo@gmail.com --password=passwd \
--postURI=http://www.blogger.com/feeds/<blogger_blog_id>/posts/default
postURIに指定するのは、Bloggerブログのヘッダの<link rel="service.post">に書いてあるURLです。
このスクリプトを実行すると、公開状態のMTエントリをBloggerに一件ずつポストした上で、各MTエントリのkeywordsフィールドにポストされたエントリのEditURIを格納します(keywordsフィールドに何か格納されていた場合上書きします)。EditURIは下のような形式になっているはずです。
http://www.blogger.com/feeds/<blogger_blog_id>/posts/default/<blogger_post_id>
このEditURIを使うことで、MTエントリとBloggerポストの間のリンケージを実現できます。例えば、下のような簡単なプログラムで移動前後のURLを表示できます。
#!/usr/bin/perl -w
use strict;
use warnings;
use lib qw( lib extlib );
use MT;
my $mt = MT->new;
my $blog_id = 1;
use MT::Entry;
my $iter = MT::Entry->load_iter(
{
blog_id => $blog_id,
status => MT::Entry::RELEASE(),
},
{
sort => 'authored_on',
direction => 'ascend',
}
);
use LWP::Simple;
use XML::Atom::Entry;
while ( my $entry = $iter->() ) {
my $editURI = $entry->keywords or next;
my $content = get($editURI);
my $gentry = XML::Atom::Entry->new( Stream => \$content );
my @link =
grep { $_->rel eq 'alternate' && $_->type eq 'text/html' } $gentry->link;
print $entry->permalink . ' -> ' . $link[0]->href . "\n";
}
1;
いいじゃん、できるじゃんと言いたいところですが、現状のBlogger Data APIは完全なものではありません。コメントを追加するAPIは存在するのですが、生成されたコメントのオーナーがAPIのauthenticated userになってしまいます。mt2bloggerでコメントの移行を実装していないのはそのためです。この点に関してはいずれAPIが修正されるのを待って、実装しようと思っています。