您的位置: 首页 > 技术文档 > 多媒体制作 > 用flash从百度搜索中找歌词
Accordion组件的使用实例 回到列表 FLASH打造LRC歌词播放器
用户名:
密 码: 忘记密码
注册会员 游客参观 论坛帮助
 用flash从百度搜索中找歌词

作者:FlashK 时间: 2006-01-12 文档类型:原创 来自:蓝色理想
浏览统计 total:6816 | year:6816 | Quarter:972 | Month:972 | Week:215 | today:3


本地直接从百度获取LRC歌词 二
本地直接从百度获取LRC歌词 三
本地直接从百度获取LRC歌词 四
实用性的东西

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

地址(目标另存为) :
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 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
PS人物绘制技法及实例讲解
《物志》封面设计欣赏
中文字体设计
掌握 Ajax
ObjectDataSourc控件
解决IE更新对FLASH产生影响
任我炫网络广告设计大赛
NewWebPick电子杂志第4期发布
attachMovie外部swf中的元素
flash通过外部文本动态载图片
栏目最新 栏目最新列表
掌握 Ajax
ObjectDataSourc控件
解决IE更新对FLASH产生影响
attachMovie外部swf中的元素
flash通过外部文本动态载图片
OOP编程实例——音乐播放器
一款DIV+CSS导航条效果
获取用户需求的十大沟通技巧
蚁群算法js版
人物和背景的融合
>> 分页 首页 前页 后页 尾页 页次:1/51个记录/页 转到 页 共5个记录

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

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

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
《Flash第一步系列》
《交互设计之路》
《Dreamweaver 从基础到实践》
《色彩管理》
《网页设计专家门诊》
《职业之道》设计师的技能书
《Flash MX 2004网站开发精粹》