RomeでRSSフィードをパース

初めて使ったのですが、Romeはフォーマットを意識する必要もなく簡単にRSSフィードのパースができて素晴らしいですね。

import java.net.URL;
import java.util.List;

import org.xml.sax.InputSource;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

public class RomeSample {

    public static void main(String[] args) throws Exception {

        SyndFeedInput feedInput = new SyndFeedInput();
        URL url = new URL("http://d.hatena.ne.jp/srkzhr/rss");
        
        SyndFeed feed = feedInput.build(new XmlReader(url));
        List<SyndEntry> entries = feed.getEntries();
        for (SyndEntry entry : entries) {
            System.out.println(entry.getTitle());
            System.out.println(entry.getLink());
        }

        feed = feedInput.build(new InputSource(url.openStream()));
        entries = feed.getEntries();
        for (SyndEntry entry : entries) {
            System.out.println(entry.getTitle());
            System.out.println(entry.getLink());
        }

    }

}

ただ、同じものをGoogle App Engine上で動作させてみたところ、うまくいきませんでした。

ローカル環境では以下のライブラリのみで動作しますが

  • rome-1.0.jar
  • jdom.jar (1.1)

以下リンクにある通り、クラウド上ではxercesも合わせてデプロイしないと動作しないので注意が必要です。

当方ではjdomに同梱されているxerces.jarを持っていくと正常に動作する事を確認できました。

http://groups.google.co.jp/group/google-app-engine-japan/browse_thread/thread/e9283474dda71bb3?pli=1
http://code.google.com/p/googleappengine/issues/detail?id=1367