こちらは2013年12月にリリースされた新しいAtomPub APIについての技術文書です。
※旧AtomPub APIについてはこちら

AtomPub (Atom Publishing Protocol) API は RFC 5023 に基いた、ブログ投稿・編集用の API です。

このドキュメントでは、ライブドアブログでの仕様について説明します。

AtomPub API でできること・できないこと

この API により、以下のようなブログの基本的な操作を行うことができます。

  • ブログへの記事の投稿
  • カテゴリの指定
  • 既存ブログ記事の編集
  • 画像の投稿

また、この API では以下のことはサポートされません。

  • 「続きを書く」及び「プライベート」部分の投稿・編集
  • タグの付与及びその他オプション設定

API のルートエンドポイント

API のルートエンドポイントは、この API における「サービス文書」を提供する URL です。これはブログの設定API Keyに表示されている URL になります。

具体的には以下のような URL です。

https://livedoor.blogcms.jp/atompub/<blog_id>

サービス文書の例:

<?xml version="1.0" encoding="UTF-8"?>
<service
    xmlns="http://www.w3.org/2007/app" 
    xmlns:atom="http://www.w3.org/2005/Atom"
    >
    <workspace>
        <atom:title>foobarのblog</atom:title>
        <collection href="https://livedoor.blogcms.jp/atompub/foobar-mumu/article">
            <atom:title>foobarのblog - Entries</atom:title>
            <accept>application/atom+xml;type=entry</accept>
            <categories fixed="no" scheme="https://livedoor.blogcms.jp/atompub/foobar-mumu/category">
                <atom:category term="日記"/>
                <atom:category term="趣味の話"/>
                <atom:category term="仕事の話"/>
            </categories>
        </collection>
        <collection href="https://livedoor.blogcms.jp/atompub/foobar-mumu/image">
            <atom:title>foobarのblog - Images</atom:title>
            <accept>image/png</accept>
            <accept>image/jpeg</accept>
            <accept>image/gif</accept>
        </collection>
    </workspace>
</service>

認証方法

現在以下の認証方法が提供されています。

  • Basic 認証
  • WSSE 認証

Basic 認証

Basic 認証は、RFC 2617に基いた認証方法です。この認証方法は HTTPS で通信されている場合のみ使用できます。

  • ユーザ名: ライブドアID
  • パスワード: ブログ設定に表示されている、AtomPub用パスワード (ライブドアIDのパスワードではありません)

Basic 認証の例 (Perl):

use v5.14;
use LWP::UserAgent;
use HTTP::Request::Common;
use URI;
use MIME::Base64;
use Data::Dumper;
  
my $root = 'https://livedoor.blogcms.jp/atompub/foobar-mumu';
my $username = 'foobar';
my $password = 'API_KEY';
  
my $req = GET $root;
my $authorization = 'Basic ' . encode_base64(join(":", $username, $password), '');
$req->header('Authorization', $authorization);
  
my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);
  
warn Dumper $res;

WSSE 認証

WSSE 認証は Atom Authentication で言及されている認証方法です。

  • ユーザ名: ライブドアID
  • パスワード: ブログ設定に表示されている、AtomPub用パスワード (ライブドアIDのパスワードではありません)

WSSE 認証の例 (Perl):

use v5.14;
use LWP::UserAgent;
use HTTP::Request::Common;
use URI;
use MIME::Base64;
use Digest::SHA1;
use Data::Dumper;
use DateTime::Format::W3CDTF;
  
my $root = 'https://livedoor.blogcms.jp/atompub/foobar-mumu';
my $username = 'foobar';
my $password = 'API_KEY';
  
my $time      = DateTime::Format::W3CDTF->new->format_datetime(DateTime->now);
my $nonce     = Digest::SHA1::sha1( time() . {} . rand() . $$);
my $digest    = Digest::SHA1::sha1( $nonce . $time . $password );
  
my $wsse = sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
        $username,
        encode_base64($digest, ''),
        encode_base64($nonce, ''),
        $time
);
  
my $req = GET $root;
$req->header('Authorization' => 'WSSE profile="UsernameToken"');
$req->header('X-WSSE' => $wsse);
  
my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);
  
warn Dumper $res;

カテゴリ

既存カテゴリ

既存のカテゴリはサービス文書に内包されて提供されています。

記事カテゴリ

エントリ文書の POST 時に、category 要素を含めて投稿した場合、そのカテゴリを記事カテゴリとして設定します。

投稿時点でカテゴリが存在しない場合は、新たにカテゴリを作成した後に設定します。

ただし、ユーザが上限までカテゴリを設定している状態で、存在しないカテゴリを含むエントリ文書をポストした場合は、カテゴリを作成することができないため、そのカテゴリは無視します。

カテゴリ単体で追加、表示、編集、削除する機能は現時点では提供していません。

画像リソース

画像付きの記事を投稿する場合、以下のような手順になります

  1. 画像リソースを作成
  2. 画像リソースの URL を記事中に埋め込む
  3. 記事リソースを作成