2009年12月17日木曜日

GEA/J上でROMEを使ってフィード処理

スズキです。

GAE/Jで「適当なフィードをを読み込み表示する」ってやつの続きです。
前回の「GAE/JでURLフェッチの低レベルAPI」でフィードの取得まではできました。
http://blog.suz-lab.com/2009/12/gaejurlapi.html

次はROME 使って、
https://rome.dev.java.net/
フィード情報をオブジェクトにして、Velocityテンプレートに渡して表示です。

まず、ROMEを使うには下記のjarが必要になります。

--------【WEB-INF/lib】--------
...
jdom-1.1.1.jar
rome-1.0.jar
xercesImpl-2.9.1.jar
--------

そして、下記コードで、URLフェッチで取得したフィードデータを
ROMEのオブジェクトにしてVelocityテンプレートに渡しています。
("T2 & Velocity"を前提にしています)
http://blog.suz-lab.com/2009/12/gaej-velocity-t2.html

--------【Java】--------
URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService();
HTTPRequest httpRequest = new HTTPRequest(
  new URL("http://feeds.feedburner.com/suz-lab-blog"),
  HTTPMethod.GET,
  disallowTruncate().followRedirects()
);
HTTPResponse httpResponse = fetchService.fetch(httpRequest);
SyndFeedInput feedInput = new SyndFeedInput();
SyndFeed feed = feedInput.build(
  new InputStreamReader(
    new ByteArrayInputStream(httpResponse.getContent()),
    "UTF-8"
  )
);
request.setAttribute("feed", feed);
--------

InputStreamReaderをインスタンス化するときに、
第二引数に文字コードを指定しないと、文字化けします。

Velocityテンプレートは次のような感じです。

--------【Velocity】--------
<dl class="news">
  #foreach($entry in $feed.entries)
  <dt>$entry.publishedDate</dt>
  <dd><a href="$entry.link">$entry.title</a></dd>
  #end
</dl>
--------

このままだと、日付の表記がカッコ悪いので、"toolbox.xml"を設定しなければ...

0 コメント: