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

» 2005年02月01日 10時00分 公開
[山田祥寛@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 © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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