RSS,大家应该都见过的,有的同学可能经常使用,在这里简单分享一下,对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
先说一下,我们已经知道一个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; }
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实体
<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:这里简要说了一下,以后如果用到了,会再深入学习。
我们已经可以简单的实现解析了,我们下面在学习一下怎样生成。
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"); }
好了,就简单说这么多,有待以后的深入研究。