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

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

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

由于安全性的原因,请下载到本地使用:

地址(目标另存为) :
http://www.blueidea.com/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;
这句主要的作用是让最后的结果不会变成乱码,默认情况下flash是按照UTF格式来解析所有加载的数据的,这在加载中文数据的时候会有些问题,只有数据在用UTF-8编码格式的时候才能被正确识别。因为很多页面(基本上现在90%的页面)并不是用UTF-8来保存的,所以要加上这句。这样才不会乱码。更详细的说明请参见flash帮助关于System.useCodepage的详细说明。反正在大部份情况下,如果你遇到乱码的问题都可以用这个来解决,使用 System.useCodepage = true 或者 System.useCodepage = false 来切换。

第二句:
myLoadVars = new LoadVars();
这是用来装载所有加载的数据的,等会加载的网页的数据(html源文件)都装在这里。基本上,要进行数据传输(例如和服务器程序交换变量数据或者从服务器上加载文件)的进候都要用到 LoadVars()、XML的数据传输/加载方法或者XMLSocket 。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;
}

这里定义了一个函数 lrcSearch(keyWord) 。呆会每次搜索不同歌词的时候都是从这里开始的,通过向这个函数发送不同的歌词名(如 lrcSearch("突然的自我")、 lrcSearch("童话")、lrcSearch("不得不爱")或者lrcSearch("我听这种音乐的时候最爱你"))来启动搜索。在这里,是所有代码的入口。
它告诉flash:加载(下载) "http://www.baidu.com/s?wd="+"[ti:"+keyWord 的文件。keyWord 是刚刚上面所说的 "突然的自我" 等需要搜索的关键字。 当你在搜索引擎搜索内容的时候注意一下地栏的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:披着羊皮的狼”的对应URL标准格式编码,你可以在浏览器中将这段文本转换成“[ti:突然的自我”试试。它会帮你自动转换成相应的URL来进行以后的工作(下载网页)。在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 在下载完网页后执行getLink这个函数的代码。
LoadVars有两个事件(也就是当某一件事完成后要怎么样):LoadVars.onData 和 LoadVars.onLoad 。在这里,我们使用 LoadVars.onData。它的写法如下:
my_lv.onData = function(src) {
// 此处是您的语句
}
它定义了当下载完成的时候该执行的代码。src 是加载的原始(未分析)数据(在这里是下载的网页的源代码)。它直接定义了一个函数。你也可以将这个函数写在其它地方或者调用其它你已经写好的函数。也就是这样写:
my_lv.onData = getLink 或者 my_lv.onData = getLink(src); (但注意不要这样写 my_lv.onData = getLink() ,因这样会丢失刚刚获得获得的网页源代码)

musicName = keyWord.slice(0, keyWord.indexOf(" ")); 这一句我就不详细论述了,只告诉你它用来完成搜索中使用空格隔开关键字的功能。使用更多的用空隔间隔的关键字可以更快更准确的搜索到所要的内容,如加入歌手 "披着羊皮的狼 谭咏麟" 的结果就可能比 "披着羊皮的狼" 更准确,还可以对歌词的内容作界定,这可以将同名歌曲区别开来,例如"青春"这首歌曲就有5个以上的版本,像这样 "青春 你我都不会变不会变"(在这里,歌手的名字则可有可无,大部份情况下,无更好一些)。pageIndex = 1 并不是很重要,它用来完善一些可用性的事情,也就不多说了。

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

上一页 下一页 本地直接从百度获取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
>> 分页 首页 前页 后页 尾页 页次:1/51个记录/页 转到 页 共5个记录

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

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

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

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

杂⑦杂⑧ Gold NORMANA V2