快速业务通道

用flash实现基于搜索引擎的搜索 - 本地直接从百度获取LRC歌词

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-08
[0])

linkIndex = 1 这句就不说了,用来处理一些逻辑。使它可以在第一个链接失效的时候也能继续运行。

function openLRCPage(url) {
myLoadVars.load(url);
myLoadVars.onData = getLRC;
}
这个和一开始加载搜索结果的代码很相似,只不过将处理的函数传给了 getLRC。

function getLRC(src) {
htmlData = src.slice(src.lastIndexOf("[ti:"+musicName));
findEndTag();
......
现在开始处理最终的含有LRC内容的网页了(从搜索引擎中打开)。最终的结果页可能如下:

(前面省略)
[ti:突然的自我]
[ar:黄小琥]
[al:]
[by:wolfpey]
[offset:500]
[00:02.67]《突然的自我》
[00:10.12]作词:伍佰 徐克
[00:11.67]作曲/编曲:伍佰
[00:12.30]演唱:黄小琥
(后面省略)

具体请从搜索引擎打开几个用"[ti:突然的自我"搜索的页面看看。现在我们直接取在我们想要的LRC内容开始后的网页代码。也就是以 "[ti:"+musicName) 为特征开始的网页代码。(为了便于观察,我这里以实际显示的内容为参考,并没有列出网页的源代码,但它们有时是可以相互通用的,在网页源代码都会包含最终显示的内容,某些特殊的转义字符除外。只是更为杂乱。插一句,有些网页的源代码确实够乱的,很可能让你的程序崩溃)

我们可以用indexOf()和lastIndexOf()查找。考虑到有些网页中(特别是论坛)会出现两次以上的歌词。也许是后一个发贴者贴了一个更准确的歌词或者其它情况(比如有人将它作为主题标头内容发表)。我们这里使用lastIndexOf(),我们从后面开始查找(我们假定后一个歌词比前一个歌词更准确)。并选取在它("[ti:突然的自我")之后的所有内容用作后面的处理。

既然我们已经找到了歌词的头,那么只要我们找到歌词的结尾并选取在这之间的内容差不多就算完成了。findEndTag() 函数用来查找歌词的结尾。

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("<br")+3);
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();
}
}
}
LRC歌词是有特征可以区别的。看看LRC文件,它每一行都包含了像"[00:30.11]"这样的时间标记,我们的目标就是找到它。首先我们查找 "]" (不能查找 "[00:30.11]" ,里面的时间是不确定的,flash 也不支持正则的方式)

var lastIndex = htmlData.lastIndexOf("]") 使用lastIndexOf()从后面向前查找的方式找到最后一个 "]" 字符。这里我们用到了一个 var 声明一个局部变量。如果你在函数过程中要使用一个临时性的东西,都最好先用var声明一下,它将在函数运行完后自动销毁,以便更节省内存(另外一个好处就是可以帮你防止和外面的名字冲突而引起不必要的麻烦)

但光有这些还不够,下一步就是要验证我们找到是不是像"[00:30.11]"这样的字符。要完成验证的另外一个原因就是可能网页中(特别是论坛贴子中)其它地方也可能出现"]"这样的字符。它们可能包含一大堆像"[3]:我想找...[4]:喜欢这歌,顶下"、"第[1]页"这样的包含"]"字符内容(甚至是像[ MP=480,360,false]http://music.f4666.com/music/turanziwo.mp3[/MP]"这样的论坛发贴的代码)。可以参考一下这个网页或其它论坛:
www.zjnetcafe.com/html/7/60586.htm

if (htmlData.slice(lastIndex-3, lastIndex-2) == "." && htmlData.slice(lastIndex-6, lastIndex-5) == "

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号