Apr 17, 2009

MTからBloggerへの移行についての覚え書き(2)

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が修正されるのを待って、実装しようと思っています。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com