日期:2013-08-18  浏览次数:20792 次

一般情况下,如果我们想了解股市行情,必须登录专业股票网站,输入公司代码才能看到具体股价。其实,利用XMLHTTP协议,我们每个人都可以在自己的个人网站中提供股市行情详细情况查询服务,本文介绍了如何使用ASP、VbScript结合xmlhttp编程来实现这个功能。

一、原理
原理非常简单,在很多大型网站上都有实时更新的股市行情信息,我们通过自己的WEB服务器发送出XMLHTTP命令访问雅虎财经站点的股市行情数据库服务器,从数据库中查询我们所需要的内容,然后通过ASP组合成网页回送给客户端。
同时,我们使用XmlHttp协议实现客户端网页无刷新效果以及向服务端提出检索数据的要求。
XMLHTTP允许你打开一个到任意服务器上的HTTP连接,发送一些数据和取回一些数据。并且所有的这一切都是在很少的几段脚本中就能够实现。使用XMLHTTP对象通常是进行XML数据交换,但其他格式的数据也是允许的。
在商业程序中的运用这种交换类型的标准模式是客户端发送一个文本字符串到服务端,然后服务端将这个字符串装载入一个XMLDOM对象中并且解释它,然后返回一段HTML给客户端,或则是另外一段XML代码给客户端让客户端的浏览器自己解释。在这种方式下,对于信息的传递来说是非常有效的形式,尤其是当你使用DHTML允许你根据返回信息动态显示时。
具体流程为:客户端通过xmlhttp提出股票行情查询要求-->WEB服务器中的ASP侦听页接受请求后使用xmlhttp向股市行情数据库服务器发送检索命令-->数据库执行查询操作,返回结果给我们自己的WEB服务器(html形式)-->WEB服务器接收到内容后,过滤掉HTML多余部分,挑选出纯股票数据,组合后将结果传送给客户端->客户端浏览器使用vbscript显示出来。

二、ASP XmlHttp编程简述
1、客户端dns2.htm页面:
<script language="vbscript">
Sub submit1_onmouseup
Dim objXML, objXSL, objFSO,strFile, strFileName, strXSL,strURL, theString,TheForm
Set TheForm = Document.wordfind
window.status="正在检索数据???"
strURL="dns2.asp" ' 服务器侦听页地址
Set objXML = CreateObject("Microsoft.XMLHTTP") '创建MS的XMLHTTP组件
stra = "submit=submit&fqdn="&TheForm.webname.value
objXML.Open "post",strURL,false '采用Post提交方式;
objXML.setrequestheader "content-length",len(stra)
objXML.setrequestheader "content-type","application/x-www-form-urlencoded"
objXML.send stra ' 发送信息
xmlGet = objXML.responsebody '稍等片刻后,得到服务器端传回来的结果;
xmlGet = bytes2bstr(xmlGet) '将单字节转换成文本格式函数,源程序可以下面的dns2.asp程序中找到;
TheForm.comments.value=xmlGet
Set objXML = Nothing
end sub
</script>

<html><head><title>XMLHTTP之股票行情篇</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgColor=#a1bae6>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="100%" align=center>
<form method="post" name=wordfind onsubmit="javascript:return false">
<FONT color=#002e5b face=geneva,arial,sans-serif size=2>
<B>请选择股票名称(美国纳斯达克)</B></FONT>
<FONT color=#002e5b face=geneva,arial,sans-serif size=2><B>:<br>
<select name=webname style="HEIGHT: 22px; WIDTH: 80px">
<option value="^IXIC">纳斯达克</option><option value="ASIA">亚信</option>
<option value="CHINA">中华网</option> <option value="NTES">网易</option>
<option value="SINA">新浪网</option> <option value="SOHU">搜狐</option>
</select><input type="submit" value="查询" id=Submit1 name=Submit1></B>
<TEXTAREA name=comments readonly rows=10 cols=76 ></TEXTAREA>
</form></td></tr></table></body></html>
2、服务器端dns2.asp程序:
<%
dim xmlGet
xmlGet=""
if len(trim(Request.form("fqdn"))) > 1 then
Dim objXML, objXSL, objFSO
Dim strFile, strFileName, strXSL
Dim strURL, theString

'股市行情数据库服务器的地址
strURL="http://cn.finance.yahoo.com/q?s="+trim(Request.form("fqdn"))+"&d=2b"
Set objXML = CreateObject("Microsoft.XMLHTTP") '创建MS的XMLHTTP组件
objXML.Open "get", strURL, False
objXML.Send ' 发送信息
xmlGet = objXML.responsebody '稍等片刻后,得到股市行情数据服务器端传回来的结果;
xmlGet = bytes2bstr(xmlGet) '转换成文本格式函数,可以源程序中找到;

'过滤无用的HTML成分,挑选出股票具体信息;
strFind1 = instr(1,xmlGet,"最後交易",1)+8
strFind2 = instr(strFind1,xmlGet,"<b>",1)+3
strFind3 = instr(