RSS是站点用来和其他站点之间共享内容的一种简易方式(聚合内容),通常被用于新闻和其他按顺序排列的网站,例如Blog。
一 段项目的介绍可能包含新闻的全部介绍等。或者仅仅是额外的内容或者简短的介绍。这些项目的链接通常都能链接到全部的内容。网络用户可以在客户端借助于支持 RSS的新闻聚合软件(如FeedDemon、SharpReader,NewzCrawler),在不打开网站内容页面的情况下阅读支持RSS输出的网 站内容。网站提供RSS输出,有利于让用户发现网站内容的更新。
RSS如何工作?
首先您一般需要下载和安装一个RSS新闻阅读器,然后从网站提供的聚合新闻目录列表中订阅您感兴趣的新闻栏目的内容。订阅后,您将会及时获得所订阅新闻频道的最新内容。
阅读RSS新闻的特点
1.没有广告或者图片来影响标题或者文章概要的阅读。
2.RSS阅读器自动更新你定制的网站内容,保持新闻的及时性。
3.用户可以加入多个定制的RSS提要,从多个来源搜集新闻整合到单个数据流中。
访问者使用特定的RSS阅读器软件,不必登录这个网站就可以读取RSS文件,看到文件中标示的所有网页的标题、摘要、链接等信息,并且点击浏览网页。
通过上述方式,访问者可以在自己的阅读器里分门别类地收集许多来自不同网站的自己感兴趣的RSS文件,而不必一个一个地访问这些网站。RSS阅读器实际上成了读者自己的个性化信息库。
对于网站来说,RSS方式也有好处。它扩大了网站内容的传播面,也增加了网站访问量,因为访问者调阅的RSS文件和浏览的网页,都是从网站服务器上下载的。
RSS文件的网址是固定不变的,网站可以随时改变其中的内容。RSS内容一旦更新,浏览者看到的内容也随即更新了。
RSS的字面意思是什么呢?它是一个词组的所写,具体是什么?说法有三种:
1、Really Simple Syndication(真正简易的聚合)的缩写。
2、Rich Site Summary(丰富的站点摘要)的缩写。
3、RDF Site Summary(RDF站点摘要)的缩写。
一 般情况下,RSS文件包括了两部分:前半部分标示了RSS标题、图片、描述、语言、发布者、版权、发布日期等信息,后半部分是文章的基本信息,包括标题、 链接地址、作者、类别、发布、文章日期、描述等。其中,后半部分是可以重复的,只不过具体内容可以是有关其他文章的。这些文章地址分别指向不同的网页。
RSS 开发教程
Saturday, 27. August 2005, 15:03:11
<taglib>使用 taglib 一旦 taglib 已经安装在 Web 应用程序中,按照以下步骤便可以在 JSP 页面中使用 taglib。首先,将下面一行添加至 JSP 页面的顶部:
<taglib-uri>/WEB-INF/rssutils.tld</taglib-uri>
<taglib-location>/WEB-INF/rssutils.tld</taglib-location>
</taglib>
<%@ taglib uri="/WEB-INF/rssutils.tld" prefix="rss" %>其次,使用 feed 标签将 RSS feed 添加至 JSP 页面,如下例所示:
<rss:feed url="http://servlet.java.sun.com/syndication/rss_java_highlights-10.xml" feedId="javaSunCom"/>"feed" 标签的 url 属性必须包含到 RSS 文档的 URL。"feed" 标签的 feedId 属性是任意的,可以设置为任何值。然而,我们建议该属性在标识 RSS feed 时要直观。如果应用程序在防火墙后面,可以使用名为 proxyAddress 和 proxyPort 的 "feed" 标签代理属性来设置代理属性。如果不知道代理服务器地址代理端口,请与网络管理员联系。下面是一个例子:
<rss:feed url="http://servlet.java.sun.com/syndication/rss_java_highlights-10.xml" feedId="example1" proxyAddress="129.149.246.4" proxyPort="8080"/>一旦将一个或多个 RSS feed 添加到页面,您应能使用剩余的一套标签来从 feed 中提取几乎任何信息。下面是一个例子,说明如何提取在上面添加的 RSS feed 频道的标题:
<rss:channelTitle feedId="javaSunCom"/>Taglib 示例 例 1 (RSS 0.91):
<rss:feed
url="http://servlet.java.sun.com/syndication/rss_java_highlights-XYZCompany-10.xml"
feedId="example1"/>
Image: <rss:channelImage feedId="example1" asLink="true"/>
Title: <rss:channelTitle feedId="example1"/>
Link: <rss:channelLink feedId="example1" asLink="true"/>
Description: <rss:channelDescription feedId="example1"/>
- <rss:itemTitle feedId="example1" index="0"/>
<rss:itemDescription feedId="example1" index="0"/>
- <rss:itemTitle feedId="example1" index="1"/>
<rss:itemDescription feedId="example1" index="1"/>
<rss:feed
url="http://static.userland.com/gems/backend/gratefulDead.xml" feedId="example2"/>
Image: <rss:channelImage feedId="example2"/>
Title: <rss:channelTitle feedId="example2"/>
Link: <rss:channelLink feedId="example2" asLink="true"/>
Description: <rss:channelDescription feedId="example2"/>
<rss:forEachItem feedId="example2">
- <rss:itemDescription feedId="example2"/>
</rss:forEachItem>
<rss:feed
url="http://static.userland.com/gems/backend/rssTwoExample2.xml"
feedId="example3"/>
Image: <rss:channelImage feedId="example3"/>
Title: <rss:channelTitle feedId="example3"/>
Link: <rss:channelLink feedId="example3" asLink="true"/>
Description: <rss:channelDescription feedId="example3"/>
Copyright: <rss:channelCopyright feedId="example3"/>
Docs: <rss:channelDocs feedId="example3"/>
Generator: <rss:channelGenerator feedId="example3"/>
Language: <rss:channelLanguage feedId="example3"/>
Last Build Date: <rss:channelLastBuildDate
X-Virus: 1
feedId="example3"/>
Managing Editor: <rss:channelManagingEditor
feedId="example3"/>
Pub Date: <rss:channelPubDate feedId="example3"/>
X-Virus: 1
Skip Days: <rss:channelSkipDays feedId="example3"/>
Skip Hours: <rss:channelSkipHours feedId="example3"/>
TTL: <rss:channelTTL feedId="example3"/>
<rss:forEachItem feedId="example3" startIndex="2" endIndex="4">
- <rss:itemDescription feedId="example3"/>
</rss:forEachItem>
RssParser parser = RssParserFactory.createDefault();结 束语 RSS 提供了一种简单的方法来添加和维护您的 Web 站点上来自所有 Web 的新闻及其它内容。即使 RSS 是简单的 XML 格式,在 Web 上的其他任何地方从 XML 文档中分析并提取数据都可能有点棘手——或者至少单调乏味——如果您不得不一遍又一遍地去做的话。RSS Utilities Package 利用 Custom Tag 和 XML Parsing 技术使 "Real Simple Syndication" 格式真正做到文如其名。 另请参阅 A good blog on RSS from Harvard O'Reilly XML.com RSS info Sun's Developer Content Syndication Program: Get Your RSS Feeds
Rss rss = parser.parse(new
URL("http://mydomain.com/document.rss"));
Rss-web开始了,今天我的工作就是做对Rss文件的分析,想起前几天刚刚试用了一下的 dom4j,今天就拿他来分析xml了.用的的确很方便!顶一个!
由于我只需要从xml中读取必要的信息,所以写的代码不具有通用性,不过对大多数基本应用,这个类应该够用了!先贴代码和运行结果:
package org.ibmclub.hust.Rss;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.ibmclub.hust.Rss.bean.Item;
public class RssFile {
private Document doc;
private String channelName;
private String channelLink;
private String channelDes;
private ArrayList<Item> items = new ArrayList<Item>();
public RssFile(File f) {
parseFile(f);
}
private void parseFile(File f) {
try {
SAXReader reader = new SAXReader();
doc = reader.read(f);
List l = doc.selectNodes("rss/channel");
if (l.size() == 0) {
throw new Exception("not a good rss-xml file");
}
Node channel = (Node) l.get(0);
channelName = ((Element) channel.selectNodes("title").get(0))
.getText();
channelLink = ((Element) channel.selectNodes("link").get(0))
.getText();
channelDes = ((Element) channel.selectNodes("description").get(0))
.getText();
//封装item信息
List itemList = channel.selectNodes("item");
for(Object item : itemList){
Item i = new Item((Node)item);
items.add(i);
}
//查看输出
System.out.println("channelName:" + channelName);
System.out.println("channelLink:" + channelLink);
System.out.println("channeDes:" + channelDes);
for(Item i : items){
System.out.println(" title:"+i.getTitle());
// System.out.println(" link:"+i.getLink());
// System.out.println(" pubtime:"+i.getPubTime());
// System.out.println(" des:"+i.getDes());
}
} catch (Exception e) {
System.out.println("message:"+e.getMessage());
}
}
public String getChannelName() {
return channelName;
}
public String getChannelLink() {
return channelLink;
}
public String getDescription() {
return channelDes;
}
public ArrayList<Item> getItems() {
return items;
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
RssFile rssfile = new RssFile(new File("c://Rss.xml"));
System.out.println(System.currentTimeMillis() - start);
}
}
package org.ibmclub.hust.Rss.bean;
import java.sql.Timestamp;
import org.dom4j.Element;
import org.dom4j.Node;
public class Item {
private String title;
private String link;
private String des;
private String pubTime;
public Item() {
}
public Item(Node itemNode) {
title = ((Element) itemNode.selectNodes("title").get(0)).getText();
link = ((Element) itemNode.selectNodes("link").get(0)).getText();
des = ((Element) itemNode.selectNodes("description").get(0)).getText();
pubTime = ((Element) itemNode.selectNodes("pubDate").get(0)).getText();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getPubTime() {
return pubTime;
}
public void setPubTime(String pubTime) {
this.pubTime = pubTime;
}
public String getDes(){
return des ;
}
public void setDes(String des){
this.des = des ;
}
}
运行结果:
channelName:CQ的专栏
channelLink:http://blog.youkuaiyun.com/cq8587/
channeDes:
title:今天上课了
title:拓扑排序
title:俄罗斯农夫算法
title:影评:雨天的水彩画 《爱有天意》观感(转)
title:java处理压缩文件
title:第一篇文章
532
用的时间还真不少 532ms,不过写起代码来还真是简单方便,鱼和熊掌不可兼得!
RSS 2.0规范
RSS是 Really Simple Syndication的缩写(对rss2.0而言,是这三个词的缩写,对rss1.0而言则是RDF Site Summary的缩写,1.0与2.0走的是两个体系)
RSS 基于XML,所有的 RSS 必须遵循w3c网站上公布的XML 1.0 规范。
在一个RSS文档中,根元素是<rss>,带有一个必备属性version,用以指明该文档遵循的rss规范,如果rss文档遵循本规范,则version值必须是2.0。
<rss>元素只有一个子元素,包含关于频道的一些信息。频道(channel)是整个blog,项(item)指一篇文章或日志(也有称这为post)。
RSS2.0元素channel的子元素列表
元素(Element) 描述(Description) 值域 重要性 举例(Example)
title 频道名称 必备 GoUpstate.com News Headlines
link 频道的URL 必备 http://www.goupstate.com/
Description 频道的描述 必备 The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.
language 频道文章所用语言, 可用netscape或w3c推荐的列表 可选 en-us
copyright 频道内容的版权说明 可选 Copyright 2002, Spartanburg Herald-Journal
managingEditor 责任编辑的email 可选 geo@herald.com (George Matesky)
webMaster 负责频道技术事务的网站管理员email 可选 betty@herald.com (Betty Guernsey)
pubDate 频道内容发布日期,格式遵循RFC822格式(年份可为2们或4位) 可选 Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate 频道内容最后的修改日期 可选 Sat, 07 Sep 2002 09:42:31 GMT
category 指定频道所属的一个或几个类别 可选 <category>Newspapers</category>
generator 生成该频道的程序名 可选 MightyInHouse Content System v2.3
docs 指向该RSS文件所用格式说明的URL 可选 http://blogs.law.harvard.edu/tech/rss
cloud Allows processes to register with a cloud to be notified of updates to the channel, implementing a lightweight publish-subscribe protocol for RSS feeds. More info here. 可选 <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>
ttl 有效期,用以指明该频道可被缓存的最长时间 分钟为单位 可选 <ttl>60</ttl>
image 指定一个 GIF或JPEG或PNG图片,用以与频道一起显示 可选
rating 这个频道的分级(主要指成人、限制、儿童等) 可选
textInput 指定一个text输入框供用户输入,具体信息及功能未定。 可选
skipHours 提示新闻聚合器,那些小时时段它可以跳过。 可选
skipDays 提示新闻聚合器,那些天它可以跳过。 可选
RSS2.0元素channel的子元素image的子元素列表
元素(Element) 描述(Description) 值域 重要性 举例(Example)
url 图片的url 必备
title 图片的标题,用于http的alt属性 必备
link 网站的url(实际中常以频道的url代替) 必备
width 图片的宽度(象素为单位) 最大144,默认88 可选
height 图片的高度(象素为单位) 最大400,默认31 可选
description 用于link的title属性 可选
RSS2.0元素channel的子元素cloud的子元素列表
元素(Element) 描述(Description) 值域 重要性 举例(Example)
domain Cloud程序所在机器的域名或IP地址 radio.xmlstoragesystem.com
port 访问clound程序所通过的端口 80
path 程序所在路径(不一定是真实路径) /RPC2
registerProcedure 注册的可提供的服务或过程 xmlStorageSystem.rssPleaseNotify
protocol 协议 xml-rpc, soap , http-post 之一 xml-rpc
RSS2.0元素channel的子元素textInput的子元素列表
元素(Element) 描述(Description) 值域 重要性 举例(Example)
title Submit按钮的标签 必备
description 解释text输入区 必备
name Text area对象的名字 必备
link 处理提交的请求的cgi程序 必备
关于item的内容,请看基于XML-RPC的BloggerAPI学习.
说明:
rss2.0要求<link>和<url>的值的非常部分开头,须是在IANA注册过的,如http://或https://或ftp://等。
一个rss文件中,可以包括没有这儿定义的元素,只要它是在某个命名空间被定义过。
一个常见问题是与的区别,两者在有些情况下是相同的,但前者可指几某个长文中的某个位置(即所谓的页内锚点吧)。
英文版的详细规范==> http://blogs.law.harvard.edu/tech/rss