Aug 16, 2006

Blogger Data API

Google Blogger(Blogger: Create your Blog Now -- FREE)が新しくなっていたっぽいので、作り直してみた。

smallCaps

レイアウトをDrag & Dropで変更できるようになったとか、アクセス制御やラベル(タグ)をサポートしたとか、フィード配信でいろいろできるようになったとか、あたりが見た目の変更点。少し使った限りでは、(1) 各ページにあるべきブログのトップページへのリンクがない超分かりにくい、(2) アップロードした画像ファイルを削除する方法がない(ような気がする、かなりそんな気がする)、(3) 日本語ラベルが正しく機能しない、(4) テンプレートを切り替えたときにレイアウトマネージャが不穏な動きをする、というあたりが気になった。

なのだが、やはり目玉は、Google Calendarと同様、Google data API (GData)に対応したBlogger Data APIだ。

Ogawa::Buzz: Google Calendar data API

やっぱこれだよね!

ざっくり見た限り、commentsを操作するAPIについて言及していないようだ。commentsにもpostsと同様にGData feedが定義されているので、同じように操作できるのかもしれない。

このあたりがクリアになりかつ時間があれば、Movable Typeのダンプ形式からBloggerにコンバートするツールを作ってみようかな。

簡単なテストコード。Ogawa::Buzz: Google Calendar data APIとの違いは、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";
}

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

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