JavaでRSSを解析する時、Rome Fetcherを使うと簡単に解析ができます。簡単な使い方から、実践的なタグの抜き出しまでを簡単にまとめてみます。
まず、ライブラリのダウンロードは以下より。ROME1.0はJDOM1.1に依存しているので、そちらもダウンロードが必要です。ちなみに、JDOMはバージョン2でなく1なので注意です。
Nashorn(JavaScript)から利用する例ですが、以下のようになります。
// --- var SyndFeedInput = Java.type("com.sun.syndication.io.SyndFeedInput"); var XmlReader = Java.type("com.sun.syndication.io.XmlReader"); // --- var feed_url = new java.net.URL(url_s); var feed_input = new SyndFeedInput(feed_url); var xml_r = new XmlReader(feed_url); var feed = feed_input.build(xml_r); // サイト全体の情報 print(feed.getTitle()); // サイトのタイトルを表示 print(feed.getLink()); // サイトのURLを表示 var list = feed.getEntries(); // 各エントリの情報 --- (*1) for (var i in list) { var entry = list[i]; var title = entry.getTitle(); var url = entry.getLink(); print("---"); print(title); print(url); }
とは言え、これでは、汎用的な決められた項目しか取得できません。そこで、規格外のRSSフィードを解析したい場合には、次のように、各エントリのgetForeignMarkup()メソッドを利用して、各タグを一つずつチェックしていく行く必要があります。
上記の(*1)の部分を、次のように書き換えます。getForeignMarkup()メソッドの返り値は、ArrayList<org.jdom.Element>なので、各Elementをfor文で回して必要な値を取得するという手順になります。
var list = feed.getEntries(); for (var i in list) { var entry = list[i]; //... var fms = entry.getForeignMarkup(); for (var j in fms) { var elm = fms[j]; print("--" + elm.getName()); if (elm.getName() == "content") { image = elm.getAttribute("url").getValue(); } } }