用VB寫歌詞搜尋程式

2021-03-31 11:00:18 字數 2674 閱讀 8790

上網,聽歌,再加上一杯香茗,真是悠哉遊哉。聽到興致之時,自然想看歌詞。**極限**就提供了歌詞搜尋。我想,作為程式設計愛好者的我們,能不能在程式中實現歌詞搜尋呢?經過一番研究,發覺其實也很簡單。

首先看看**極限歌詞搜尋是怎樣進行的。比如搜尋張學友的《偷心》,我發覺**極限有一種歌詞搜尋方式是這樣的:只要在ie位址列中鍵入http://geci.china***.***/relatedgeci.php?song_name=偷心&singer_name=張學友

並回車,即可搜尋出歌詞。也就是說在「張學友」處要輸入的是歌手名,在「偷心」處要輸入的是歌名,然後就能搜尋。我又試了搜尋其他歌手的歌曲,均可以。並且我檢視原始檔發覺歌詞在網頁中排放有固定規律。比如在顯示歌詞的網頁上,均有固定的「歌詞:」後面接歌詞,而且在原始檔中它們都被放在乙個

…之間。所以當我們獲取了全部原始檔,我們首先尋找「歌詞:」,如果找不到,則伺服器上沒提供要搜尋的歌詞;如果找到,則去掉它前面所有**,然後再尋找「

」,只要找到第乙個「

」,我們就把它以及它後面的**全部清除,歌詞就在剩下的**中。我們知道,在網頁中「<」和「>」是配對出現的。我仔細研究了剩下的**,發覺在「>」和「<」之間要麼是歌詞,要麼是空格。所以只要在剩下的**中去除全部「<」和「>」之間的內容包括它們本身即可得到歌詞。

又如何進行搜尋以獲取原始檔呢?vb當中有幾個控制項都可以做到。本程式使用i***控制項。i***有兩種方法可以向伺服器請求獲取指定的資料,分別是openurl和execute。他們的不同點在於前者是同步的,後者是非同步的。一般來說,使用openurl比較方便,因為它可以直接把獲取的資料賦給某個變數。但是本程式只用execute,因為使用openurl會出現乙個很難解決的問題,至於什麼問題,還是留著給讀者您當練習吧。

現在開工。開啟vb6,新建乙個工程,在工具箱裡新增i***控制項。在窗體form上畫出三個文字框,分別命名為txt歌手、txt歌名和txt歌詞,text屬性均為空,其中txt歌詞的屬性multiline為true,屬性scrollbars為2-vertical。再新增乙個按鈕並命名為cmd搜尋,其屬性caption為搜尋;最後新增乙個i***控制項,名為i***1。

詳細**如下:

option explicit

private sub cmd搜尋_click()

i***1.execute "http://geci.china***.***/relatedgeci.php?song_name=" & trim(txt歌 名) & "&" & "singer_name=" & trim(txt歌手), "get"

end sub

private sub i***1_statechanged(byval state as integer)

dim 網頁**$

dim 臨時變數$

dim 位置&

if state = 11 then

msgbox "出現錯誤!"

elseif state = 12 then

do '開始接受資料

doevents

臨時變數$ = i***1.getchunk(1024, icstring)

if len(臨時變數$) = 0 then exit do

網頁**$ = 網頁**$ & 臨時變數$ '接受到的所有資料存放在變數  「網頁**$」中

loop

位置& = instr(1, 網頁**$, "歌詞:") '首先尋找特徵詞「歌詞:」

if 位置& = 0 then

'如果沒找到特徵詞「歌詞:」就證明伺服器上沒提供要搜尋的歌詞

msgbox "未收錄這首歌的歌詞!"

exit sub

else

'把歌詞解析出來

'首先把「網頁**$」中「歌詞:」前面的**全部去掉

網頁**$ = right(網頁**$, len(網頁**$) - (位置& - 1))

'尋找第二個特徵詞「

」位置& = instr(1, 網頁**$, "

'把特徵詞「

」後面的**(包括特徵詞自身)全部去掉

網頁**$ = left(網頁**$, 位置& - 1)

'歌詞就在剩下的**中

dodoevents

位置& = instr(1, 網頁**$, "<")

if 位置& = 0 then

'如果找不到字元「<」則證明整個尋找已結束

臨時變數$ = 臨時變數$ & " " & 網頁**$

exit do

else

'找到字元「<」把它前面的**擷取儲存

臨時變數$ = 臨時變數$ & " " & left(網頁**$, 位置& - 1)

'然後從「網頁**$ 」中清除已被擷取部分和字元「<」

網頁**$ = right(網頁**$, len(網頁**$) - 位置&)

'再尋找字元「>」

位置& = instr(1, 網頁**$, ">")

'找到字元「>」把它前面**包括它自身全部清除

網頁**$ = right(網頁**$, len(網頁**$) - 位置&)

end if

loop

'「臨時變數$」中存放著歌詞,把它們全部賦給「txt歌詞」

txt歌詞 = 臨時變數$

用 python 解析歌詞

2.解析歌詞 musiclrc 00 03.50 傳奇 00 19.10 作詞 劉兵 作曲 李健 00 20.60 演唱 王菲 00 26.60 04 40.75 02 39.90 00 36.25 只是因為在人群中多看了你一眼 04 49.00 02 47.44 00 43.69 再也沒能忘掉你容...

VB2005使用類實現LRC歌詞同步

vb2005 使用類實現 lrc歌詞同步 歌詞同步 follow me 為了實現歌詞同步,有必要熟悉歌詞檔案的工作機制 現在主流的歌詞檔案為 lrc格式。可以用記事本開啟!它有三部分組成,分別是 資訊,時間標籤與歌詞,如下面這段 ti 七里香 ar 周杰倫 al 七里香 by 汐木 00 27.68...

用python寫個歌詞解析程式

import time musiclrc 00 03.50 傳奇 00 19.10 作詞 劉兵 作曲 李健 00 20.60 演唱 王菲 00 26.60 04 40.75 02 39.90 00 36.25 只是因為在人群中多看了你一眼 04 49.00 02 47.44 00 43.69 再也沒...