您的位置: 首页 > 技术文档 > 多媒体制作 > 用flash从百度搜索中找歌词
Accordion组件的使用实例 回到列表 FLASH打造LRC歌词播放器
 用flash从百度搜索中找歌词

作者:FlashK 时间: 2006-01-12 文档类型:原创 来自:蓝色理想

第 1 页 本地直接从百度获取LRC歌词 一
第 2 页 本地直接从百度获取LRC歌词 二
第 3 页 本地直接从百度获取LRC歌词 三
第 4 页 本地直接从百度获取LRC歌词 四
第 5 页 实用性的东西

看看用 "网页快照" ("快照" )截断的方式:
*********************************
</a> -
<a class=fl href="/search?hl=zh-CN&lr=lang_zh-CN&newwindow=1&q=related:www.design-war.com/manage/download_counter.asp%3Fid%3D2262">类似网页</a></nobr>
<p class=g>
<a class=l href="http://www.rixiu.com/fei5/11/1140657ae45bc98.html" target=_blank onmousedown="return clk(0,'res','2','')">郑源/披着羊皮的狼.LRC 飞舞歌词fei5.com</a><br>
<font size=-1>郑源/披着羊皮的狼.LRC. <b>...</b> [ti:披着羊皮的狼] [ar:郑源] [al:我最<br>火] [by:fei5.com] [offset:-500] [00:01.00]-披着羊皮的狼- [00:04.00]歌手:郑<br>源[00:08.00]专辑:我最火[00:12.00]词曲:刀郎[00:16.00] <b>...</b><br>
<font color=#008000>
<span dir=ltr>www.rixiu.com/fei5/11/1140657ae45bc98.html</span> - 6k - 补充材料 - </font>
<nobr><a class=fl href="http://72.14.203.104/search?q=cache:jsIjyqajvhcJ:www.rixiu.com/fei5/11/1140657ae45bc98.html+%5Bti:%E6%8A%AB%E7%9D%80%E7%BE%8A%E7%9A%AE%E7%9A%84%E7%8B%BC&hl=zh-CN" target=_blank>网页快照
</font>

*********************************
下面的处理事实上就是一层层剥离数据的过程。

第一句 linkData[i] = linkData[i].slice(0, linkData[i].lastIndexOf("<a")) 的作用是只取上面源代码的一部份用作后面的处理,这样有利于后面的操作和简化你的视野。

选取有特征的字符串在这里很重要。
看看上面的这段代码,关于搜索结果的那一段("<font size=-1>郑源/披着羊皮的狼.LRC......c98.html</span> - 6k")都是不能作为特征进行数据搜索处理的,因为它们会随着搜索结果的不同而改变。所有可用的就是关于超链接的部份(搜索引擎不管如何更改他们的页面,点向最终页面的这个链接始终都是会存在的,随着时间的推移,在很长一段时间内也都是如此,这里有为你考虑到程序的寿命问题,也就是说,你写的这段程序在很长的一段时间内都是有用的)。


也就是源代码中的"<a href= " 和"</a>"标签。在这里我们用了"<a"作为特征字符串并只取在这之前的数据。我们将从后面剥离最后一个超链接以使结果从后面开始第一个超链接就是我们想要的数据。
linkData[i].lastIndexOf("<a") 找到最后一个 "<a"出现的位置,也就是在这个地方: ......补充材料 - </font><nobr><a class=fl href="http://72.14.203.104/ .....
linkData[i] = linkData[i].slice(0, linkData[i].lastIndexOf("<a")) 取它之前的数据。也就是这一段: </a> - <a class=fl href="/search?hl=......6k - 补充材料 - </font><nobr>
(补充一句,考到锚点和结果文字多少的情况,事实上用"</a"作为特征字符串处理可能更好一些,这样这一次处理的结果就剩下这段代码了):
*********************************
</a> -
<a class=fl href="/search?hl=zh-CN&lr=lang_zh-CN&newwindow=1&q=related:www.design-war.com/manage/download_counter.asp%3Fid%3D2262">类似网页</a></nobr>
<p class=g>
<a class=l href="http://www.rixiu.com/fei5/11/1140657ae45bc98.html" target=_blank onmousedown="return clk(0,'res','2','')">郑源/披着羊皮的狼.LRC 飞舞歌词fei5.com</a>

*********************************

对比一下上面用"类似网页"截断的数据,要处理到这一步,就需要重复处理两次。(因为 "<a" 的超链接在从后向前查找的过程中,有出现两次,这就是为什么要选择 "网页快照" 作为我们截断重复区块的原因)

第二句 linkData[i] = linkData[i].slice(linkData[i].lastIndexOf("href=")+6) 从后面查找 "href="(现在最后的一个超链接区域就是我们想要的链接了,这就是为什么我们用lastIndexOf从后面搜索)。不过稍微不同的是,现在取在"href="之后的字符串(上一步是之前)。经过这次处理剩下的代码如下:
*********************************
www.rixiu.com/fei5/11/1140657ae45bc98.html"; target=_blank onmousedown="return clk(0,'res','2','')">郑源/披着羊皮的狼.LRC 飞舞歌词fei5.com</a>
*********************************

第三句 linkData[i] = linkData[i].slice(0, linkData[i].indexOf("\"")) 取得第一个引号以前的字符串。这里我讲一下为什么不用 target= 或者.html 作为特征处理的原因,上面的代码实际上也可以将 target= 放在后面,也不会影响最终页面的结果。像这样:
www.rixiu.com/fei5/11/1140657ae45bc98.html"; onmousedown="return clk(0,'res','2','')" target=_blank>郑源/披着羊皮的狼.LRC
飞舞歌词fei5.com</a>
所以,它是不可识别和预知的。而.html 则并不是因为所有网页都是以.html作为结尾的,有些可能是.htm ,有些更可能是像?sl=11&word=aa这样动态生成的格式。(其实" 也并不是非常稳健的方式,因为有些不标准的网页可能将引号" 去除,这时候替代的方法是使用空格)
*********************************
www.rixiu.com/fei5/11/1140657ae45bc98.html
*********************************

现在最终我们得到了这个超链接。

通过上面的for (var i = 0; i<linkData.length; i++) { 循环,我们得到了这个页面的所有通过最终页面的链接(在百度中是10个)并将它们放入一个数组中。

现在我们已经得到了搜索结果页面的每个通向最终页面的链接(Google 和百度都如此,教程中对两者的特征字作了兼容),在百度中,一般而言,只要打开第一个链接就可以了。准确性差不多高过95%。

openLRCPage(linkData[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:突然的自我")之后的所有内容用作后面的处理。

出处:蓝色理想
责任编辑:蓝色月光

上一页 本地直接从百度获取LRC歌词 二 下一页 本地直接从百度获取LRC歌词 四

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
Google 视频下载工具
flash留言本梯度教程(附源)
Accordion组件的使用实例
歌词同步关键技术
Flashforward 2006最终入围名单
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:3/51个记录/页 转到 页 共5个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2