JavaA2Z

KAB-studio > プログラミング > JavaA2Z > Rss4jとは

Rss4j

日本語 豪華蜘蛛の巣場要約ジャバ用
英語 RSS for Java
ふりがな あーるえすえすふぉーじゃば
フリガナ アールエスエスフォージャバ

解説

RSSXMLを作成・解析するためのライブラリ
RSSXML形式だが、それをDOM等を使用して作成する場合、RSSフォーマットを調べてそれに合わせて作成する必要がある。
Rss4jは、タイトル・要約文・URL等を設定することでXMLを出力するため、簡単にRSSXMLを作成することができる。
出力先は、Fileクラスを指定することでファイルを出力先にすることができる。また、OutputStreamクラスサブクラスWriterクラスサブクラスも指定できるため、バイト出力ストリーム文字出力ストリームも対象とすることができる。
 
また、Rss4jは他のXMLファイルを読み込み解析(パーシング)することもできる。RSSは、他のRSSを取り込みまとめ直したRSSを作成する場合もあるため、その場合にはこの機能を利用して解析・再構築する。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.StringWriter;
import java.io.IOException;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import churchillobjects.rss4j.RssChannel;
import churchillobjects.rss4j.RssChannelItem;
import churchillobjects.rss4j.RssDocument;
import churchillobjects.rss4j.RssDublinCore;
import churchillobjects.rss4j.generator.RssGenerator;
import churchillobjects.rss4j.generator.RssGenerationException;

public class Sample
{
    public static void main( String[] args )
    {
/*
■Rss4jの使用方法

1.
http://www.churchillobjects.com/c/13005.html

から
 
rss4j092.ja

というファイルをダウンロードしてください。


2.
この解凍してください(このファイルを直接クラスパスに
追加しないでください。拡張子を.zipに変えて解凍すると
いいかもしれません)


3.
libフォルダにある以下のファイルをクラスパスに追加してください。

rss4j.jar


4.
Rss4jは、Xercesを使用しますのでこちらも準備する必要があります。

http://xml.apache.org/xerces-j/

から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)ダウンロードして
ください。


5.
以下のファイルをクラスパスに加えてください。

xercesImpl.jar
xml-apis.jar


注:この2ファイルをクラスパスに加えないと、実行時に以下の例外が
投げられます。

・xercesImpl.jarがない場合
java.lang.NoClassDefFoundError: org/apache/xml/serialize/BaseMarkupSerializer
    at Sample.main(Sample.java:133)

・xml-apis.jarがない場合
java.lang.NoClassDefFoundError: org/w3c/dom/ranges/DocumentRange
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
    at churchillobjects.rss4j.generator.RssGenerator.<init>(RssGenerator.java:184)
    at churchillobjects.rss4j.generator.RssGeneratorImpl090.<init>(RssGeneratorImpl090.java:49)
    at churchillobjects.rss4j.generator.RssGeneratorImpl091.<init>(RssGeneratorImpl091.java:56)
    at churchillobjects.rss4j.generator.RssGeneratorImpl100.<init>(RssGeneratorImpl100.java:45)
    at churchillobjects.rss4j.generator.RssGenerator.getGenerator(RssGenerator.java:171)
    at churchillobjects.rss4j.generator.RssGenerator.generateRss(RssGenerator.java:148)
    at Sample.main(Sample.java:142)
*/

        StringWriter stringWriter = null;
        try
        {
            /* RSSのバージョン */
            String VERSION = "1.0";
            /** ホームページのタイトル */
            String HOMEPAGE_TITLE = "テストのホームページ";
            /** ホームページのURL */
            String HOMEPAGE_URL = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html";
            /** ホームページの説明 */
            String HOMEPAGE_DESCRIPTION = "これはJavaA2Zの「RSS」単語のテストです。";
            /** RSSのURI */
            String HOMEPAGE_RSS_URI = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss";
            /** RSSの言語 */
            String HOMEPAGE_LANG = "ja";
            /** コピーライト表記 */
            String HOMEPAGE_COPYRIGHT = "(C)KAB-studio 2005 ALL RIGHTS RESERVED";
            /** RSS 日付フォーマット。 */
            String RSS_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'+09:00'";
            SimpleDateFormat FORMATTER = new SimpleDateFormat( RSS_DATE_TIME_FORMAT );

            // RSSドキュメントを作成。
            RssDocument rssDocument = new RssDocument();
            // バージョンはRSS1.0にします。
            rssDocument.setVersion( VERSION );
            // チャンネルの基本情報をセット。
            RssChannel rssChannel = new RssChannel();
            rssChannel.setChannelTitle( HOMEPAGE_TITLE );
            rssChannel.setChannelLink( HOMEPAGE_URL );
            rssChannel.setChannelDescription( HOMEPAGE_DESCRIPTION );
            rssChannel.setChannelUri( HOMEPAGE_RSS_URI );
            rssChannel.setChannelLanguage( HOMEPAGE_LANG );
            rssChannel.setChannelCopyright( HOMEPAGE_COPYRIGHT );

            // チャンネルの基本情報の方にも Dublin Core をセット。
            RssDublinCore rssDublinCoreForChannel = new RssDublinCore();
            rssDublinCoreForChannel.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );
            //  date: 2005-11-24T19:49:28+09:00
            rssChannel.setDublinCore( rssDublinCoreForChannel );
            // これがないと
            // 未宣言の名前空間の接頭語を参照します: 'dc'。リソース 'http://192.168.0.50/Programing/JavaA2Z/rss' の実行エラーです。ライン 24、位置 14 
            //     <dc:date>2005-02-24T03:15:11+09:00</dc:date>
            // ってエラーになります。

            // アイテムをひとつ作ります。
            RssChannelItem rssChannelItem = new RssChannelItem();
            rssChannelItem.setItemTitle( "項目1:Writer" );
            rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html" );
            rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
            // 日付情報としてDublin Coreをセットします。
            RssDublinCore rssDublinCore = new RssDublinCore();
            rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );    // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
            //  date: 2005-11-24T19:49:28+09:00
            rssChannelItem.setDublinCore( rssDublinCore );
            // アイテムをチャンネルに追加します。
            rssChannel.addItem( rssChannelItem );

