SBMのクリッピングをブログエントリーとしてまとめて毎日投稿しているブログがありますが(例えば "Micro Persuasion" とか)、当サイトでも "Daily Summary" というカテゴリーで1ヶ月ほど前からそれを始めてみました。
ので、それのメモ。
用意するもの
私が利用している「livedoor クリップ」では、マイクリップをJSON形式で返してくれるAPIがあるのでそれが使えそうです。
マイクリップを JSON で取得する API - livedoor クリップ まとめサイト - livedoor Wiki(ウィキ)
また、"simple-json" という大変便利なRuby用JSONパーサを公開してくださっている方がいたのでそれを利用します。
Ruby 用 JSON パーサーを更新、 JSON への変換も追加 - WebOS Goodies
Rubyスクリプト本体
それらを使って以下のRubyスクリプトを作ってみました。
RUBY:
-
require 'open-uri'
-
require 'simple-json'
-
require 'date'
-
require 'kconv'
-
-
### APIからマイクリップを取得してパース
-
-
json_string = ''
-
uri = 'http://api.clip.livedoor.com/json/clips?livedoor_id=mskari_org&limit=20'
-
open(uri) {|f|
-
json_string = f.read
-
}
-
parser = JsonParser.new
-
obj = parser.parse(json_string)
-
-
-
### 前日分のクリップをリスト化
-
-
today = Time.now.strftime("%x")
-
yesterday = ((Time.now)-86400).strftime("%x")
-
clips = ""
-
tags = []
-
-
obj['clips'].each {|c|
-
cdate = Time.at(c['created_on']).strftime("%x")
-
if yesterday <= cdate && cdate <today
-
c['tags'].each {|t|
-
tags <<t.tosjis
-
}
-
clips <<"<li><a href=\"#{c['link']}\">#{c['title'].tosjis}</a><span class=\"cliptags\">[#{tags.join(",")}]</span></li>\n"
-
tags.clear
-
end
-
}
-
-
### ブログポスト用に整形して表示
-
-
credit = "mskariのクリップ - livedoor クリップ"
-
-
print "Daily Summary #{yesterday}\n"
-
print "<h3>clips</h3>\n"
-
print "<ul>\n"
-
print "#{clips}"
-
print "</ul>\n"
-
print "<div class=\"readmore\">from <a href=\"http://clip.livedoor.com/clips/mskari_org\">#{credit.tosjis}</a></div>"
主な動作としては、まずlivedoorクリップAPIからJSON形式でマイクリップを取得し、simple-jsonのJsonParserによりパースします。
次に、取得したクリップデータから昨日のクリップのみを抜き出しリストに追加し、最後にそれをブログポスト用に整形しています。
実行はこんな感じ。
# ruby getclips.rb > list.txt
できればXMLPRCなど使って投稿まで自動化したいところですが、知らないうちに恥ずかしいクリップまで掲載してはたまりませぬので、そこは手でやってます。
また、実行は手元のWindowsマシンでやっていますので、所々で "tosjis" しているところがありますが、その辺や↓こちらのサイトを参考にさせていただきました。
猫背ミジンコ: 楽天WEB SERVICEをRubyから呼び出してみる
課題
現在はlivedoorクリップAPIの仕様上、マイクリップが20件までしか取れません。なので、1日に20件以上クリッピングしても切り捨てられてしまうという大きな課題が残っています。
ちなみに、カテゴリー名を "Links" などではなく "Daily Summary" としているように、クリップだけでなく今後はTwitterやTumblrなど、マイクロブログやインスピレーション系のサービスからも毎日の投稿を取得してまとめていきたいと考えています。