Rss4j
| 日本語 | 豪華蜘蛛の巣場要約ジャバ用 |
| 英語 | RSS for Java |
| ふりがな | あーるえすえすふぉーじゃば |
| フリガナ | アールエスエスフォージャバ |
RSS用XMLを作成・解析するためのライブラリ。
RSSはXML形式だが、それをDOM等を使用して作成する場合、RSSのフォーマットを調べてそれに合わせて作成する必要がある。
Rss4jは、タイトル・要約文・URL等を設定することでXMLを出力するため、簡単にRSS用XMLを作成することができる。
出力先は、Fileクラスを指定することでファイルを出力先にすることができる。また、OutputStreamクラスのサブクラス、Writerクラスのサブクラスも指定できるため、バイト出力ストリームや文字出力ストリームも対象とすることができる。
また、Rss4jは他のXMLファイルを読み込み解析(パーシング)することもできる。RSSは、他のRSSを取り込みまとめ直したRSSを作成する場合もあるため、その場合にはこの機能を利用して解析・再構築する。
RSSはXML形式だが、それをDOM等を使用して作成する場合、RSSのフォーマットを調べてそれに合わせて作成する必要がある。
Rss4jは、タイトル・要約文・URL等を設定することでXMLを出力するため、簡単にRSS用XMLを作成することができる。
出力先は、Fileクラスを指定することでファイルを出力先にすることができる。また、OutputStreamクラスのサブクラス、Writerクラスのサブクラスも指定できるため、バイト出力ストリームや文字出力ストリームも対象とすることができる。
また、Rss4jは他のXMLファイルを読み込み解析(パーシング)することもできる。RSSは、他のRSSを取り込みまとめ直したRSSを作成する場合もあるため、その場合にはこの機能を利用して解析・再構築する。
参考サイト
// 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();
}
}
}
}
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();
}
}
}
}