            // もうひとつアイテムを作ります。
            rssChannelItem = new RssChannelItem();
            rssChannelItem.setItemTitle( "項目2:StringWriter" );
            rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html" );
            rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
            // 日付情報としてDublin Coreをセットします。
            rssDublinCore = new RssDublinCore();
            rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );    // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
            //  date: 2005-11-24T19:49:28+09:00
            rssChannelItem.setDublinCore( rssDublinCore );
            // アイテムをチャンネルに追加します。
            rssChannel.addItem( rssChannelItem );

            // RssChannelをRssDocumentに追加します。
            rssDocument.addChannel( rssChannel );

            // 書き込みます。
            stringWriter = new StringWriter();
            RssGenerator.generateRss( rssDocument, stringWriter );
            System.out.println( stringWriter.toString() );
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <channel rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss">
    <title>テストのホームページ</title>
    <description>これはJavaA2Zの「RSS」単語のテストです。</description>
    <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html</link>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html"/>
        <rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html"/>
      </rdf:Seq>
    </items>
    <dc:date>2005-11-24T19:49:28+09:00</dc:date>
  </channel>
  <item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html">
    <title>項目1:Writer</title>
    <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html</link>
    <description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
    <dc:date>2005-11-24T19:49:28+09:00</dc:date>
  </item>
  <item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html">
    <title>項目2:StringWriter</title>
    <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html</link>
    <description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
    <dc:date>2005-11-24T19:49:28+09:00</dc:date>
  </item>
