日向夏特殊応援部隊

俺様向けメモ

Blogger で Atompub してみる

ふとした用途*1Blogger に対して Atompub で日記を書きたくなったのでメモ。

AuthSub で認証

Blogger への認証には Google の AuthSub or ClientLogin を使うみたいです。
今回はプロトコルが云々よりも Blogger に投稿するのが目的なので ClientLogin を使ってみます。

で、さすが Perl と言うか CPAN ですね。ちゃんと Net::Google::AuthSub と言うモジュールがあるじゃーないですか。

ClientLogin に対応しているのは login メソッドなので、次のように書きます。

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dump qw(dump);
use Perl6::Say;
use Net::Google::AuthSub;

my ($user, $pass) = ("zigorou", "hogehoge"); # 値は適当
my %opts = (
  service => "blogger",
  accountType => "GOOGLE",
  source => "exampleCo-exampleApp-1",
);

my $auth = Net::Google::AuthSub->new(%opts);
my $res = $auth->login($user, $pass);

say dump($auth->auth_params) if ($res->is_success);

で成功すると Authorization ヘッダの設定に必要な値が配列として返って来る。

(
  "Authorization",
  "GoogleLogin auth=\"XXXXXXXXXXXXXXXX\"",
)

みたいな感じ。

で、これを LWP::UserAgent の default_header とか使って設定しておけばおkです。

だから最終的には次のようなスクリプトで新しい日記を投稿出来ます。

#!/usr/bin/perl

use strict;
use warnings;

use Perl6::Say;
use Atompub::Client;
use XML::Atom::Entry;
use Net::Google::AuthSub;

# 値適当
my ($user, $pass, $blog_id) = ('zigorou', 'okorareta', '0000000000000000');
my $collection_uri = "http://www.blogger.com/feeds/' . $blog_id . '/posts/default";

my $entry = XML::Atom::Entry->new();
$entry->title("ブログタイトル");
$entry->content("ブログの本文〜");

my $auth = Net::Google::AuthSub->new(
    service => "blogger",
    accountType => "GOOGLE",
    source => "exampleCo-exampleApp-1"
);

$auth->login($user, $pass);

my $cli = Atompub::Client->new;

# ここがポイント
$cli->ua->default_header($auth->auth_params);
# 日記の投稿
say $cli->createEntry($collection_uri, $entry);

*1:何となくなんだからねっ!