連載
» 2005年02月01日 10時00分 UPDATE

JavaTips 〜JSP/サーブレット編:他サイトのRSSフィードを自サイトで利用する

[山田祥寛,@IT]

 「サーブレットでRSSフィードを配信する」でも紹介したように、RSS4jのようなライブラリを利用することで、データベースなどの情報から動的にRSSフィードを生成することが可能になります。ただ、RSSフィードは(当然)自らの情報配信のみを目的としたものではありません。ほかのサイトで公開されているRSSフィードを引用することで、自サイトでポータル的に複数サイトの新着情報を一覧表示することも可能になるのです。

 本稿では、著者サポートサイト(http://www.wings.msn.to/contents/rss.php)で公開しているRSSフィードを例に、JSPページに新着情報を一覧表示してみることにしましょう。なお、本稿のサンプルを利用するには、RSS4jライブラリがあらかじめインストールされている必要があります。セットアップの詳細については、「サーブレットでRSSフィードを配信する」を参考にしてください。

リスト1 rssReader.jsp
<%@ page contentType="text/html;charset=Windows-31J" import="java.net.*,java.util.*,churchillobjects.rss4j.*,
churchillobjects.rss4j.parser.*" %>
<%
// 指定されたRSSフィードを入力ストリームとして取得、解析
URL objUrl=new URL("http://www.wings.msn.to/contents/rss.php");
RssDocument objDoc=RssParser.parseRss(
objUrl.openConnection().getInputStream());
// チャネル情報を順に取得
Enumeration objEnm=objDoc.channels();
while(objEnm.hasMoreElements()){
RssChannel objRc=(RssChannel)objEnm.nextElement();
Enumeration items=objRc.items(); %>
  <dl>
  <dt><h2><%=objRc.getChannelTitle()%></h2></dt>
  <dd>
  <dl>
  <%--チャネル配下のアイテム情報を基にアンカータグを出力--%>
  <% while(items.hasMoreElements()){
    RssChannelItem item=(RssChannelItem)items.nextElement(); %>
    <dt><a href="<%=item.getItemLink()%>" target="_blank">
      <%=item.getItemTitle()%></a></dt>
    <dd><%=item.getItemDescription()%></dd>
  <% } %>
  </dl>
  </dd>
  </dl>
<% } %>


 このコードの実行結果は、以下のようになります。

読み込んだRSSフィードを表示 読み込んだRSSフィードを表示

 こうしてみると、RSSフィードの読み込みが実にシンプルであることがお分かりになるはずです。解析したRSSフィードは、RssDocumentクラスを頂点に、複数のチャネル情報(RssChannelクラス)、さらにその配下にサマリアイテム情報(RssChannelItemクラス)などが属するという構成になっていますので、これを順に処理していきます。

 本稿では、対象のURLをコード中にハードコーディングしていますが、これをクエリパラメータなどから動的に取得するようにすれば、より柔軟性を持った作りにすることも可能です。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。