Blogger Data API
Google Blogger(Blogger: Create your Blog Now -- FREE)が新しくなっていたっぽいので、作り直してみた。
レイアウトをDrag & Dropで変更できるようになったとか、アクセス制御やラベル(タグ)をサポートしたとか、フィード配信でいろいろできるようになったとか、あたりが見た目の変更点。少し使った限りでは、(1) 各ページにあるべきブログのトップページへのリンクがない超分かりにくい、(2) アップロードした画像ファイルを削除する方法がない(ような気がする、かなりそんな気がする)、(3) 日本語ラベルが正しく機能しない、(4) テンプレートを切り替えたときにレイアウトマネージャが不穏な動きをする、というあたりが気になった。
なのだが、やはり目玉は、Google Calendarと同様、Google data API (GData)に対応したBlogger Data APIだ。
やっぱこれだよね!
ざっくり見た限り、commentsを操作するAPIについて言及していないようだ。commentsにもpostsと同様にGData feedが定義されているので、同じように操作できるのかもしれない。
このあたりがクリアになりかつ時間があれば、Movable Typeのダンプ形式からBloggerにコンバートするツールを作ってみようかな。
簡単なテストコード。Google Calendar data API - Ogawa::Memorandaとの違いは、ClientLogin Requestのservice名を「blogger」するっていうだけ。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use Encode;
use constant GAUTH_URL => 'https://www.google.com/accounts/ClientLogin';
my $email = 'user@gmail.com';
my $passwd = 'passwd';
my $feed_url = 'http://beta.blogger.com/feeds/###################/posts/full';
my $entry = <<'ENTRY';
<entry xmlns='http://www.w3.org/2005/Atom'>
<published>2006-06-09T10:27:00.000-07:00</published>
<updated>2006-06-09T10:31:55.120-07:00</updated>
<title type='text'>Marriage!</title>
<content type='xhtml'>
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>
<p>He is the last man on earth I would ever desire to marry.</p>
<p>Whatever shall I do?</p>
</div>
</content>
<author>
<name>Elizabeth Bennet</name>
<email>liz@gmail.com</email>
</author>
</entry>
ENTRY
Encode::_utf8_off($entry);
my $ua = LWP::UserAgent->new();
my $auth = $ua->post(GAUTH_URL, {
Email => $email,
Passwd => $passwd,
source => 'companyName-applicationName-versionID',
service => 'blogger'
});
my($auth_token) = $auth->content =~ m/Auth=(.+)/;
my $req = HTTP::Request->new(POST => $feed_url);
$req->header('Authorization', 'GoogleLogin auth=' . $auth_token);
$req->content_type('application/atom+xml');
$req->content_length(length $entry);
$req->content($entry);
my $res = $ua->request($req);
print $res->status_line . "\n";
if ($res->is_redirect && $res->header('Location')) {
$req->uri($res->header('Location'));
print $ua->request($req)->status_line . "\n";
}
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/425
Comments (0)