*-----------------------------------
* AUTHOR: Trevor Hancock (TREVORH@MICROSOFT.COM)
* CREATED: 10/24/01 03:07:28 PM for Microsoft Knowledge Base article Q311306
* ABSTRACT: Downloads a Web page and then parses it to extract a stock quote.
*
* DETAILS: This code uses the Msinet.ocx ActiveX control to
* download a Web page from HTTP://Money.cnn.com.
* Specifically, it calls "HTTP://qs.money.cnn.com/apps/stockquote?symbols=",
* passing to the Web page a stock symbol that the user types into THISFORM.txtSYBMOL.
* The Web site returns an entire page of information about the
* stock, which this code then parses to extract the current quote.
*-----------------------------------
WITH THISFORM
*-- Get the quote using the Msinet.ocx ActiveX control.
*-- The quote will load it directly into a variable.
lcQuote = .MSINET.OpenURL(lcGetURl)
IF EMPTY(lcQuote)
MESSAGEBOX("Download Failed.",0,"")
RETURN .F.
ENDIF
*-- Grab the quote from the Web page. If in VFP 7.0, we use the new
*-- STREXTRACT() function to grab the data between two delimiters.
*-- In VFP 6.0, use SUBSTR() to get the data, and then trim off any
*-- trailing HTML with the TRANSFORM() AND VAL() functions.
IF VERSION(5) = 700
lcQuote = STREXTRACT(lcQuote, [stockheader">], [<])
ELSE
*-- Extract the quote from the HTML
lcQuote = SUBSTR(lcQuote, ATC(["stockheader"], lcQuote) + 14, 8)
*-- Trim off the trailing HTML. VAL() will only return the numbers,
*-- which we then change to a string with TRANSFORM()
lcQuote = TRANSFORM(VAL(lcQuote))
ENDIF
*-- Put the quote in the text box.
.txtQuote.VALUE = "$" + lcQuote
ENDWITH
ENDPROC
ENDDEFINE
**************************
参考
Microsoft Internet Explorer 5.0 及以上版本
Microsoft Windows 98 和 Microsoft Windows 98 SE
Microsoft Windows Millennium Edition (Me)
Microsoft Windows 2000 专业版和 Microsoft Windows 2000 服务器
Microsoft Office 2000
Msinet.ocx 随 Microsoft Visual Studio 97 和 Microsoft Visual Studio 6.0 分发. Msinet.ocx 也随以下产品的标准独立版分发:
Microsoft Visual Basic 5.0 和 Visual Basic 6.0
Microsoft Visual FoxPro 6.0 和 Visual FoxPro 7.0
Microsoft Interdev 6.0
Microsoft C++ 5.0 和 C++ 6.0
如果你是这些开发语言中的一种的授权用户, 你可以重分发 Msinet.ocx 控件.
如何使用示例代码
要使用这些示例代码, 按以下步骤:
在 Visual FoxPro version 6.0 或 7.0 中粘贴各示例代码到一个新的程序文件中.
*-----------------------------------
* AUTHOR: Trevor Hancock (TREVORH@MICROSOFT.COM)
* CREATED: 10/24/01 03:07:28 PM for Microsoft Knowledge Base article Q311306
* ABSTRACT: Downloads a Web page and then parses the Web page to extract a stock quote.
*
* DETAILS: This code uses the function URLDownloadToFile(), located in
* Urlmon.dll. This function downloads a Web page from
* HTTP://Money.cnn.com. Specifically, the function calls
* "HTTP://qs.money.cnn.com/apps/stockquote?symbols=",
* passing to the Web page a stock symbol that the user types into THISFORM.txtSYMBOL.
* The Web site returns an entire page of information about the
* stock, which this code then parses to extract the current quote.
*-----------------------------------
**************************
DEFINE CLASS frmURLMON AS FORM
HEIGHT = 83
WIDTH = 317
AUTOCENTER = .T.
BORDERSTYLE = 2
CAPTION = "Stock Quote via URLMON.DLL"
MAXBUTTON = .F.
MINBUTTON = .F.
NAME = "frmURLMON"
ADD OBJECT txtsymbol AS TEXTBOX WITH ;
FONTNAME = "Verdana", ;
VALUE = "MSFT", ;
FORMAT = "!", ;
HEIGHT = 26, ;
LEFT = 94, ;
TABINDEX = 1, ;
TOP = 7, ;
WIDTH = 100, ;
NAME = "txtSymbol"
ADD OBJECT cmdGetQuote AS COMMANDBUTTON WITH ;
TOP = 7, ;
LEFT = 206, ;
HEIGHT = 27, ;
WIDTH = 94, ;
FONTNAME = "Verdana", ;
CAPTION = "Get Quote", ;
TABINDEX = 2, ;
NAME = "cmdGetQuote"
ADD OBJECT lblSymbol AS LABEL WITH ;
AUTOSIZE = .T., ;
FONTNAME = "Verdana", ;
CAPTION = "Stock Symbol:", ;
HEIGHT = 16, ;
LEFT = 3, ;
TOP = 12, ;
WIDTH = 90, ;
TABINDEX = 5, ;
NAME = "lblSymbol"
ADD OBJECT txtQuote AS TEXTBOX WITH ;
FONTNAME = "Verdana", ;
HEIGHT = 23, ;
LEFT = 94, ;
READONLY = .T., ;
TOP = 39, ;
WIDTH = 100, ;
NAME = "txtQuote"
ADD OBJECT lblQuote AS LABEL WITH ;
AUTOSIZE = .T., ;
FONTNAME = "Verdana", ;
CAPTION = "Quote:", ;
HEIGHT = 16, ;
LEFT = 47, ;
TOP = 42, ;
WIDTH = 46, ;
TABINDEX = 5, ;
NAME = "lbQuote"
PROCEDURE cmdGetQuote.CLICK
LOCAL lcQuote AS STRING, ;
lcTempTxtFile AS STRING, ;
lnGetResults AS INTEGER, ;
lcURL AS STRING
lcQuote = ""
*-- Set up a variable referring to a temp .TXT file.
*-- Uses the current VFP TEMP DIR [SYS(2023)]
*-- and a random file name [SYS(2015)]
lcTempTxtFile = FORCEEXT(ADDBS(SYS(2023)) + SYS(2015), "TXT")
lnGetResults = 0
lcGetURl = "HTTP://qs.money.cnn.com/apps/stockquote?symbols=" + ;
ALLT(THISFORM.txtsymbol.VALUE)
DECLARE LONG URLDownloadToFile IN URLMON.DLL ;
LONG, STRING, STRING, LONG, LONG
WITH THISFORM
*-- Get the quote using the Urlmon.dll and store it
*-- to a temp .TXT file.
*-- This function returns non-zero if it fails.
lnGetResults = URLDownloadToFile(0, lcGetURl, lcTempTxtFile, 0, 0)
IF lnGetResults # 0
MESSAGEBOX("Download Failed",0,"")
RETURN .F.
ENDIF
*-- Read the Web page into a variable, and then erase it.
lcQuote = FILETOSTR(lcTempTxtFile)
ERASE (lcTempTxtFile)
*-- Grab the quote from the Web page. If in VFP 7.0, we use the new
*-- STREXTRACT() function to grab the data between two delimiters.
*-- In VFP 6.0, use SUBSTR() to get the data, and then trim off any
*-- trailing HTML with the TRANSFORM() AND VAL() functions.
IF VERSION(5) = 700
lcQuote = STREXTRACT(lcQuote, [stockheader">], [<])
ELSE
*-- Extract the quote from the HTML
lcQuote = SUBSTR(lcQuote, ATC(["stockheader"], lcQuote) + 14, 8)
*-- Trim off the trailing HTML. VAL() will only return the numbers,
*-- which we then change to a string with TRANSFORM()
lcQuote = TRANSFORM(VAL(lcQuote))
ENDIF
*-- Put the quote in the text box.
.txtQuote.VALUE = "$" + lcQuote
ENDWITH
ENDPROC
ENDDEFINE
**************************