Ruby で livedoor blog の Atom API にアクセス
クラスのソース
それでは、まずはクラスのソースです。
require 'net/http' require 'digest/sha1' require 'time' class AtomAPI def initialize(domain, username, password) nonce = '' while nonce.size < 20 nonce << rand(256) end created = Time.new.utc.iso8601.to_s digest = encode64(Digest::SHA1.digest(nonce+created+password)) @domain = domain @wsse = [ %!UsernameToken Username="#{username}", !, %!PasswordDigest="#{digest}", !, %!Nonce="#{encode64(nonce)}", !, %!Created="#{created}"!].join('') end def encode64(str) [str].pack('m').gsub("\n", '') end def get(entry) req = Net::HTTP::Get.new(entry) req['X-WSSE'] = @wsse response = '' Net::HTTP.start(@domain) do |http| response += http.request(req).body end response end end
すいません、なんの工夫もありませんね。強いて言うなら WSSE 認証用のヘッダを作っているあたりは他にも応用できるかもしれません。そうそう、 Atom API に関しては以下のページが日本語で詳しく解説されており、お勧めです。
http://www.witha.jp/Atom/ (解説:Atom)
このページでだいたい網羅されているので、ここでは詳細は省略です^^;。
使い方
まずは以下のようにして AtomAPI クラスのオブジェクトを作成してください。
api = AtomAPI.new('cms.blog.livedoor.com', <ユーザー名>, <パスワード>)
第一引数は Atom API エントリポイントの存在するドメインです。 livedoor blog なら上記の通り 'cms.blog.livedoor.com' で OK です。ユーザー名、パスワードは livedoor blog のものがそのまま使えます。あとは、取得したい情報のパスを指定して get メソッドを呼べばレスポンスが取得できます。以下、代表的な例をご紹介します。
フィードの取得
livedoor blog では、以下の URL で blog の最新記事が取得できます。取得できる件数などは通常の Atom フィードと同じではないかと思います(未確認)。
http://cms.blog.livedoor.com/atom/blog_id=<ブログID>
ブログIDはブログを識別するための番号です。 blog の投稿ページの URL が "http://cms.blog.livedoor.com/cms/article/add?blog_id=???????" のようになっていると思うのですが、この "???????" の部分です。
従って、例えばブログIDが 1234567 であれば、フィードの内容を表示するためには以下のように get メソッドを呼び出せば OK です。
print api.get('/atom/blog_id=1234567')
結果は XML 形式で返されますので、 REXML などで解析するのが手軽でしょう。文字コードが UTF-8 になっている点にもご注意ください。
個別記事の取得
ある特定の記事の情報を取得する場合は以下の URL になります。
http://cms.blog.livedoor.com/atom/blog_id=<ブログID>/entry_id=<記事ID>
記事IDは各記事に固有の番号です。記事のパーマリンクの URL が "http://blog.livedoor.jp/<ユーザー名>/archives/????????.html" のようになっていると思いますが、この ???????? の部分です。
先ほどと同じ 1234567 のブログから 11223344 の記事を表示するならば、以下のように get メソッドを呼び出します。
print api.get('/atom/blog_id=1234567/entry_id=11223344')
この方法なら、フィードの中には含まれない追記部分などもすべて取得できます。
以上、駆け足で申し訳ありませんが、 Atom API にアクセスする Ruby クラスをご紹介しました。 POST や PUT を実装すれば記事の投稿や編集も行えますので、 livedoor blog 投稿ツールなんてのも夢ではありませんね。我こそはという方はぜひ挑戦してみてください!
詳しくはこちらの記事をどうぞ!
この記事にコメントする