Codin’ In The Free World

2007-12-11

[][] atomutil - RubyでAtomPubを操作するパッケージをリリースしました

PerlのXML::Atom, XML::Atom::Service, XML::Atom::Ext::Threading, AtompubをRubyにportingしてみました。

atompubというネームスペースは既に確保されてた(ネームスペースだけ8月に確保されてて、具体的なファイルやリポジトリは何も無い…)ので

atomutilという名前にしておきました。

RubyForge

RDoc

gem install atomutil

まだDocumentやTestが足りず、非常にバギーだと思いますが、試してみたい方はどうぞ。

使い方はPerlのものとほぼ一緒です。詳しくは上のリンクからRDocを参照して下さい。

entry = Atom::Entry.new
entry.title = 'My Entry'
entry.summary = 'Summary'
entry.updated = Time.now
author = Atom::Author.new
author.name = 'Lyo Kato'
author.email = 'lyo.kato at gmail.com'
entry.author = author
puts entry.to_s

それぞれの要素はnewするときにも設定できるようにしてみました。

entry = Atom::Entry.new :title => 'My Entry', :summary => 'Summary'

Rubyっぽくブロックで初期化も出来ます。

entry = Atom::Entry.new do |e|
  e.title = 'MyBlog'
  e.summary = 'Summary'
end

Atompub client


auth = Atompub::Auth::Wsse.new :username => 'foo', :password => 'bar'
client = Atompub::Client.new :auth => auth
service = client.get_service( end_point )
collection_uri = service.workspace.collection.href

new_entry = Atom::Entry.new :title => 'New Entry', :published => Time.now
slug = 'New Entry'
client.create_entry( collection_uri, new_entry, slug )

feed = client.get_feed( collection_uri )
entries = feed.entries

first_entry = entries[0]
first_entry.title = 'Changed Title'
client.update_entry( first_entry.edit_link, first_entry )

second_entry = entries[1]
client.delete_entry( second_entry.edit_link )

認証部分以外はPerlのAtompub::Clientとほぼ同じ使い方が出来ます。

注意: Perl版との違い

上記認証部分の違い

クライアントの認証部分は, Strategyパターンでブリッジすることにしました。

これは、このあとAtompub::Auth::OpenIDやAtompub::Auth::OAuthを

作ることを考慮にいれてこうしてみました。

version0.3未対応

現在は1.0しか対応していません。

Personの扱い

authorとcontributorに関しては、Atom::AuthorとAtom::Contributorを利用することにしました。

それぞれAtom::Personを継承してあります。

また、Atom::Personでデータを用意して、EntryやFeedのauthor,contributorに設定するときにto_author, to_contributorを使ってもよいです。

person = Atom::Person.new :name => 'John'
entry = Atom::Entry.new :title => 'foo'
entry.author = person.to_author
entry.contributor = person.to_contributor

Perl版はauthorもcontributorも、XML::Atom::Personをセットしますが、そのために、

$entry->add_contributor($person)がうまく動きません。タグ名がauthorになってしまいます。

複数のcontributorが必要なことがあまりないし、どうしてもセットしたければaddメソッドで直接

設定するのも簡単なので、ということかもしれません。

Server側実装が無い

Rails Pluginとか作っとくとAtomPub普及に割と大きく貢献できるかも?


参考

http://d.hatena.ne.jp/ikasam_a/20071209/1197221298

http://teahut.sakura.ne.jp/b/2007-08-12-1.html

masuidrivemasuidrive 2008/01/15 16:34 サーバ側の実装。非常に期待してますw

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証