分享
 
 
 

用flash实现基于搜索引擎搜索

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

地址(目标另存为) :

http://www.webjx.com/upfiles/20060113/20060113072654_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 并不是很重要,它用来完善一些可用性的事情,也就不多说了。

下面转到 getLink 函数:

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.length; i++) {

linkData[i] = linkData[i].slice(0, linkData[i].lastIndexOf("<a"));

linkData[i] = linkData[i].slice(linkData[i].lastIndexOf("href=")+6);

linkData[i] = linkData[i].slice(0, linkData[i].indexOf("\""));

}

linkIndex = 1;

openLRCPage(linkData[0]);

}

这是用来解析网页源文件的代码,我们用它来分析得到的搜索结果。

第一句 nextPageLink = "http://www.baidu.com/"+src.slice(src.lastIndexOf("href=", src.indexOf("下一页"))+5, src.lastIndexOf("><", src.indexOf("下一页"))) 就不说了,它用来获得下一页的链接。

linkData = src.split("快照") 它将网页的源代码以"快照"作为参照拆为不同的段,然后放到数组中。

事实上,linkData=new Array(); linkData = src.split("快照") 这样写更标准一些。

选取一个好的拆分关键字非常重要,它可以让你的运算量成倍降低(特别是要处理的数据量更大的时候,就更明显),在这里,我们使有"快照"这两个字,看看百度返回的结果:

-----------------------------------------------------

伍佰-突然的自我

[ti:突然的自我]

[al:伍佰&china blue 200 ]

[offset:0]

[00:05.00] 突然的自我

[00:12.87]

[00:31.74]听见你说朝阳起又落

[00:37.62]晴雨难测道路是脚步多

[00:43.49]我已习惯你突然间的自我

[00:49.37]挥挥洒洒将自然看...

www.musictea.com/music/lrc86407.htm?t=突 ... 4K 2005-12-24 - 百度快照

www.musictea.com 上的更多结果

水晶手机信息技术网--wav铃声 黄小琥 - 突然的..

[ti:突然的自我]

[ar:黄小琥]

[al:]

[by:wolfpey]

[offset:500]

[00:02.67]《突然的自我》

[00:10.12...[ti:突然的自我]

[ar:黄小琥]

[al:]

[by:wolfpey]

[offset:500]

[00:02.67]《突然的自我》

[00:10.12...

www.zjnetcafe.com/html/7/60586.htm 5K 2005-10-14 - 百度快照

-----------------------------------------------------

这里只显示了两段文本,它有十个这样的文本块。分析一下,尽管每块文本的标题和内容都不同,但是每一段都会出现 "百度快照 " 这样的内容。在 Google 中则是这个: "网页快照 - 类似网页"

在百度中,你可以选择"百度快照"作为拆分的参照(如果查看源代码,也可以找到更多的参照),在 Google 中,"网页快照" 和 "类似网页" 都可以使用 ,在这里,我们以 Google 为实例,说明如何选取好的关键字的一个例子:(在百度中,这只是一个巧合,就不作为教程的参考了)

在 Google 搜索框中输入"[ti:披着羊皮的狼",然后查看一下网页的源代码(菜单:查看> 源文件 或者用右键弹出菜单)。它们和你在 flash 中获得的数据是一样的。找到每个重复类似的文本块的那一段源代码:(我们取第二段)

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

<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>网页快照</a> -

<a class=fl href="/search?hl=zh-

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有