陳丹
(武漢軟件工程職業(yè)學(xué)院 湖北 武漢 430205)
在Internet上有各式各樣的信息源,可以從中獲取自己想要的信息。但是每個(gè)信息源里可能包含你并不想要的信息,例如,你想查看股票信息時(shí),網(wǎng)頁(yè)上有許多廣告。不僅如此,要獲取不同的信息就必須打開(kāi)訪問(wèn)不同網(wǎng)站,例如,如果想同時(shí)獲取天氣信息和股票信息,就必須打開(kāi)2個(gè)窗口,分別訪問(wèn)提供天氣信息的網(wǎng)頁(yè)和提供股票信息的網(wǎng)頁(yè)。如果能夠有一個(gè)軟件,直接在一個(gè)界面上顯示用戶(hù)需要的多種信息,而且沒(méi)有廣告等多余的信息,將會(huì)十分有用。
基于對(duì)以上情況的分析,可以構(gòu)建一個(gè)Web服務(wù)為用戶(hù)提供特定信息的服務(wù),根據(jù)用戶(hù)所發(fā)出的信息請(qǐng)求,通過(guò)Internet從指定的網(wǎng)站中獲取數(shù)據(jù),進(jìn)行解析并過(guò)濾多余的信息,將解析后有用的信息結(jié)果返回給請(qǐng)求數(shù)據(jù)的客戶(hù)端[1-2]。筆者設(shè)計(jì)的基于XML的Web信息篩選器能實(shí)現(xiàn)該Web服務(wù)的功能。
在XML基礎(chǔ)上發(fā)展起來(lái)的Web服務(wù)提供了一個(gè)分布式的計(jì)算技術(shù),它使用XML作為基本的數(shù)據(jù)通信方式,消除了不同操作系統(tǒng)、組件模型與編程語(yǔ)言之間通信存在的差異,用于在Internet或者Intranet上通過(guò)使用標(biāo)準(zhǔn)的XML協(xié)議和信息格式來(lái)實(shí)現(xiàn)通信和共享、交換數(shù)據(jù)[3]。構(gòu)建Web服務(wù)的目標(biāo)是將應(yīng)用程序轉(zhuǎn)化為一種可以通過(guò)互聯(lián)網(wǎng)訂閱使用的服務(wù),以及使網(wǎng)絡(luò)軟件具有更高的互操作性和兼容性。
XML Web Service的核心概念是,基于Web的應(yīng)用程序能夠在基于標(biāo)準(zhǔn)的環(huán)境中創(chuàng)建,并作為服務(wù)將內(nèi)容或信息傳遞給需要使用該服務(wù)的客戶(hù)端。XML Web Service為基于Web的專(zhuān)用應(yīng)用程序在Internet上的傳輸提供了一種方式,該方式類(lèi)似于傳統(tǒng)的基于組件的設(shè)計(jì),服務(wù)的使用者不需要知道它是怎樣運(yùn)行的,只要知道它所提供的適當(dāng)?shù)姆?wù)和結(jié)果。XML Web Service利用XML和其他Internet標(biāo)準(zhǔn),使得服務(wù)的使用者能夠通過(guò)XML得到它們的服務(wù)。XML Web Service之間的大多數(shù)交換是通過(guò)XML數(shù)據(jù)和技術(shù)完成的[4]。
基于XML的Web信息篩選器能夠從指定的網(wǎng)站上獲取信息并進(jìn)行過(guò)濾,為客戶(hù)端用戶(hù)提供天氣,股票和新聞數(shù)據(jù)??蛻?hù)端用戶(hù)通過(guò)向Web服務(wù)發(fā)出請(qǐng)求,獲取指定城市的天氣情況(如天氣狀況、溫度、風(fēng)力、紫外線和空氣質(zhì)量),指定代碼和股市的股票信息(如 SS(上海)或 SZ(深圳)的股市信息),以及指定媒體的分類(lèi)新聞(如新浪網(wǎng)的體育新聞)。
整個(gè)系統(tǒng)設(shè)計(jì)的框架可以分為以下兩個(gè)部分:
1)Web Service模塊 從Internet上獲取需要的數(shù)據(jù)。
2)客戶(hù)端模塊 調(diào)用Web Service模塊的方法獲取數(shù)據(jù),在客戶(hù)端界面上顯示。
本系統(tǒng)分為2個(gè)模塊。其中,Web Service模塊主要負(fù)責(zé)信息的獲取和過(guò)濾工作。從特定的網(wǎng)址獲取數(shù)據(jù),并對(duì)其進(jìn)行解析。將解析后有用的結(jié)果返回給請(qǐng)求數(shù)據(jù)的客戶(hù)端??蛻?hù)端模塊負(fù)責(zé)從Web Service接收數(shù)據(jù)進(jìn)行顯示。
首先需要使用ASP.NET技術(shù)搭建一個(gè)Web服務(wù),該Web服務(wù)上采用了數(shù)據(jù)庫(kù)和XML文檔的存儲(chǔ)形式,服務(wù)發(fā)布后就連接到Internet并啟動(dòng)新聞搜集線程開(kāi)始準(zhǔn)備獲取數(shù)據(jù),通過(guò)搜集特定網(wǎng)站中給定頁(yè)面的新聞連接得到新聞網(wǎng)頁(yè)的url,然后查找每個(gè)頁(yè)面的新聞連接,將新聞存儲(chǔ)到數(shù)據(jù)庫(kù)中,并以XML的形式返回指定網(wǎng)頁(yè)的內(nèi)容[5]。Web服務(wù)上定義了一系列的方法可以供客戶(hù)端進(jìn)行調(diào)用,為客戶(hù)端用戶(hù)提供天氣,股票和新聞數(shù)據(jù),根據(jù)條件返回查詢(xún)結(jié)果,再將查詢(xún)結(jié)果生成的xml文件用XSL轉(zhuǎn)換成HTML返回給客戶(hù)端。
用于對(duì)Internet中的網(wǎng)頁(yè)信息實(shí)現(xiàn)Web信息篩選器的Web服務(wù)的總體設(shè)計(jì)如圖1所示。其中的關(guān)鍵技術(shù)包括XML數(shù)據(jù)交換,ADO.NET數(shù)據(jù)訪問(wèn)技術(shù)和DataSet數(shù)據(jù)集,以及ASP.NET XML Web Service技術(shù)。
圖1 基于XML的Web信息篩選器的設(shè)計(jì)Fig.1 Design of Web information filters based on XML
由于需要從Internet上獲取信息并將篩選出的有用信息進(jìn)行保存,以便將結(jié)果返回給請(qǐng)求數(shù)據(jù)的用戶(hù),因此在Web服務(wù)端設(shè)計(jì)了一個(gè)數(shù)據(jù)庫(kù)News用于相關(guān)數(shù)據(jù)的存取,這里選用SQL Server作為數(shù)據(jù)庫(kù)服務(wù)器[6]。該數(shù)據(jù)庫(kù)中共設(shè)計(jì)了4個(gè)數(shù)據(jù)表,包括 Tab_Media(媒體列表)、Tab_Category(新聞?lì)悇e列表)、Tab_PageUrl(新聞網(wǎng)頁(yè)的 url)和 Tab_PagesList(Web網(wǎng)頁(yè)的內(nèi)容)。在數(shù)據(jù)庫(kù)中還設(shè)計(jì)了2個(gè)數(shù)據(jù)視圖,其中視圖Vew_MediaShortName用于表示與指定媒體對(duì)應(yīng)的新聞網(wǎng)頁(yè)的url,視圖Vew_PagesList用于表示媒體中各個(gè)新聞?lì)悇e的網(wǎng)頁(yè)內(nèi)容。在Web服務(wù)器上還設(shè)計(jì)了一個(gè)XML文檔Cities.xml,用于存放可以獲取天氣信息的城市名列表。
WebService模塊主要實(shí)現(xiàn)了以下功能:
1)獲取天氣數(shù)據(jù)的功能:從指定的網(wǎng)站中獲取數(shù)據(jù),進(jìn)行解析并過(guò)濾多余的信息,將天氣數(shù)據(jù)返回給客戶(hù)端。
2)獲取股票數(shù)據(jù)的功能:從指定的網(wǎng)站中獲取數(shù)據(jù),進(jìn)行解析并過(guò)濾多余的信息,將股票數(shù)據(jù)返回給客戶(hù)端。
3)獲取訂閱新聞的功能:從指定的網(wǎng)站中獲取新聞,在客戶(hù)端顯示。
客戶(hù)端模塊主要實(shí)現(xiàn)以下功能:1)定制天氣、股票、新聞信息;2)顯示天氣、股票、新聞信息;3)每塊信息可放縮,下部的信息塊相應(yīng)調(diào)整位置;4)定時(shí)更新每塊內(nèi)容。股票每分鐘更新一次,新聞每10 min更新一次,天氣每小時(shí)更新一次。
系統(tǒng)開(kāi)發(fā)環(huán)境為Microsoft.NET Framework和SQL Server數(shù)據(jù)庫(kù),使用Microsoft Visual Studio編寫(xiě)Web服務(wù)和客戶(hù)端應(yīng)用程序[7]。
對(duì)Web Service中部署的類(lèi)和文件描述如下。
1)Global類(lèi)和 Global.asax文件
Global類(lèi)在Web Service啟動(dòng)以后定期將新聞數(shù)據(jù)保存到本地的數(shù)據(jù)庫(kù)News中。Global類(lèi)視圖如圖2所示。
圖2 Global類(lèi)視圖Fig.2 Global Class View
其中涉及的幾個(gè)重要方法的功能說(shuō)明如下:
①void Application_Start(object sender,EventArgs e)
啟動(dòng)新聞搜集線程,準(zhǔn)備數(shù)據(jù)。
②void Application_End(object sender,EventArgs e)
終止搜索線程,關(guān)閉數(shù)據(jù)庫(kù)連接。
③string[,]GatherNews(string pageUrl)
搜集給定頁(yè)面的新聞連接,根據(jù)目標(biāo)頁(yè)面地址返回新聞連接,新聞標(biāo)題數(shù)組。
④void StoreNews()
將新聞存儲(chǔ)到數(shù)據(jù)庫(kù)中。
⑤NewsUrl[]GetPageUrl()
得到新聞網(wǎng)頁(yè)的url。
⑥XmlDocument GetPageContent(Uri url)
返回指定網(wǎng)頁(yè)的內(nèi)容。
2)DataRetrival類(lèi)和DataRetrival.asmx文件
DataRetrival類(lèi)是該Web服務(wù)中最重要的類(lèi),為Client用戶(hù)提供天氣,股票和新聞數(shù)據(jù)。它實(shí)現(xiàn)了與客戶(hù)端的交互,將客戶(hù)端需要的信息返回給客戶(hù)端。DataRetrival類(lèi)視圖如圖3所示。
圖3 DataRetrival類(lèi)視圖Fig.3 DataRetrival Class View
該類(lèi)中部署的Web服務(wù)描述如下:
①GetCategoryList方法
獲取支持的媒體欄目列表,該列表以CategoryId;Category-Name的形式返回。例如:4;體育新聞。其中CategoryId是用于定制新聞時(shí)的參數(shù),CategoryName顯示的是CategoryId對(duì)應(yīng)的友好名稱(chēng)。
②GetCityNameList方法
獲取可以查詢(xún)天氣的城市列表。
③GetMediaList方法
獲取支持的媒體列表,該列表以MediaId;MediaName的形式返回。例如:6;新浪網(wǎng)。其中MediaId是用于定制新聞時(shí)的參數(shù),MediaName顯示的是MediaId對(duì)應(yīng)的友好名稱(chēng)。
④GetStockInfo方法
獲取指定代碼和股市的股票信息。
⑤GetWeatherInfo()
獲取指定城市的天氣情況,提供當(dāng)天的天氣數(shù)據(jù)。返回的string數(shù)組內(nèi)容依次為:天氣狀況、溫度、風(fēng)力、紫外線和空氣質(zhì)量。
3)CustomizationNews類(lèi)
該類(lèi)用于顯示用戶(hù)定制的新聞內(nèi)容,根據(jù)條件返回查詢(xún)結(jié)果,再將查詢(xún)結(jié)果生成的xml文件用XSL轉(zhuǎn)換成HTML。CustomizationNews類(lèi)視圖如圖4所示??梢酝ㄟ^(guò)類(lèi)似以下的網(wǎng)址來(lái)訪問(wèn)該頁(yè)面:
http://localhost/CustomizationNews.aspxMedia=6&Category=3
其中Media由DataRetrival類(lèi)的GetMediaList方法獲得。Category由DataRetrival類(lèi)的GetCategoryList方法獲得。
圖4 CustomizationNews類(lèi)視圖Fig.4 CustomizationNews Class View
客戶(hù)端模塊由兩部分組成,一部分是名為Shrinkable GroupBox的自定義控件類(lèi)庫(kù),它實(shí)現(xiàn)了自動(dòng)收縮的功能。另一部分就是SideBar窗體應(yīng)用程序,實(shí)現(xiàn)了SideBar的主界面和設(shè)置界面,調(diào)用WebService獲取信息。
1)ShrinkableGroupBox類(lèi)庫(kù)
①ExtendButton類(lèi)
此類(lèi)實(shí)現(xiàn)了ShrinkableGroupBox中的按鈕。當(dāng)用戶(hù)鼠標(biāo)移動(dòng)到上面時(shí),鼠標(biāo)形狀會(huì)發(fā)生變化,文字會(huì)高亮顯示。單擊后箭頭方向會(huì)改變,并對(duì)ShrinkableGroupBox進(jìn)行放縮。
②ShrinkableGroupBox類(lèi)
此類(lèi)實(shí)現(xiàn)了放縮功能,在縮放后激發(fā)事件。
2)SideBar項(xiàng)目
SideBar是一個(gè)Windows窗體項(xiàng)目,它是客戶(hù)端的主界面,顯示了天氣、股票和新聞信息。其中的可收縮框使用ShrinkableGroupBox。另外,它還提供了定制這些信息的界面,將設(shè)置保存到配置文件中。它通過(guò)調(diào)用WebService獲取需要顯示的信息。
①M(fèi)ainForm類(lèi)
此類(lèi)是客戶(hù)端的主界面。
②SettingForm類(lèi)
此類(lèi)負(fù)責(zé)設(shè)置并保存用戶(hù)的定制信息。
③Settings類(lèi)
此類(lèi)用于映射配置文件中的信息。
啟動(dòng)服務(wù)器端,發(fā)布Web服務(wù)DataRetrival Web Service。運(yùn)行客戶(hù)端應(yīng)用程序SideBar,調(diào)用Web服務(wù)獲取指定網(wǎng)站上的默認(rèn)城市天氣情況、股票信息以及分類(lèi)新聞內(nèi)容。通過(guò)“配置”對(duì)話框,可以查詢(xún)北京或上海的股市信息、選擇要查看天氣的城市名稱(chēng)、定制不同網(wǎng)絡(luò)媒體的分類(lèi)新聞信息。
該系統(tǒng)采用了XML相關(guān)技術(shù)和Web服務(wù),設(shè)計(jì)了一個(gè)基于XML的Web信息篩選器應(yīng)用實(shí)例,實(shí)現(xiàn)了對(duì)特定網(wǎng)站信息的獲取和過(guò)濾,為用戶(hù)提供了有效信息。經(jīng)過(guò)對(duì)實(shí)例評(píng)價(jià)分析,Web服務(wù)端所提供的服務(wù)能夠根據(jù)用戶(hù)的定制要求成功完成對(duì)指定網(wǎng)頁(yè)的信息獲取和過(guò)濾,實(shí)現(xiàn)了Web篩選器的功能。
[1]胡軼眾.基于.NET的動(dòng)態(tài)信息發(fā)布系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].四川:重慶大學(xué),2007.
[2]袁新坤.基于XML與Web Services數(shù)據(jù)交換平臺(tái)的研究與實(shí)現(xiàn)[D].太原:太原理工大學(xué),2008.
[3]李俊.XML數(shù)據(jù)轉(zhuǎn)換技術(shù)的研究和改進(jìn)[D].上海:同濟(jì)大學(xué)軟件學(xué)院,2008.
[4]李偉超.基于XML的網(wǎng)絡(luò)服務(wù)研究[D].鄭州:鄭州大學(xué),2006.
[5]林莉.XML數(shù)據(jù)交換技術(shù)在高校信息化平臺(tái)中的應(yīng)用[D].大連:大連理工大學(xué),2009.
[6]謝劍剛.XML數(shù)據(jù)在Microsoft+SQL+Server+2005中的存儲(chǔ)和優(yōu)化[D].廣東:中山大學(xué),2007.
[7]微軟公司.Web應(yīng)用開(kāi)發(fā)——ASP.NET 2.0[M].北京:高等教育出版社,2007.