2008年6月2日月曜日

RSSをROMEを使ってFeedを取得して読んでみた。(更新ping受信サーバ作成その 4)

前回まででRSSのURLが取得できたのでそれを使ってRSSの中身を読み取ります。
最初RSSだからRDFを扱うライブラリがあれば簡単だろう、とRDFライブラリを調べたのですが、どうもこのRSS一筋縄ではいきません。


私はこのRSSというのはRDF Site Summaryのことだと思ったいたのですが、それだけじゃないんです。
* RDF Site Summary(RSS 0.9とRSS 1.0)
* Rich Site Summary(RSS 0.91)
* Really Simple Syndication(RSS 2.0)
とこんな種類に分かれているんです。そう、同じRSSという名前なのにバージョンによって中身が全然違うんです。RDFなのは0.9と1.0のみ。
ということはRDFのつもりでRSS 2.0を処理しようとしても中身を読み取ることなんて出来ないわけです。
かといって、バージョンを調べてこれはRDFだからこの処理、こいつはXMLだから……というのはめんどくさすぎです。
いい手はないかと調べるとありました。それがROMEです。(ローマと読む?)
このライブラリは以下のRSSを統一的に処理することが出来るんです。
RSS 0.90,
RSS 0.91 Netscape,
RSS 0.91 Userland,
RSS 0.92,
RSS 0.93,
RSS 0.94,
RSS 1.0,
RSS 2.0,
Atom 0.3,
Atom 1.0.
……えーと、なんでこんなにいろいろあるんだか、ふざけんな、と言いたいところですが……。ま、まぁこのあたりをまとめてやってくれるわけで楽できるわけです。
では解説です。
まず必要なライブラリをダウンロードします。
ROME
ROME Fetcher
JDOM
最初JDOMがいるとは思ってなかったんですが、ROMEだけで試してみたところエラーが出たので必要なようです。
あと、こんな間違いする人はいないと思いますがjdom.jarは解凍したフォルダのbuildの中に入ってます。最初libの中を探してなかったので焦りましたw
今回もRSSを読み込む部分のメソッドのみ抜粋しました。


private SyndEntry getUpdateEntry(String rssURL)
throws IllegalArgumentException, MalformedURLException,
IOException, FeedException, FetcherException {
SyndEntry entry = null;
FeedFetcher fetcher = new HttpURLFeedFetcher();
SyndFeed feed = fetcher.retrieveFeed(new URL(rssURL));
// エントリー取得
List entries = feed.getEntries();
entry = entries.get(0);
return entry;
}


FeedFetcher fetcher = new HttpURLFeedFetcher();
SyndFeed feed = fetcher.retrieveFeed(new URL(rssURL));
でfeedを読み込みます。
個別の記事の状態は
List entries = feed.getEntries();
でListで取得できます。
今回Listの最初の一件を無条件に取得してます。このListが新着順になっていると信じてw(新着順でないなら、ソート処理を行う必要がありますね。)
で、今回知りたい記事の情報ですが、以下のように取得します。
Date date = entry.getPublishedDate();
String link = entry.getLink();
String title = entry.getTitle();
getPublishedDateで記事の更新時間
getLinkで記事のURL
getTitleで記事の題名
が取得できます。
他にも取得できる項目はありますが、それはSyndEntryのJavaDocでも見てください。私は今回必要なさそうな部分は見てませんw

0 件のコメント:

コメントを投稿