このブログを立ち上げる前にLivedoorブログでつらつらと記事を書いていたことがあります。 そちらはもう更新はしておらず、いずれは消さないとなぁ・・・なんて思っていますが、その前にAPIを使って記事を抜き出したので、今回はそのやり方をまとめます。
node
インストール済Livedoor
の管理画面にログインし、AtomPub API
の設定を開きます。
ルートエンドポイントと、AtomPub用パスワードを取得しておきましょう。
今回使用するライブラリは3つです。
WSSE認証
用のライブラリです。
yarn add wsse
HTTP
リクエスト用ライブラリです。
yarn add request
XML
をJSON
にパースするライブラリです。
yarn add xml2json
LivedoorブログのAPI
はAtomPub
というプロトコル仕様に準拠しています。
ブログ周りを触ったことのない方には耳馴染みがないかもしれませんが、Webサイトの更新情報の規格としては割りかし有名かと思います。
下記は今日の日付で投稿された記事のみを抽出するサンプルです。
記事の取得のエンドポイントは/article
で、取得後のデータに対してfrom
とto
で絞り込みをかけています。
let wsse = require('wsse');
let request = require('request');
let parser = require('xml2json');
var token = new wsse.UsernameToken({ username: '【ブログユーザID】', password: '【AtomPub用パスワード】' });
// 記事を取得
var options = {
url: 'https://livedoor.blogcms.jp/atompub/【ブログID】/article',
method: 'GET',
headers: {
'Authorization': 'WSSE profile="UsernameToken"',
'X-WSSE': token.getWSSEHeader({nonceBase64:true})
}
};
// リクエスト実行
request(options, function(error, response, body) {
// JSONにパース
var json = parser.toJson(body);
let obj = JSON.parse(json);
// 今日の日付のエントリ
let toDaysEntry = [];
// from
let from = new Date(new Date().setHours(0, 0, 0, 0));
from.setDate(from.getDate() - 1);
from.setHours(from.getHours() + 9);
// to
let to = new Date(new Date().setHours(0, 0, 0, 0));
to.setHours(to.getHours() +9);
// エントリが正しく取得できていたら
if(obj.feed && obj.feed.entry){
for(let i = 0 ; i < obj.feed.entry.length; i++){
// エントリ
let e = obj.feed.entry[i];
// 日付型に変換
let eDate = new Date(e.updated);
// 今日の日付のエントリだけ抽出
if(eDate > from && eDate < to){
toDaysEntry.push(e);
}
}
console.log('count : ' + toDaysEntry.length);
}
});
node atom.js
count : 11
今回はLivedoorブログからAtomPub API
を使って記事を取得するコードの紹介をしました。
主に役立つのはブログの引越しを行う時等です。移行先のAPI
を使って投稿すれば、記事を丸ごと移行することができます。
記事数が多くなればなるほど役立ってくるソースなので、是非とも活用してみてください。