はじめに
趣味でLivedoorブログをやっていて毎日投稿を心がけている。
しかしながら、なかなか毎日の投稿数が安定しない。
個人的には毎日の投稿数とかが可視化されているとモチベーションが上がるので、勉強も兼ねてやってみようと思う
プライベート端末で実装するため、あまり複雑なコーディングはしたくない。よって一番馴染みがあるNode.jsを使って簡単なスクリプトを組む。
やることは以下一点
- 記事作成日が昨日の日付のものを抽出する
※スプレッドシートへの書き込みはひとまず置いといて、Livedoorブログから投稿記事の取得を試みる
※APIの細かい使用は公式を参照。
使用モジュール
- wise
- request
- xml2json
ソース
livedoor.js
let wsse = require('wsse');
let request = require('request');
let parser = require('xml2json');
var token = new wsse.UsernameToken({ username: '【UID】', password: '【API_KEY】' });
// 記事を取得
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) {
// XML形式で返ってくるのでJSONにパース
var json = parser.toJson(body);
let obj = JSON.parse(json);
// 昨日の日付のエントリ
let toDaysEntry = [];
// from(昨日の日付の00:00:00)
let from = new Date(new Date().setHours(0, 0, 0, 0));
from.setDate(from.getDate() - 1);
from.setHours(from.getHours() + 9); // +09:00
// to(今日の日付の00:00:00)
let to = new Date(new Date().setHours(0, 0, 0, 0));
to.setHours(to.getHours() +9); // +09:00
// エントリはfeed.entryに格納されている
if(obj.feed && obj.feed.entry){
for(let i = 0 ; i < obj.feed.entry.length; i++){
// エントリ
let e = obj.feed.entry[i];
// 最終更新日をDate型に変換
let eDate = new Date(e.updated);
// 昨日の日付のエントリだけ抽出
if(eDate > from && eDate < to){
toDaysEntry.push(e);
}
}
console.log(toDaysEntry.length);
}
});
感想
今回はおそらく一番オーソドックスな投稿記事の取得だけだったが、APIから投稿することも可能らしい。
なんにせよこれで件数は取得できたので、次回はスプレッドシートへの書き込みをやってみようと思う。