</rdf:RDF>
*/
            // ファイルに出力する場合は、これを
            // UTF-8形式で出力すればいいでしょう。
        }
        catch( ParseException e )
        {
            e.printStackTrace();
        }
        catch( RssGenerationException e )
        {
            e.printStackTrace();
        }
        finally
        {
            // 最後にclose()メソッドを呼んで後処理をします。
            // また、これは必ず行うため、finally内で行います。
            try
            {
                if( stringWriter != null )
                {
                    stringWriter.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}
// Sample.java
import java.io.StringWriter;
import java.io.IOException;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import churchillobjects.rss4j.RssChannel;
import churchillobjects.rss4j.RssChannelItem;
import churchillobjects.rss4j.RssDocument;
import churchillobjects.rss4j.RssDublinCore;
import churchillobjects.rss4j.generator.RssGenerator;
import churchillobjects.rss4j.generator.RssGenerationException;

public class Sample
{
    public static void main( String[] args )
    {
/*
■Rss4jの使用方法

1.
http://www.churchillobjects.com/c/13005.html

から
 
rss4j092.ja

というファイルをダウンロードしてください。


2.
この解凍してください(このファイルを直接クラスパスに
追加しないでください。拡張子を.zipに変えて解凍すると
いいかもしれません)


3.
libフォルダにある以下のファイルをクラスパスに追加してください。

rss4j.jar


4.
Rss4jは、Xercesを使用しますのでこちらも準備する必要があります。

http://xml.apache.org/xerces-j/

から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)ダウンロードして
ください。


5.
以下のファイルをクラスパスに加えてください。

xercesImpl.jar
xml-apis.jar


注:この2ファイルをクラスパスに加えないと、実行時に以下の例外が
投げられます。

・xercesImpl.jarがない場合
java.lang.NoClassDefFoundError: org/apache/xml/serialize/BaseMarkupSerializer
    at Sample.main(Sample.java:133)

・xml-apis.jarがない場合
java.lang.NoClassDefFoundError: org/w3c/dom/ranges/DocumentRange
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
    at churchillobjects.rss4j.generator.RssGenerator.<init>(RssGenerator.java:184)
    at churchillobjects.rss4j.generator.RssGeneratorImpl090.<init>(RssGeneratorImpl090.java:49)
    at churchillobjects.rss4j.generator.RssGeneratorImpl091.<init>(RssGeneratorImpl091.java:56)
    at churchillobjects.rss4j.generator.RssGeneratorImpl100.<init>(RssGeneratorImpl100.java:45)
    at churchillobjects.rss4j.generator.RssGenerator.getGenerator(RssGenerator.java:171)
    at churchillobjects.rss4j.generator.RssGenerator.generateRss(RssGenerator.java:148)
    at Sample.main(Sample.java:142)
*/

        StringWriter stringWriter = null;
        try
        {
            /* RSSのバージョン */
            String VERSION = "1.0";
            /** ホームページのタイトル */
            String HOMEPAGE_TITLE = "テストのホームページ";
            /** ホームページのURL */
            String HOMEPAGE_URL = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html";
            /** ホームページの説明 */
            String HOMEPAGE_DESCRIPTION = "これはJavaA2Zの「RSS」単語のテストです。";
            /** RSSのURI */
            String HOMEPAGE_RSS_URI = "http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss";
            /** RSSの言語 */
            String HOMEPAGE_LANG = "ja";
            /** コピーライト表記 */
            String HOMEPAGE_COPYRIGHT = "(C)KAB-studio 2005 ALL RIGHTS RESERVED";
            /** RSS 日付フォーマット。 */
            String RSS_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'+09:00'";
            SimpleDateFormat FORMATTER = new SimpleDateFormat( RSS_DATE_TIME_FORMAT );

            // RSSドキュメントを作成。
            RssDocument rssDocument = new RssDocument();
            // バージョンはRSS1.0にします。
            rssDocument.setVersion( VERSION );
            // チャンネルの基本情報をセット。
            RssChannel rssChannel = new RssChannel();
            rssChannel.setChannelTitle( HOMEPAGE_TITLE );
            rssChannel.setChannelLink( HOMEPAGE_URL );
            rssChannel.setChannelDescription( HOMEPAGE_DESCRIPTION );
            rssChannel.setChannelUri( HOMEPAGE_RSS_URI );
            rssChannel.setChannelLanguage( HOMEPAGE_LANG );
            rssChannel.setChannelCopyright( HOMEPAGE_COPYRIGHT );

            // チャンネルの基本情報の方にも Dublin Core をセット。
            RssDublinCore rssDublinCoreForChannel = new RssDublinCore();
            rssDublinCoreForChannel.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );
            //  date: 2005-11-24T19:49:28+09:00
            rssChannel.setDublinCore( rssDublinCoreForChannel );
            // これがないと
            // 未宣言の名前空間の接頭語を参照します: 'dc'。リソース 'http://192.168.0.50/Programing/JavaA2Z/rss' の実行エラーです。ライン 24、位置 14 
            //     <dc:date>2005-02-24T03:15:11+09:00</dc:date>
            // ってエラーになります。

            // アイテムをひとつ作ります。
            RssChannelItem rssChannelItem = new RssChannelItem();
            rssChannelItem.setItemTitle( "項目1:Writer" );
            rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html" );
            rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
            // 日付情報としてDublin Coreをセットします。
            RssDublinCore rssDublinCore = new RssDublinCore();
            rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );    // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
            //  date: 2005-11-24T19:49:28+09:00
            rssChannelItem.setDublinCore( rssDublinCore );
            // アイテムをチャンネルに追加します。
            rssChannel.addItem( rssChannelItem );

            // もうひとつアイテムを作ります。
            rssChannelItem = new RssChannelItem();
            rssChannelItem.setItemTitle( "項目2:StringWriter" );
            rssChannelItem.setItemLink( "http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html" );
            rssChannelItem.setItemDescription( "J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は..." );
            // 日付情報としてDublin Coreをセットします。
            rssDublinCore = new RssDublinCore();
            rssDublinCore.setDate( FORMATTER.format( Calendar.getInstance().getTime() ) );    // 注:ここでは現在日時にしていますが、実際には記事の配信日時を指定します。
            //  date: 2005-11-24T19:49:28+09:00
            rssChannelItem.setDublinCore( rssDublinCore );
            // アイテムをチャンネルに追加します。
            rssChannel.addItem( rssChannelItem );

            // RssChannelをRssDocumentに追加します。
            rssDocument.addChannel( rssChannel );

            // 書き込みます。
            stringWriter = new StringWriter();
            RssGenerator.generateRss( rssDocument, stringWriter );
            System.out.println( stringWriter.toString() );
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <channel rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000935/rss">
    <title>テストのホームページ</title>
    <description>これはJavaA2Zの「RSS」単語のテストです。</description>
    <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000935.html</link>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html"/>
        <rdf:li rdf:resource="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html"/>
      </rdf:Seq>
    </items>
    <dc:date>2005-11-24T19:49:28+09:00</dc:date>
  </channel>
  <item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html">
    <title>項目1:Writer</title>
    <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000914.html</link>
    <description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
    <dc:date>2005-11-24T19:49:28+09:00</dc:date>
  </item>
  <item rdf:about="http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html">
    <title>項目2:StringWriter</title>
    <link>http://192.168.0.50/Programing/JavaA2Z/Word/00000908.html</link>
    <description>J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名は...</description>
    <dc:date>2005-11-24T19:49:28+09:00</dc:date>
  </item>
</rdf:RDF>
*/
            // ファイルに出力する場合は、これを
            // UTF-8形式で出力すればいいでしょう。
        }
        catch( ParseException e )
        {
            e.printStackTrace();
        }
        catch( RssGenerationException e )
        {
            e.printStackTrace();
        }
        finally
        {
            // 最後にclose()メソッドを呼んで後処理をします。
            // また、これは必ず行うため、finally内で行います。
            try
            {
                if( stringWriter != null )
                {
                    stringWriter.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/11/24
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。