RSS,大家应该都见过的,有的同学可能经常使用,在这里简单分享一下,对RSS的理解。
1. RSS简介
RSS(简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘。RSS文件(或称做摘要、网络摘要、或
频更新,提供到频道)包含了全文或是节录的文字,再加上发用者所订阅之网摘布数据和授权的元数据。
Really Simple Syndication“聚合真的很简单”就是RSS的英文原意。把新闻标题、摘要(Feed)、内容按照用户的要求,“送”到用户的桌面就是RSS的目的。RSS一词有时
候仍大体上意为社会性书签,包括了各种RSS的不同格式。例如,Blogspace对使用网摘于一集成器内之动作标为RSS info和RSS reader。虽然它的第一个句子就包含了明确
的Atom格式:“RSS和Atom文件能够用简单的格式从网站更新信息至你的电脑!”
RSS摘要可以借由RSS阅读器、feed reader或是aggregator等网页或以桌面为架构的软件来阅读。标准的XML文件式可允许信息在一次发布后通过不同的程序阅览。用户
借由将网摘输入RSS阅读器或是用鼠标点取浏览器上指向订阅程序的RSS小图标之URI(非通常称为URL)来订阅网摘。RSS阅读器定期检阅是否有更新,然后下载给监看用户
界面。
----摘自“维基百科”
RSS的基本格式:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>RSS Title</title>
<description>This is an example of an RSS feed</description>
<link>http://www.someexamplerssdomain.com/main.html</link>
<lastBuildDate>Mon, 06 Sep 2010 00:01:00 +0000 </lastBuildDate>
<pubDate>Mon, 06 Sep 2009 16:20:00 +0000 </pubDate>
<ttl>1800</ttl>
<item>
<title>Example entry</title>
<description>Here is some text containing an interesting description.</description>
<link>http://www.wikipedia.org/</link>
<guid>unique string per item</guid>
<pubDate>Mon, 06 Sep 2009 16:20:00 +0000 </pubDate>
</item>
</channel>
</rss>
关于RSS的格式详细说明可以看这里:
http://cyber.law.harvard.edu/rss/rss.html
2. 解析RSS
先说一下,我们已经知道一个RSS地址,怎样解析她。
我们以人民网的:http://www.people.com.cn/rss/politics.xml 为例。
public String parseRss() throws Exception {
//根据URL解析RSS,转换字符串
URL url = new URL(rssUrl);
InputStream inputstream = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream));
StringBuilder data = new StringBuilder();
String line = null;
while( (line = reader.readLine()) != null ) {
data.append(line);
}
reader.close();
inputstream.close();
//解析字符串
parse(data.toString());
return SUCCESS;
}
我们将传过来的URL,读取一行一行读取到data里,然后,使用rsslibj解析
private void parse(String data) throws ParseException {
StringReader reader = new StringReader(data);
// 创建RSS阅读对象的
RSSReader rssReader = new RSSReader();
// 设置读取内容
rssReader.setReader(reader);
channel = rssReader.getChannel();
}
private String rssUrl; //RSS地址
private Channel channel; //RSS实体
通过这个Channel,我们就可以将RSS中的信息读取出来了。
<h3>解析结果</h3>
描述:<s:property value="channel.description"/><br/>
链接: <a target="_blank" href="<s:property value="channel.link"/>"> <s:property value="channel.description"/> </a> <br/>
内容:<br/>
<s:iterator value="channel.items" id="item">
题目:<span><s:property value="title"/></span> <br/>
作者:<s:property value="dcCreator"/><br/>
描述:<s:property value="description"/><br/>
链接: <a href="<s:property value="link"/>"> <s:property value="title"/> </a> <br/>
<br/>
</s:iterator>
解析之后,是这样的:
PS:这里简要说了一下,以后如果用到了,会再深入学习。
3. 生成RSS
我们已经可以简单的实现解析了,我们下面在学习一下怎样生成。
public String createRss() throws Exception{
String rssData = create();
response.setContentType("text/xml;charset=utf-8");
PrintWriter out = response.getWriter();
out.println(rssData);
out.flush();
out.close();
return NONE;
}
private String create() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Channel channel = new Channel();
channel.setDescription("哈,我就想测试一下");
channel.setLink("http://localhost/");
channel.setTitle("My Channel");
channel.setImage("http://localhost/", "The Channel Image", "http://localhost/foo.jpg");
channel.setTextInput("http://localhost/search", "Search The Channel Image", "The Channel Image", "s");
channel.addItem("http://localhost/item1", "The First Item covers details on the first item>", "The First Item")
.setDcContributor("Joseph B. Ottinger");
channel.addItem("http://localhost/item2", "The Second Item covers details on the second item",
"The Second Item").setDcCreator("Jason Bell");
return channel.getFeed("2.0");
}
显示界面是这样的:
好了,就简单说这么多,有待以后的深入研究。