こちらは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>