本章导读
在系统开发过程中,为满足系统的特殊需求,一方面,需要提供一些及时的新闻信息供用户浏览;而另一方面,开发独立的在线新闻系统需要大量的精力和物力。RSS推出后很好地解决了上述问题。使用它可以很方便地利用他人的资源,真正实现网络资源共享。本章将向读者介绍RSS的使用方法,并对其核心技术的实现进行简要概述。
12.1 RSS概述
RSS是一种描述和同步网站内容的格式,搭建了一个信息迅速传播的技术平台,使得每个人都成为潜在的信息提供者。当发布一个RSS文件后,这个RSS中包含的信息就能直接被其他站点调用。由于RSS的数据都是标准的XML格式,所以也能在其他的终端和服务中使用。
从RSS阅读者的角度来看,完全不必考虑RSS到底是什么意思,只需简单地理解为一种方便的信息获取工具即可。RSS获取信息的模式与加入邮件列表模式相似,无须登录到各个提供信息的站点即可自动获取。例如,采用了RSS订阅后,可以通过RSS阅读器同时浏览新浪、搜狐或百度新闻。
使用RSS获取信息的前提是安装一个RSS阅读器,然后将提供RSS服务的网站加入到RSS阅读器的频道中。大部分RSS阅读器本身也预设了部分RSS频道,如新浪新闻、百度新闻等。
12.1.1 RSS技术特点
RSS通过XML标准定义内容的包装和发布格式,使内容提供者和接收者都能从中获益。对内容提供者来说,RSS技术提供了一个实时、高效、安全、低成本的信息发布渠道。对内容接收者来说,RSS技术提供了一种崭新的阅读体验。RSS技术主要有如下特点。
1.来源多样化特性
RSS技术秉承“推”信息的概念。在新内容在服务器数据库中出现的第一时间内,即被发送到用户端阅读器中,极大地提高了信息的时效和价值。此外,服务器端内容的RSS包装在技术实现上极为简单,而且是一次性的工作。它使长期的信息发布编辑成本几乎降为零,是传统的电子邮件、卫星传输、互联网浏览等发布方式所无法比拟的。
2.无垃圾信息、便利内容管理特性
RSS用户端阅读器完全由用户个人订阅信息来源,如“新华网国际新闻”、“中国汽车网市场行情”、“天极网IT产品资讯”等。RSS阅读器软件可以完全屏蔽掉没有被订阅的内容和信息。并且,下载到本地的订阅内容,可以进行离线阅读、存档、搜索和相关分类等多种管理操作。
12.1.2 RSS的使用
对于浏览用户来说,RSS的使用方法比较简单,下载客户端工具,安装后即可使用。目前RSS客户端工具多种多样,其中最为常用的是周博通阅读器和看天下网络资讯浏览器,读者可以选择适合自己的工具进行下载。周博通阅读器的界面效果如图12-1所示。
12.2 RSS的技术实现
由前面的学习已经了解到,浏览用户只需下载免费的客户端工具后即可实现RSS的订阅功能。但是对于系统站点管理者来说,要想把自己的信息通过RSS传递给浏览用户,必须经过严格的程序设计后才能实现。

