明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用ASP構(gòu)建音樂服務(wù)器

[摘要]用ASP構(gòu)建音樂服務(wù)器 中國(guó)科學(xué)技術(shù)大學(xué)信息管理與 決策科學(xué)系 張斯成 (eternal@263.net) -------------------------------------------------------------------------------- ---- 音樂服務(wù)器(Mus...

用ASP構(gòu)建音樂服務(wù)器
中國(guó)科學(xué)技術(shù)大學(xué)信息管理與
決策科學(xué)系 張斯成 (eternal@263.net)

--------------------------------------------------------------------------------

---- 音樂服務(wù)器(Music Server)是指一個(gè)提供音樂在線服務(wù)的服務(wù)器,它包括高端提供門戶服務(wù)的網(wǎng)站、Web數(shù)據(jù)庫和低端的操作平臺(tái)、硬件設(shè)施。目前,在Internet和Intranet上有不少這樣的站點(diǎn),特別是在一些高速寬帶的局域網(wǎng)中(如校園網(wǎng)),音樂服務(wù)器給上網(wǎng)的朋友提供了休閑娛樂的好去處,同時(shí)也給網(wǎng)站帶來了較高的訪問率。

----像其他站點(diǎn)一樣,音樂服務(wù)器包括網(wǎng)站和硬件兩個(gè)部分。硬件性能和服務(wù)器效率是成正比的,因而如何構(gòu)建網(wǎng)站才是一個(gè)音樂服務(wù)器的關(guān)鍵。從目前來看,網(wǎng)站基本有兩種類型:一種是運(yùn)行在Unix / Linux環(huán)境下,采用Perl / C / Php / Java 等作CGI編程語言;一種是運(yùn)行在Win NT Server 平臺(tái)上,采用ASP / WinCGI 作后臺(tái)語言。前者運(yùn)行效率高,但結(jié)構(gòu)復(fù)雜,比較適合大型站點(diǎn);后者編程難度相對(duì)較低,而且采用ODBC驅(qū)動(dòng)接口,數(shù)據(jù)庫連接方便,特別適合作音樂服務(wù)器。

----本文將以ASP 5.0為編程環(huán)境、Mircosoft Access 97為Web 數(shù)據(jù)庫、Win NT Server 4.0為運(yùn)行平臺(tái),舉例說明音樂服務(wù)器的構(gòu)建步驟。

----一個(gè)基本的音樂服務(wù)器包括音樂在線欣賞、音樂排行榜、音樂主題檢索和音樂下載等四個(gè)部分。下面將主要從技術(shù)角度來討論如何實(shí)現(xiàn)以上功能。

音樂主題數(shù)據(jù)庫的規(guī)劃
----音樂主題數(shù)據(jù)庫是Web站點(diǎn)存儲(chǔ)所需音樂資料的倉庫,它的規(guī)劃在很大程度上影響了整個(gè)網(wǎng)站的結(jié)構(gòu)和效率。數(shù)據(jù)庫中可以單獨(dú)建成一張表單,也可以以主鍵和外鍵的形式建成多張表單。本例中為說明上的便利,建成如下單表框架: (music.mdb)


音樂在線欣賞
----在線欣賞是指客戶端利用播放器播放服務(wù)器端的音樂文件。其原理是當(dāng)客戶端向服務(wù)器提交音樂選單后,服務(wù)器生成相應(yīng)的.m3u文件,并將該文件通過Http協(xié)議下行至客戶端;客戶端將被激發(fā)調(diào)用相應(yīng)的播放器執(zhí)行該文件,從而實(shí)現(xiàn)了音樂在線欣賞功能。目前支持.m3u文件的播放器有Winamp、Realplayer G2、 Musicmatch等。當(dāng)這些播放器軟件被正確安裝在客戶端時(shí),就可以自動(dòng)播放.m3u文件。所以解決問題的關(guān)鍵在于后臺(tái)如何生成.m3u文件并下行到客戶端。以下利用ASP中內(nèi)置的FileSystem組件給出一種解決方案,并給出相應(yīng)程序。
<%
dim choose,path,mydb,myset,SQL,fs,mp3
‘##### 獲得list.htm表單中選中的歌曲項(xiàng)
對(duì)應(yīng)的id號(hào),并賦給字串變量choose #####
choose=“("
for i=3 to request.form.count
choose=choose+request.form(i)+“,"
next
choose=left(choose,len(choose)-1)+“)"
‘##### 判斷choose變量,如果不包含任何id號(hào),
說明list.htm中沒有選中任何歌曲,終止程序#####
if choose=“()" then
response.redirect(“l(fā)ist.htm")
response.end
end if
‘#####設(shè)置文件路徑,需要把temp目錄的權(quán)限設(shè)為
對(duì)internet匿名用戶具有read & write 權(quán)限 #####
path=“E:\inetpub\wwwroot\temp\"
‘##### 創(chuàng)建文件對(duì)象 #####
Set fs = CreateObject(“Scripting.FileSystemObject")
Set mp3 = fs.CreateTextFile(path+“l(fā)isten.m3u", True)
‘##### 創(chuàng)建數(shù)據(jù)庫對(duì)象#####
set mydb=server.createobject(“adodb.connection")
mydb.open “music"
‘##### 檢索數(shù)據(jù)庫,獲得歌曲信息 #####
SQL=“select mp3name,url from "&dbname&
“where id in "&choose
set myset=tdb.execute(SQL)
do while not myset.eof
‘##### 生成點(diǎn)播歌曲文件列表 #####
mp3.Write(“http://"+myset(“url")+chr(10))
myset.movenext
loop
‘##### 更新數(shù)據(jù)庫中的當(dāng)天點(diǎn)播次數(shù)和
總共點(diǎn)播次數(shù) #####
SQL=“update music set click=click+1,
this=this+1 where id in "&choose
mydb.execute(SQL)
‘##### 取消對(duì)象 #####
set myset=nothing
mydb.close
set mydb=nothing
mp3.close
set mp3=nothing
‘##### 將該文件下載給用戶#####
response.redirect(“l(fā)isten.m3u")
response.end
%>

----注意:利用這種方法時(shí),要控制.m3u文件Http頭的內(nèi)容。在Winnt中可利用IIS設(shè)置.m3u文件類型的Mine內(nèi)容。具體操作如下:?jiǎn)?dòng)IIS —> 選中音樂服務(wù)器所在的Web站點(diǎn) —> 點(diǎn)擊“屬性” 按鈕 —> 在出現(xiàn)的屬性選項(xiàng)卡中點(diǎn)擊“Http標(biāo)題”卡 —> 點(diǎn)擊“文件類型”按鈕 —> 點(diǎn)擊“新增類型”按鈕 —> 在“相應(yīng)的擴(kuò)展名”中填入“.m3u”,在“內(nèi)容類型”中填入“audio/mpegurl” —> 然后一路確定即可。

音樂排行榜
----音樂排行榜是音樂服務(wù)器不可缺少的一項(xiàng)內(nèi)容,其重要性不亞于一個(gè)站點(diǎn)的Pageview。它可以向歌迷即時(shí)提供信息、引導(dǎo)欣賞、動(dòng)態(tài)地反映潮流趨勢(shì)。在眾多的音樂服務(wù)器中,排行榜也是竟相推陳出新的地方,具有很高的點(diǎn)擊率。一般說來,排行榜包括總共點(diǎn)播次數(shù)、當(dāng)天點(diǎn)播次數(shù)、總共下載次數(shù)等內(nèi)容。具體的實(shí)現(xiàn)方法比較簡(jiǎn)單。在單表中可以利用如下SQL語句:select * from music order by total_click 。若是多表,則可以利用帶join子句的聯(lián)合查詢SQL語句。如果要限定查詢記錄數(shù),可采用count()集合函數(shù)。如在本例中,如果要查詢當(dāng)天點(diǎn)播次數(shù)前20名的歌曲,可采用如下語句:select top 20 * from music order by total_click desc 。排行榜的功能主要取決于主題數(shù)據(jù)庫的規(guī)劃如何,你可以根據(jù)需要增刪字段,以實(shí)現(xiàn)相應(yīng)功能(如增加進(jìn)榜時(shí)間、歌手資料、名次變化等等),所涉及的SQL語句也不會(huì)過于復(fù)雜?傊判邪袷求w現(xiàn)一個(gè)音樂網(wǎng)站特色所在,可以自由發(fā)揮。
音樂主題檢索
----提到檢索,很多人立刻聯(lián)想到Y(jié)ahoo、Soho等著名站點(diǎn),并且頗有神秘之感。其實(shí),搜索引擎在數(shù)據(jù)庫中并非難事,因?yàn)閿?shù)據(jù)庫內(nèi)置的數(shù)據(jù)引擎已經(jīng)提供了很好的基礎(chǔ)。搜索效率的高低取決于數(shù)據(jù)庫的性能和SQL語句的效率。在前臺(tái),可以提供一系列的檢索項(xiàng)目和條件選項(xiàng)。在后臺(tái),則根據(jù)前臺(tái)提交的表單,生成相應(yīng)的查詢語句在數(shù)據(jù)庫中執(zhí)行,并將查詢結(jié)果返回。比如在前臺(tái)提交的表單為:檢索項(xiàng)目=“歌手姓名”,內(nèi)容=“張學(xué)友”,匹配條件=“全字匹配”,則后臺(tái)生成的SQL 語句為:select * from music where singer=‘張學(xué)友' order by edition,id asc,這樣就可以檢索出張學(xué)友的所有歌曲信息,并按專集分類返回。又如前臺(tái)要查詢的歌手姓名為“齊秦”,且歌曲名稱帶有“雨”字的所有歌曲(即要求模糊匹配),則后臺(tái)生成的SQL語句為: select * from music where singer =‘齊秦' and mp3name like ‘%雨%' order by id asc ,將返回“冬雨”、“太陽雨”、“無情的雨無情的你”等等。只要運(yùn)用適當(dāng)?shù)募记珊挽`活的 SQL語句,就可以讓你的主題檢索發(fā)揮得淋漓盡致。
音樂下載功能
----提供音樂下載功能,同樣是音樂服務(wù)器的一個(gè)基本功能,特別是對(duì)遠(yuǎn)程用戶,將喜愛的歌曲下載后才能欣賞。一般有兩種方式提供下載,一種是直接通過Http和瀏覽器下載,另一種是將曲庫開辟為Ftp目錄,通過ftp協(xié)議下載。本例中采用前一種方式,并且在數(shù)據(jù)庫中對(duì)下載次數(shù)進(jìn)行跟蹤記錄。有些站點(diǎn)還根據(jù)需要對(duì)歌曲進(jìn)行壓縮加密,將密碼提供給正式用戶,也是一條可取之道。本例中程序如下:
<%
‘##### 獲得歌曲標(biāo)志號(hào)id #####
id=request(“id")
set tdb=server.createobject(“adodb.connection")
tdb.open “music"
SQL=“select mp3url from music where id ="&id
set tset=tdb.execute(SQL)
if tset.eof then
response.end
else
‘##### 更新數(shù)據(jù)庫中歌曲的下載次數(shù) #####
SQL=“update music set total_down=total_down
+1 where id ="&id
tdb.execute(SQL)
downfile=tset(“url")
tdb.close
set tset=nothing
set tdb=nothing
end if
if downfile=“" or isnull(downfile) then response.end
downfile=“http://"+downfile
‘##### 下載相應(yīng)歌曲 #####
response.redirect(downfile)
response.end
%>

----以上步驟就構(gòu)建了一個(gè)基本的音樂服務(wù)器。當(dāng)然,一個(gè)完整的音樂服務(wù)器還可以包括歌手信息、歌迷論壇、聊天室、投票站、娛樂新聞網(wǎng)等等功能,都可以用ASP一一實(shí)現(xiàn)。本文限于篇幅,不再詳細(xì)討論。只要前臺(tái)頁面采用獨(dú)特的風(fēng)格設(shè)計(jì)和完善的JavaScript程序控制,后臺(tái)編程運(yùn)用靈活的SQL語句和強(qiáng)大的ASP組件,加之規(guī)劃周到的Web數(shù)據(jù)庫和豐富的創(chuàng)意,就能構(gòu)建一個(gè)完美的音樂服務(wù)器。有興趣的朋友不妨試試看,你會(huì)創(chuàng)造一個(gè)奇跡的!
(出處:熱點(diǎn)網(wǎng)絡(luò))