RSSをパースしてみる
ニコニコ動画をJavaでゴニョゴニョする計画 第1弾。
rss4jっていつの間にか公開が停止されていた*1ので、違うライブラリを使って
書いてみた。
使ったライブラリはinforma。
rss4jと同じような機能を持っているので問題ないかな。詳しくしらないけどw
クラスパスは以下の4つのJarに設定。依存関係があるので全て必要。
- informa.jar
- commons-logging.jar
- jdom.jar
- xercesImpl.jar
早速ソース晒し。
NicoRssAnalyzer.java
package niconico; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import de.nava.informa.core.ChannelIF; import de.nava.informa.core.ItemIF; import de.nava.informa.core.ParseException; import de.nava.informa.impl.basic.ChannelBuilder; import de.nava.informa.parsers.FeedParser; public class NicoRssAnalyzer { public ArrayList<RankingInfoBean> rankingAnalyzer() { ArrayList<RankingInfoBean> rankingList = new ArrayList<RankingInfoBean>(); try { URL url = new URL("http://www.nicovideo.jp/ranking/daily/all?rss=2.0"); ChannelIF channel = FeedParser.parse(new ChannelBuilder(), url); System.out.println(channel.getTitle()); System.out.println(channel.getDescription()); Collection<ItemIF> list = channel.getItems(); ItemIF[] items = (ItemIF[]) list.toArray(new ItemIF[0]); int cnt = 0; for(ItemIF element:items){ RankingInfoBean tmp = new RankingInfoBean(); tmp.setTitle(element.getTitle()); tmp.setUrl(element.getLink().toString()); rankingList.add(tmp); if(cnt == 4){ break; } cnt++; } } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } return rankingList; } }
ちょっと解説
ニコニコ動画の中にある総合ランキングのRSSを取得してくるソース。
http://www.nicovideo.jp/ranking/daily/all?rss=2.0 で取得できるURLオブジェクト
ChannelIFに変換。ChannelIFからはRSSヘッダの部分のデータを取得することができる。
RSSのBody部分はChannelIF.getItem()で取得する。
Collection
その中からデータを取得するという仕組み。
ちなみに途中でループ回数制御してるのはとってくるのが1〜100位となってるので
途中で切るため。
ちなみにこのソース自体が他のソースと繋いでた関係でArrayList
返却するようにしている。*2
RankingInfoBean .java
package niconico; import java.io.Serializable; public class RankingInfoBean implements Serializable{ private static final long serialVersionUID = 960019628043979551L; private String title = ""; private String url = ""; private String message = ""; public String getMessage() { this.message = "ニコニコ動画DailyRanking " +this.title+this.url; return message; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
このBeanがデータを返却してくれる。
titleのほうが
第X位 : 動画タイトル
urlは動画のURLが返却されます。
第X位ってのはもともとRSSのTitleに含まれてるから特に加工してるわけではないです。
ニコニコ動画のWebAPIが公開されているのでそちらから各動画の詳細が取得できるよう
なんだけど、今日やってみたらレスポンスは200返してるけど内容が取得できてなかったり、
期待値が取れなかったりと試行錯誤中。
それかWebAPIが一部分しか実装されてないのかな?
もうちょっと調べてみる。
そんなかんじでーす