技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

RSS フィードを拾う

使うのは ROME というライブラリ。

http://mvnrepository.com/artifact/rome/rome/1.0

そのまま sbt に

"rome" % "rome" % "1.0"

としておけば利用可能。
コード的に難しいものはなく、

import com.sun.syndication.io.SyndFeedInput
import com.sun.syndication.feed.synd.SyndEntry

class FeedReader(rssBody:String) {
  val input = new SyndFeedInput
  val feed  = input.build(new StringReader(rssBody))

  import scala.collection.JavaConversions._
  lazy val title = feed.getTitle
  lazy val url   = feed.getLink
  lazy val uri   = feed.getUri
  lazy val entries = feed.getEntries.map(o => o.asInstanceOf[SyndEntry])
}

等としておき、自分のサイトのRSSをざっくり拾ってみたのが

val feed = new FeedReader(body)
logger.info("Title : " + feed.title)
logger.info("URL   : " + feed.url)
logger.info("URI   : " + feed.uri)
feed.entries.foreach(entry => {
   logger.logger.info("Entry : " + entry.getTitle)
})

出力結果

[info] m.a.RssLoader$ - Title : 謎言語使いの徒然
[info] m.a.RssLoader$ - URL   : http://white-azalea.hatenablog.jp/
[info] m.a.RssLoader$ - URI   : null
[info] m.a.RssLoader$ - Entry : WS API でWeb上のデータを引っ張る
[info] m.a.RssLoader$ - Entry : フォームエラーをまとめて表示したい
[info] m.a.RssLoader$ - Entry : JQuery のJSON系リクエストが想定外でハマった
[info] m.a.RssLoader$ - Entry : Form をテンプレート上でバインドする
[info] m.a.RssLoader$ - Entry : Playプロジェクトを作成する
[info] m.a.RssLoader$ - Entry : Form を使う
[info] m.a.RssLoader$ - Entry : Playframework の Form メッセージ多言語化