图12-1 周博通阅读器效果图
12.2.1 RSS核心技术
RSS被广大Web站点应用后,会增长站点资源的访问量,提高站点的知名度。要在站点实现RSS功能,必须充分使用多种技术。下面将对RSS所必备的技术进行详细介绍。要想使站点实现RSS的发布功能,必须掌握如下技术。
1.数据库技术
数据库技术是动态网页技术的基础,通过数据库技术可以实现站点信息的及时更新。
2.XML技术
XML是由W3C于1998年2月发布的一种标准。XML最大的优势是其拥有的开放性,允许各组织和个人建立适合自己需要的置标集合,并且这些置标可以迅速地投入使用。系统站点的信息发布后,将被保存为一个.xml格式的文件,文件中保存着需要传递的RSS信息数据。客户端RSS浏览器的显示数据是从.xml格式的文件中利用程序读取出来的。在RSS中使用XML文件的基本格式如下所示:
<?xml version="1.0" encoding="GBK"?>
<?xml-stylesheet type="text/css" >
<rss version="2.0">
<channel>
<title>图吧</title>
<image>
<title>XXX.com</title>
<link>http://XXX.com</link>
<url>http:/XXXlogo.gif</url>
</image>
<description>风景、酷车;一切美图,尽在搜狐!</description>
<link>http://pic.sohu.com</link>
<language>zh-cn</language>
<docs>http://XXX.com</docs>
<generator>www.XXX.com</generator>
<ttl>5</ttl>
<item>
<title>XXXXXXX[组图]</title>
<link>http://XXXXXXXXX.html</link>
<description>点击小图查看详情a href="http://XXXXX.html"& gt;<imgsrc="http://XXX. jpg&qu
ot; style="border: 1px solid #000000;" /></a></p></description>
<category>XXX图吧</category>
<author>XXX.com</author>
<pubDate>2006-12-26 10:20</pubDate>
</item>
……………………………………
</channel>
</rss>
12.2.2 RSS设计流程
从上面的介绍中可以了解到,RSS功能的实现需要多种技术,并且需要特殊的方法将这些技术结合起来。下面将向读者介绍RSS的基本设计流程。RSS的设计流程如下。
1.设计符合格式的XML文件:123.xml
读者可以直接去RSS站点复制文件源代码。例如,可以到http://pic.news.sohu.com/view/ rss/news.xml页面,通过查看源文件的方式获取符合格式的XML文件,文件保存在“光盘:\12\1”文件夹下,文件名为123.xml。执行效果如图12-2所示。

