ROMEを試してみた
JavaでRSSやAtomを使うためのライブラリROMEを使ってみた。
マイコミの「JavaでAtomやRSS等のフィードを扱うならこれ! - ROME」にサンプルコードがある。
# コード自体は記事で確認してほしい
軽い気持ちで記事などで紹介されているコードを動かそうとすると、かなりの確率で動かない。もちろん記事の通り設定しているにも関わらず。
インストール作業は特に必要ない。ダウンロードしたアーカイブを展開すると、JARファイル(ROMEはrome-0.9.jar、ROME Fetcherはrome-fetcher-0.9.jar)が入手できるので、これらにクラスパスを通してコンパイル/実行を行えばよい。
というわけで、記事の通りやるとこんな感じ。
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/JDOMParseException at com.sun.syndication.io.SyndFeedInput.<init>(SyndFeedInput.java:57) at com.sun.syndication.io.SyndFeedInput.<init>(SyndFeedInput.java:47) at com.sun.syndication.fetcher.impl.HttpURLFeedFetcher.readSyndFeedFromStream(HttpURLFeedFetcher.java:269) at com.sun.syndication.fetcher.impl.HttpURLFeedFetcher.getSyndFeedFromStream(HttpURLFeedFetcher.java:273) at com.sun.syndication.fetcher.impl.HttpURLFeedFetcher.retrieveFeed(HttpURLFeedFetcher.java:146) at Sample01.main(Sample01.java:24)
jdomもいるんだろうなぁ。
というわけでjdomをクラスパスに追加したらちゃんと動いた。
まずはこのblogのRSSを取得してみた。
toString()がちゃんと実装されているので
System.out.println(entry.toString());
と書けば、エントリーの中身が丸ごと見える。
SyndEntryImpl.updatedDate=null SyndEntryImpl.contributors=null SyndEntryImpl.title=[Java]Servlet Filter SyndEntryImpl.categories=[] SyndEntryImpl.publishedDate=Wed May 23 01:19:22 JST 2007 SyndEntryImpl.link=http://d.hatena.ne.jp/j7400157/20070523#1179850762 SyndEntryImpl.authors=null SyndEntryImpl.modules[0].descriptions=[] SyndEntryImpl.modules[0].creators[0]=j7400157 SyndEntryImpl.modules[0].contributors=[] SyndEntryImpl.modules[0].title=null SyndEntryImpl.modules[0].relations=[] SyndEntryImpl.modules[0].publisher=null SyndEntryImpl.modules[0].date=Wed May 23 01:19:22 JST 2007 SyndEntryImpl.modules[0].languages=[] SyndEntryImpl.modules[0].titles=[] SyndEntryImpl.modules[0].rightsList=[] SyndEntryImpl.modules[0].interface=interface com.sun.syndication.feed.module.DCModule SyndEntryImpl.modules[0].subjects[0].value=Java SyndEntryImpl.modules[0].subjects[0].interface=interface com.sun.syndication.feed.module.DCSubject SyndEntryImpl.modules[0].subjects[0].taxonomyUri=null SyndEntryImpl.modules[0].contributor=null SyndEntryImpl.modules[0].sources=[] SyndEntryImpl.modules[0].types=[] SyndEntryImpl.modules[0].type=null SyndEntryImpl.modules[0].rights=null SyndEntryImpl.modules[0].publishers=[] SyndEntryImpl.modules[0].formats=[] SyndEntryImpl.modules[0].dates[0]=Wed May 23 01:19:22 JST 2007 SyndEntryImpl.modules[0].language=null SyndEntryImpl.modules[0].identifiers=[] SyndEntryImpl.modules[0].creator=j7400157 SyndEntryImpl.modules[0].coverage=null SyndEntryImpl.modules[0].uri=http://purl.org/dc/elements/1.1/ SyndEntryImpl.modules[0].description=null SyndEntryImpl.modules[0].identifier=null SyndEntryImpl.modules[0].subject.value=Java SyndEntryImpl.modules[0].subject.interface=interface com.sun.syndication.feed.module.DCSubject SyndEntryImpl.modules[0].subject.taxonomyUri=null SyndEntryImpl.modules[0].relation=null SyndEntryImpl.modules[0].source=null SyndEntryImpl.modules[0].format=null SyndEntryImpl.modules[0].coverages=[] SyndEntryImpl.links=[] SyndEntryImpl.contents[0].value= <div class="section"> <blockquote> <p>mod_rewriteを使えば既存のWebアプリケーションに大きな修正を加えずに、後者のようなアクセシビリティの高いURLを提供することができる。また、サーバ上でWebサイトのフォルダ構成を変更した場合などもmod_rewriteを使用することで変更前のURLから変更後のURLへ転送するといったことが可能だ。</p> <p>これと同様のことをJavaベースのWebアプリケーションで実現するのが"Url Rewrite Filter"だ。Url Rewrite FilterはBSDライセンスで提供されるオープンソースソフトウェアで、商用サポートも用意されている。</p> <br> <p><a href="http://journal.mycom.co.jp/articles/2007/05/21/urlrrewrite/index.html" target="_blank">Java WebアプリでもわかりやすいURLを! - Url Rewrite Filterの使い心地</a></p> </blockquote> <p>これけっこうすごいなぁ。Apache+Tomcat環境で mod_rewrite 使うとどうなるのかなぁ、とかを最近考えていたので。</p> <p>でもApache+Tomcat+これ、だとどんな動きになるんだろう・・・。</p> <p>Servlet Filterをあまり使ったことがないけど、けっこうすごいなと思っている。</p> <p>JIS2004対策に使ったり、特定のケースだけにgzip圧縮をさせたりとかもできるし。</p> </div> SyndEntryImpl.contents[0].type=html SyndEntryImpl.contents[0].interface=interface com.sun.syndication.feed.synd.SyndContent SyndEntryImpl.contents[0].mode=null SyndEntryImpl.enclosures=[] SyndEntryImpl.titleEx.value=[Java]Servlet Filter SyndEntryImpl.titleEx.type=null SyndEntryImpl.titleEx.interface=interface com.sun.syndication.feed.synd.SyndContent SyndEntryImpl.titleEx.mode=null SyndEntryImpl.uri=http://d.hatena.ne.jp/j7400157/20070523#1179850762 SyndEntryImpl.interface=interface com.sun.syndication.feed.synd.SyndEntry SyndEntryImpl.description.value= mod_rewriteを使えば既存のWebアプリケーションに大きな修正を加えずに、後者のようなアクセシビリティの高いURLを提供することができる。また、サーバ上でWebサイトのフォルダ構成を変更した場合などもmod_rewriteを使用することで変更前のURLから変更後のURLへ転送すると SyndEntryImpl.description.type=text/plain SyndEntryImpl.description.interface=interface com.sun.syndication.feed.synd.SyndContent SyndEntryImpl.description.mode=null SyndEntryImpl.foreignMarkup[0]=[Element: <content:encoded [Namespace: http://purl.org/rss/1.0/modules/content/]/>] SyndEntryImpl.author=j7400157
いい感じじゃない。
RSSのライブラリはいろいろ試してみたけど、どれもいまいちだった。
RSS4JはRSS2.0に対応していない。
Jakarta Feed Parserはイベントドリブンな実装らしく、めんどう。
Infomaは更新状況がいまいち。
# 半年くらい前に試した結果だけど。
これまでは、一応ちゃんと動くInfomaを使っていたが、これからはROMEにしよっと。