由于安全性的原因,請下載到本地使用:
地址(目標(biāo)另存為) : http://www.95time.cn/articleimg/2006/01/3161/lrcSearch.swf
代碼: System.useCodepage = true; myLoadVars = new LoadVars(); function lrcSearch(keyWord) { musicName = keyWord.slice(0, keyWord.indexOf(" ")); myLoadVars.load("http://www.baidu.com/s?wd="+"[ti:"+keyWord); myLoadVars.onData = getLink; pageIndex = 1; } function getLink(src) { nextPageLink = "http://www.baidu.com/"+src.slice(src.lastIndexOf("href=", src.indexOf("下一頁"))+5, src.lastIndexOf("><", src.indexOf("下一頁"))); linkData = src.split("快照"); for (var i = 0; i linkData[i] = linkData[i].slice(0, linkData[i].lastIndexOf(" linkData[i] = linkData[i].slice(linkData[i].lastIndexOf("href=")+6); linkData[i] = linkData[i].slice(0, linkData[i].indexOf("\"")); } linkIndex = 1; openLRCPage(linkData[0]); } function openLRCPage(url) { myLoadVars.load(url); myLoadVars.onData = getLRC; } function getLRC(src) { htmlData = src.slice(src.lastIndexOf("[ti:"+musicName)); findEndTag(); htmlData = htmlData.split(" ").join("\n"); htmlData = htmlData.split(" ").join("\n"); lrcData = htmlData.split(String.fromCharCode(10)).join(""); tx_lrc.text = lrcData; } function findEndTag() { var lastIndex = htmlData.lastIndexOf("]"); if (htmlData.slice(lastIndex-3, lastIndex-2) == "." && htmlData.slice(lastIndex-6, lastIndex-5) == ":") { var tmpBR = htmlData.slice(lastIndex); htmlData = htmlData.slice(0, lastIndex+tmpBR.indexOf(" htmlData = htmlData.slice(0, htmlData.indexOf(" } else { htmlData = htmlData.slice(0, lastIndex); if (loopStart == undefined) { loopCount = 1; } else { delete loopStart; } if (loopCount<254) { loopStart = true; loopCount++; findEndTag(); } } } function error() { if (nextPageLink != undefined) { if (linkIndex>linkData.length-2) { myLoadVars = new LoadVars(); myLoadVars.load(nextPageLink); myLoadVars.onData = getLink; pageIndex++; linkIndex = 1; delete nextPageLink; } else { linkIndex++; openLRCPage(linkData[linkIndex-1]); } } }
我們先來看第一句: System.useCodepage = true; 這句主要的作用是讓最后的結(jié)果不會變成亂碼,默認(rèn)情況下flash是按照UTF格式來解析所有加載的數(shù)據(jù)的,這在加載中文數(shù)據(jù)的時候會有些問題,只有數(shù)據(jù)在用UTF-8編碼格式的時候才能被正確識別。因為很多頁面(基本上現(xiàn)在90%的頁面)并不是用UTF-8來保存的,所以要加上這句。這樣才不會亂碼。更詳細的說明請參見flash幫助關(guān)于System.useCodepage的詳細說明。反正在大部份情況下,如果你遇到亂碼的問題都可以用這個來解決,使用 System.useCodepage = true 或者 System.useCodepage = false 來切換。
第二句: myLoadVars = new LoadVars(); 這是用來裝載所有加載的數(shù)據(jù)的,等會加載的網(wǎng)頁的數(shù)據(jù)(html源文件)都裝在這里。基本上,要進行數(shù)據(jù)傳輸(例如和服務(wù)器程序交換變量數(shù)據(jù)或者從服務(wù)器上加載文件)的進候都要用到 LoadVars()、XML的數(shù)據(jù)傳輸/加載方法或者XMLSocket 。LoadVars() 是最基礎(chǔ)的方法。
function lrcSearch(keyWord) { musicName = keyWord.slice(0, keyWord.indexOf(" ")); myLoadVars.load("http://www.baidu.com/s?wd="+"[ti:"+keyWord); myLoadVars.onData = getLink; pageIndex = 1; }
這里定義了一個函數(shù) lrcSearch(keyWord) 。呆會每次搜索不同歌詞的時候都是從這里開始的,通過向這個函數(shù)發(fā)送不同的歌詞名(如 lrcSearch("突然的自我")、 lrcSearch("童話")、lrcSearch("不得不愛")或者lrcSearch("我聽這種音樂的時候最愛你"))來啟動搜索。在這里,是所有代碼的入口。 它告訴flash:加載(下載) "http://www.baidu.com/s?wd="+"[ti:"+keyWord 的文件。keyWord 是剛剛上面所說的 "突然的自我" 等需要搜索的關(guān)鍵字。 當(dāng)你在搜索引擎搜索內(nèi)容的時候注意一下地欄的url,在百度中,它是類似于這樣: www.baidu.com/s?wd=%5Bti%3A%CD%BB%C8%BB%B5%C4%D7%D4%CE%D2&cl=3 你可以更改里面的"%5Bti%3A%CD%BB%C8%BB%B5%C4%D7%D4%CE%D2&cl=3"來完成不同的搜索,這里是剛剛輸入的“[ti:披著羊皮的狼”的對應(yīng)URL標(biāo)準(zhǔn)格式編碼,你可以在瀏覽器中將這段文本轉(zhuǎn)換成“[ti:突然的自我”試試。它會幫你自動轉(zhuǎn)換成相應(yīng)的URL來進行以后的工作(下載網(wǎng)頁)。在flash中,也是一樣的。所以你可以通過加載 www.baidu.com/s?wd=[ti:突然的自我 這樣的URL來獲得在瀏覽器中打開的文件(它們的html源代碼)。也就是上面的那句: myLoadVars.load("http://www.baidu.com/s?wd="+"[ti:"+keyWord);
接著,myLoadVars.onData = getLink 定義了LoadVars的onData的事件。讓 flash 在下載完網(wǎng)頁后執(zhí)行g(shù)etLink這個函數(shù)的代碼。 LoadVars有兩個事件(也就是當(dāng)某一件事完成后要怎么樣):LoadVars.onData 和 LoadVars.onLoad 。在這里,我們使用 LoadVars.onData。它的寫法如下: my_lv.onData = function(src) { // 此處是您的語句 } 它定義了當(dāng)下載完成的時候該執(zhí)行的代碼。src 是加載的原始(未分析)數(shù)據(jù)(在這里是下載的網(wǎng)頁的源代碼)。它直接定義了一個函數(shù)。你也可以將這個函數(shù)寫在其它地方或者調(diào)用其它你已經(jīng)寫好的函數(shù)。也就是這樣寫: my_lv.onData = getLink 或者 my_lv.onData = getLink(src); (但注意不要這樣寫 my_lv.onData = getLink() ,因這樣會丟失剛剛獲得獲得的網(wǎng)頁源代碼)
musicName = keyWord.slice(0, keyWord.indexOf(" ")); 這一句我就不詳細論述了,只告訴你它用來完成搜索中使用空格隔開關(guān)鍵字的功能。使用更多的用空隔間隔的關(guān)鍵字可以更快更準(zhǔn)確的搜索到所要的內(nèi)容,如加入歌手 "披著羊皮的狼 譚詠麟" 的結(jié)果就可能比 "披著羊皮的狼" 更準(zhǔn)確,還可以對歌詞的內(nèi)容作界定,這可以將同名歌曲區(qū)別開來,例如"青春"這首歌曲就有5個以上的版本,像這樣 "青春 你我都不會變不會變"(在這里,歌手的名字則可有可無,大部份情況下,無更好一些)。pageIndex = 1 并不是很重要,它用來完善一些可用性的事情,也就不多說了。
出處:藍色理想
責(zé)任編輯:藍色月光
上一頁 下一頁 本地直接從百度獲取LRC歌詞 二
◎進入論壇Flash專欄版塊參加討論
|