图12-2 XML文件执行效果图
2.设计XML读取文件:duqv.asp
文件duqv.asp的功能是读取文件12345.xml的数据,将数据以RSS的形式显示出来。文件duqv.asp的主要代码如下所示:
<% @language="VBScript"%>
<%
Function readrss(xmlseed) '定义变量
dim xmlDoc
dim http
Set http=Server.CreateObject("Microsoft.XMLHTTP") '建立HTTP对象
http.Open "GET",xmlseed,False '打开XML文件
http.send
Set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.Async=False '定义是否异步加载XML文件
xmlDoc.ValidateOnParse=False '定义是否需要文档验证
xmlDoc.Load(http.ResponseXML) '装载数据
Set item=xmlDoc.getElementsByTagName("item") '建立条数对象
if item.Length<=10 then '如果数量小于10
%>
<script language="JavaScript">
<!--输出提示-->
alert("对不起,该新闻条数已经少于10条!");
</script>
<%
else '如果数量不小于10
For i=0 To (item.Length-1) '逐一读取文件数据
Set title=item.Item(i).getElementsByTagName("title") '显示title数据
Set link=item.Item(i).getElementsByTagName("link") '显示link数据
'显示数据
Response.Write("<a href="""& link.Item(0).Text &""" target='_blank'>"& title.Item(0).Text &"</a><br>")
Next
end if
End Function
%>
………………………………
<td width="397" height="24" bgcolor="#9966FF"><span class="style1">搜狐新闻</span></td>
</tr>
<tr>
<td bgcolor="#CCFFFF">
<%
call readrss("http://localhost/shu/12/1/12345.xml") '显示读取的信息
%></td>
将文件保存在“光盘:\12\1”文件夹下,文件名为duqv.asp,经过浏览器执行后的效果如图12-3所示。

图12-3 浏览器执行RSS效果图
通过上面介绍的设计流程可以了解到,利用ASP实现RSS的功能比较简单,只需掌握XML和ASP的基本知识即可。
12.3 RSS实例
下面将通过一个具体实例讲解RSS的具体使用过程。本实例由7个文件构成,分别是conn.asp、gai.asp、xianshi.asp、12345.xml、addarticle.asp、save.asp和open.asp。上述文件保存在“光盘:\12\1\”文件夹中,具体的页面运行流程如图12-4所示。
|
|
图12-4 系统页面运行流程图
下面将详细介绍上述实例文件的实现过程。
12.3.1 数据库结构
该实例使用Access数据库,由article表构成。表article的设计结构如表12-1所示。
表12-1 表article的设计结构
|
字段名称 |
数据类型 |
是否主键 |
默 认 值 |
功能描述 |
|
Newsid |
decimal |
是 |
递增1 |
新闻编号 |
|
Title |
nvarchar |
否 |
null |
标题 |
|
Content |
varchar |
否 |
null |
新闻内容 |
|
Nform |
nvarchar |
否 |
null |
新闻来源 |
|
dateandtime |
datetime |
否 |
now() |
加入时间 |
12.3.2 数据库连接文件
文件conn.asp的功能是使系统建立和数据库的连接,文件代码如下所示:
<%
dim conn
dim connstr
on error resume next
connstr="DBQ="+server.mappath("123.mdb")+";DefaultDir=;DRIVER= {Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
%>
12.3.3 XML生成文件
XML生成文件gai.asp的功能是生成名为12345.xml的文件,将系统库中的数据读取后保存在12345.xml文件中。文件gai.asp的主要代码如下所示:
<!--#include file="conn.asp" -->
<%
set fso=server.createobject("scripting.filesystemobject") '创建文件对象
set fs=fso.createtextfile(Server.MapPath("12345.xml"),true) '创建XML文件
fs.writeline("<?xml version=""1.0"" encoding=""gb2312""?>")
'XML版本、使用汉字符号
fs.writeline("<rss version='2.0'>") '在XML文件中写入引号内的数据
fs.writeline("<channel>")
fs.writeline("<title>网</title>")
fs.writeline("<description>新闻更新</description>")
fs.writeline("<link>http://www.xxcom/</link>")
fs.writeline("<language>cn</language>")
fs.writeline("<docs>新闻更新</docs>")
fs.writeline("<generator>Rss Generator By 养殖网</generator>")
fs.writeline("<?xml-stylesheet type=""text/xsl"" href=""../blue/read.xsl""?>")
set rs=server.createobject("adodb.recordset") '建立连接对象
'查询系统最新的15条数据
rs.open "select top 15 * from article order by dateandtime desc",conn,1,3
while not rs.eof '如果有数据存在
fs.writeline("<item>") '在XML文件中写入引号内的数据
fs.writeline("<title>"&rs("title")&"</title>") '在XML文件中写入系统数据
'在XML文件中写入系统数据
fs.writeline("<link>http://localhost/shu/12/1/open.asp?id="&rs("newsid")&"</link>")
fs.writeline("<author>"&rs("Nform ")&"</author>")
fs.writeline("<pubDate>"&rs("dateandtime")&"</pubDate>")
'在XML文件中写入系统数据
fs.writeline("</item>") '在XML文件中写入引号内的数据
rs.movenext '指针下移
wend '逐一显示数据
rs.close '关闭连接
set rs=nothing '释放资源
fs.writeline("</channel>") '在XML文件中写入引号内的数据
fs.writeline("</rss>") '在XML文件中写入引号内的数据
fs.close
set fs=nothing
response.Redirect("addarticle.asp") '来到信息添加页面
%>
12.3.4 信息显示文件
信息显示文件xianshi.asp的功能是将12345.xml文件中的信息以网页的形式显示出来。其具体显示效果如图12-5所示。

图12-5 信息显示页面效果图
文件xianshi.asp的主要代码如下所示:
<% @language="VBScript"%>
<%
Function readrss(xmlseed) '定义变量
dim xmlDoc
dim http
Set http=Server.CreateObject("Microsoft.XMLHTTP") '建立HTTP对象
http.Open "GET",xmlseed,False '打开XML文件
http.send
Set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.Async=False '定义是否异步加载xml文件
xmlDoc.ValidateOnParse=False '定义是否需要文档验证
xmlDoc.Load(http.ResponseXML) '装载数据
Set item=xmlDoc.getElementsByTagName("item") '建立条数对象
if item.Length<=10 then '如果数量小于10
%>
<script language="JavaScript">
<!--输出提示-->
alert("对不起,该新闻条数已经少于10条新闻条数!");
</script>
<%
else '如果数量不小于10
For i=0 To (item.Length-1) '逐一读取文件数据
Set title=item.Item(i).getElementsByTagName("title") '显示title数据
Set link=item.Item(i).getElementsByTagName("link") '显示link数据
'显示数据
Response.Write("<a href="""& link.Item(0).Text &""" target='_blank'>"& title.Item(0).Text &"</a><br>")
Next
end if
End Function
%>
………………………………
<td width="397" height="24" bgcolor="#9966FF"><span class="style1">本站最新新闻</span></td>
</tr>
<tr>
<td bgcolor="#CCFFFF">
<%
call readrss("http://localhost/shu/12/1/12345.xml") '显示读取的信息
%></td>
………………………………
<td height="25" bgcolor="#9966FF"><span class="style1">新浪最新新闻</span></td>
</tr>
<tr>
<td bordercolor="#CCFFFF" bgcolor="#CCFFFF">
<%
call readrss("http://rss.sina.com.cn/news/allnews/astro.xml") '显示读取新浪的信息
%></td>
12.3.5 信息详情显示文件
信息详情显示文件xianshi.asp的功能是用户单击信息标题超链接后,显示此条信息的详细数据。具体显示效果如图12-6所示。

图12-6 信息详情页面效果图
文件open.asp的主要代码如下所示:
<!--#include file="conn.asp"-->
……………………………………
<%
id=request.QueryString("id") '获取选择的信息编号
set rs=server.createobject("adodb.recordset")
sql="select * from article where newsid="&id&" " '查询此编号的信息数据
rs.Open sql,conn,1,1
%>
……………………………………
<td width="593" height="21" bgcolor="#9966FF">
<div align="center"class="STYLE22"><%=rs("title")%> <!--显示信息标题-->
</div>
</td>
<td bgcolor="#99CCFF">
<span class="STYLE23"><%=rs("content")%></font> <!--显示信息内容-->
</td>
…………………………………
12.3.6 信息添加页面
信息添加是本系统的重要模块之一,通过该功能可以实现系统信息的更新。添加系统信息的具体流程为:首先在表单页面中依次输入信息数据,然后单击【添加】按钮,系统将输入的信息添加到系统库中。从上面的流程中可以看出,信息添加功能页面由以下两部分构成。
1.信息添加表单页面部分
新闻添加页面是由文件addarticle.asp实现的,效果如图12-7所示。

图12-7 信息添加表单页面效果图
管理员输入信息数据后,单击【添加】按钮,经过数据处理程序处理后,数据将添加到数据库中。
2.数据保存部分
本部分主要实现数据处理,把管理员添加的数据添加到数据库中。在处理程序中要特别注意新闻内容的添加。为了使内容中的回车、空格和图片信息不丢失,在保存过程中要进行相应处理,能够使普通格式文本转换成网页格式添加到数据库中。在本系统中,添加图片格式是“[image]图片路径[/image]”的形式,其中图片路径可以是相对路径,也可以是绝对路径。上述功能是由文件save.asp实现的,其主要代码如下所示:
<%
'定义changechr函数,作用是将字符转换成网页能识别的字符
function changechr(str)
changechr=replace(replace(replace(replace(str,"<","<"),">",">"),chr(13),"<br>")," "," ")
changechr=replace(replace(replace(replace(changechr,"[image]","<img src="),"[b]","<b>"),"[red]",<font color
=CC0000>"),"[big]","<font size=7>")
changechr=replace(replace(replace(replace(changechr,"[/image]","></img>"),"[/b]","</b>"),"[/red]","</font>"),"[/big]","</font>")
end function
END IF
if request.form("txttitle")="" then '如果新闻标题为空
response.write "错误提示:请输入文章标题!" '显示提示信息
response.end
end if
if request.form("txtcontent")="" then '如果新闻内容为空
response.write "错误提示:请输入文章内容!" '显示提示信息
response.end
end if
dim title
dim content
dim sql
dim articleid
dim from
title=request.form("txttitle") '获取新闻标题
from=request.form("Nfrom") '获取新闻来源
dim sql1
dim rs1
content=changechr(request.form("txtcontent")) '将输入的内容转换成网页格式
'在数据库中增加一条文章记录
set rs=server.createobject("adodb.recordset")
sql="select * from article where (newsid is null)"
rs.open sql,conn,1,3
rs.addnew '向数据库添加信息
rs("title")=title '将新闻标题添加到数据库
rs("content")=content '将新闻内容添加到数据库
rs("Nfrom")=from '将新闻来源添加到数据库
rs.update '修改数据库
articleid=rs("newsid")
rs.close '关闭记录集
set rs=nothing
conn.close
set conn=nothing '清空记录集对象
response.Redirect("gai.asp") '来到指定页面,重新生成XML文件
%>






