终于,完成RSS的解析程序

August 4, 2008 | tags asp  XML  编程  网站  RSS  VBScript   | views
Comments 0

        三天,是从不知道XML是什么到现在完成解析RSS的VBScript+ASP网站程序的时间。真的累了。

        我的程序功能是实现把RSS数据存入网站服务器的数据库,就这么简单一件事,花费了我大量精力,“害”我在百度、Google上到处搜索,寻找答案。

       在百度上了解什么是RSS之后,我才想起来我前不久买了一本介绍XML的书。走马观花的看了一下书,大概知道是什么意思了,我又回到RSS上来,学习RSS规范。然后就在脑中构思程序的“算法”(如果能称作算法的话)。

        首先需要让服务器远程获取RSS的XML文档。这里用XMLHTTP组件,可以返回BODY、XML、TEXT,选择返回XML就行了,很方便。但程序需要根据网址自动判断RSS地址,该怎么办。

        先获取网页的源代码再说,还是用XMLHTTP,用BODY返回,但返回的源代码是乱码,有编码问题,有的网站是GB2312,有的网站是UTF-8。在百度上找,可以用adodb.stream组件进行转换。我直接把别人的转换的函数贴了过来。但测试发现,浏览器显示的虽然英文对的,但中文还是乱码。郁闷的我疑惑转换函数的功能,又在百度上找怎么判断字符串用的编码,众说纷纭。后来其中一句话惊醒了我:“浏览器都是看HTTP头来判断编码的,哪有那么简单的方法来判断编码啊!”且不说这句话对错,至少他提醒我可以根据HTTP头判断网页代码的编码。重温XMLHTTP对象参考,发现有返回HTTP头的功能,来个IF判断,搞定。不过有的网站返回的http头中没有编码,比如百度和新浪的首页。不过在<head></head>之间有<meta>标签来说明编码类型,对于百度和新浪只能在源代码里找了。

        获取的网页代码之后,有类似<link rel="alternate" type="application/rss+xml" href="http://blog.newton449.com/rss.xml" title="newton449的博客" />字样,其中href后面接的就是rss地址了。不过用什么样的简单方法可以把地址提取出来,我还是不知道。我的方法太麻烦了,又是left、right,又是replace,又是instr的,所以不提了。得到rss地址之后,还要防备这个rss地址是假的,用try吧!发现对象不存在就说明是假的了。

        然后处理xml文档,用Microsoft.XMLDOM组件即可创建一个XML对象,不用我去处理XML字符串,只用调用XML对象的属性和方法就可以获取里面的内容。我那本书所介绍方法很多不能用,在网上找,也有很多不能用的。最后终于找到了一个好网站,有全面详细的属性、方法介绍。但我发现,大部分属性都可以用,大部分方法都不能用,直接报错,可能是版本不同。调试的时候,终于没报错了,但无论怎样都出不来数据。回归课本,发现两点:1.区分大小写;2.文本是文本节点的值,不是元素节点的值,不过,元素节点的文本是存储在文本节点中的。有点像绕口令,说白了,(在IE下)应该用元素的text属性获取文本,而不是nodevalue。

        这样之后,剩下的过程就顺利了许多。创建数据库,遍历xml节点,根据节点名称和值构造sql语句,提交到数据库。本来外联两个表的sql语句还没弄清楚,不过我直接用另外较麻烦的方法跳过去了。在把sql语句提交给数据库的时候,还要注意用两个单引号替换一个单引号(用replace),因为单引号是框字符串的。调试的时候没有VC的监视窗口,只有用20多个write语句查看运行到哪一步了。最后,在处理了N个边界条件和加了N个防错处理之后,rss录入数据库的程序终于完成了。

        就到这里了。谨以此文纪念我的又一个ASP编程经历。暑假编编程还是很充实的。

        后记:查找rss地址和网页的编码用正则表达式可以轻松搞定!




发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

avŮ鰮Ů_ձƯav ͵¶-************************ 첥-С˵ - Ӱ qvod-첥-qvodһ 97-xxoo97-97gan aƬ-ëƬ-Ƭ-Ƭ Ϳ-97 Ƭ-ļ-һ ɫ-ɫͼƬ-ͼ ձavaƬվ-avӰձh ձavaƬվ-avӰձh ,ɫƬ, ɫ С ˵ ɫɫ-Ҫɫ-Ҫ ŷͼƬ-ɫͼƬ ɫͼ-B-97ooxxɫ ɫɫͼ|97 ɫ-97seseջС ԸŮ|Ҫɫɫ| ɫӰԺ ֮С˵,ŷ԰,޽Ƭ,AVƵ,************ʦ ҹ糡-ɫó վ-ǿ͵۹ ɫַ| ɫվ|ɫ¼ һɫ-¸󺣰- 䰮 ɫ|Ӱѿ ɫ|ɫ| xxx -Ƭ- ɧüɫ_************************ ƬպƬ ɫͼƬ- ͼƬ-BT ************************-- ͼ -Ľ-ˬͼ