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

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

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

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

記事の投稿や編集、画像の投稿などができます。

AtomPub APIでできること


URL get post put delete
article 最新20件の記事の取得 記事の投稿 利用不可 利用不可
article/ARTICLE_ID ARTICLE_IDで指定された記事の取得 利用不可 ARTICLE_IDで指定した記事の更新 ARTICLE_IDで指定した記事の削除
category 全記事カテゴリー情報の取得 利用不可 利用不可 利用不可
image 利用不可画像の投稿 利用不可 利用不可
image/IMAGE_ID IMAGE_IDで指定した画像の取得 利用不可IMAGE_IDで指定した画像タイトルの更新 IMAGE_IDで指定した画像の削除

AtomPub APIでできないこと

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

「続きを書く」部分の投稿をする場合には旧Atom Pub APIをご利用ください。

APIへリクエストする際のURL

下記のいずれかのURLにリクエストを送ることで記事や画像の投稿ができます。BLOG_NAMEは対象としているブログのblog_nameを記載してください。(例:http://blog.livedoor.jp/staff/ の場合はstaff)

  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/article
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/article/ARTICLE_ID
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/category
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/image
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/image/IMAGE_ID

認証方法

現在以下の認証方法が提供されています。
  • Basic 認証(リクエスト先のURLがHTTPSの場合のみ利用可能)
  • WSSE 認証(リクエスト先のURLがHTTP/HTTPSの両方で利用可能)

APIキーの取得方法

Basic認証、WSSE認証で利用するAPIキーはブログ管理画面のブログ設定その他API Keyのページにある「AtomPub用パスワード」です。APIキー(AtomPub用パスワード)は半角英数字10字です。

初回はAPIキー(AtomPub用パスワード)が存在しませんので、[発行する]で発行してください。

発行された状態で、[再発行する]をクリックすると、APIキー(AtomPub用パスワード)を再生成できます。

74bf3fbb

Basic 認証

Basic 認証は、RFC 2617に基いた認証方法です。
この認証方法を利用する場合は"APIへリクエストする際のURL"は、表示のとおりのスキーム名(https://)をご利用ください。
認証情報は下記の内容を入力してください。

  • $username: ライブドアID(livedoor ID)
  • $apikey: APIキー(AtomPub用パスワード)

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/BLOG_NAME';
my $username = 'livedoor_ID';
my $apikey = 'API_KEY(AtomPub用パスワード)';

my $req = GET $root;
my $authorization = 'Basic ' . encode_base64(join(":", $username, $apikey), '');
$req->header('Authorization', $authorization);
  
my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);
  
warn Dumper $res;

WSSE 認証

WSSE 認証は Atom Authentication で言及されている認証方法です。
この認証方法を利用する場合は、"APIへリクエストする際のURL"のスキーム名は https://、http://どちらでも利用できますが、https://の方を推奨します。
認証情報は下記の内容を入力してください。

  • $username: ライブドアID(livedoor ID)
  • $apikey: APIキー(AtomPub用パスワード)

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/BLOG_NAME';
my $username = 'livedoor_ID';
my $apikey = 'API_KEY(AtomPub用パスワード)'; my $time = DateTime::Format::W3CDTF->new->format_datetime(DateTime->now); my $nonce = Digest::SHA1::sha1( time() . {} . rand() . $$); my $digest = Digest::SHA1::sha1( $nonce . $time . $apikey ); 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;

記事の投稿方法

記事投稿用のXMLの例は下記の通りです。
下記の部分は自分のブログの「APIへリクエストする際のURL」に書き換えてください。
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/article
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/category
  • https://livedoor.blogcms.jp/atompub/BLOG_NAME/image
<?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>テストのblog</atom:title>
        <collection href="https://livedoor.blogcms.jp/atompub/test/article">
            <atom:title>テストのblog - Entries</atom:title>
            <accept>application/atom+xml;type=entry</accept>
            <categories fixed="no" scheme="https://livedoor.blogcms.jp/atompub/test/category">
                <atom:category term="日記"/>
                <atom:category term="趣味の話"/>
            </categories>
        </collection>
        <collection href="https://livedoor.blogcms.jp/atompub/test/image">
            <atom:title>テストのblog - Images</atom:title>
            <accept>image/png</accept>
            <accept>image/jpeg</accept>
            <accept>image/gif</accept>
        </collection>
    </workspace>
</service>

記事カテゴリについて

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

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

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

画像付き記事の投稿について

画像付きの記事を投稿する場合、まずはimageのURLを利用して画像をpostし、その後で、投稿した画像を記載した記事を投稿してください。

画像のタイトルを変更する場合

image/IMAGE_IDのURLでputメソッドを実行して変更する場合、Content-Typeをapplication/atom+xml;type=entryに設定してから利用してください。
Content-Typeの設定は、image/IMAGE_IDのURLでPUTをする時のみ設定が必要です。image/IMAGE_IDのURL以外でpostやputをする時には設定は不要です。

ARTICLE_ID、IMAGE_IDの取得方法

ARTICLE_ID、IMAGE_IDの取得方法は下記の通りです。

ARTICLE_IDの取得方法

①/article/のURLでgetメソッドを実行し、記事の情報を取得する
②<link rel="edit"〜〜title="記事タイトル"/>、または<id>〜</id>で囲まれている行の数値がARTICLE_IDです。
<title>テスト記事</title>
        <link rel="alternate" type="text/html" href="http://test.blog.jp/archives/4291502.html" />
        <link rel="edit" type="application/atom+xml;type=entry" href="https://livedoor.blogcms.jp/atompub/test/article/4291502" title="テスト記事" />
<id>tag:.blogcms.jp,2009-07-28:article-test.4291502</id>

IMAGE_IDの取得方法

IMAGE_IDの取得は旧AtomPub APIを利用します。利用の詳細は(旧)Atom Pub APIについてを参照してください。
①〜/image/のURLでgetメソッドを実行し、画像の情報を取得する
<id>〜</id>で囲まれている行の数値がIMAGE_IDです。
<title>テストの画像</title>
<id>tag:.blogcms.jp,2019-11-25:image-blog/test.10196893</id>
<updated>2019-11-25T13:10:01+09:00</updated>