用VB写歌词搜索程序 :: vb在线
来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=543916 存档链接: https://web.archive.org/web/20050123081932id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=543916
vb在线 vb在线 <<<vb 实现漂亮的XP界面 | 首页 | 用VB写歌词搜索程序 时间: 2004-12-16 上网 ,听歌, 再加上 一杯香茗, 真是 悠哉 游哉 。 听到兴 致之时, 自然 想看 歌词 。 音乐极 限网站 就 提供 了歌 词搜索。 我想 ,作为 编程 爱好者 的 我们, 能 不能在 程序 中实现歌词搜索呢?经过一番研究,发觉其实也很简单。 首先 看 看音 乐极 限歌 词 搜索 是 怎样 进行的。 比如 搜索 张学友 的《偷心》, 我发觉 音乐极 限有 一种 歌词 搜索 方式 是 这样 的: 只要 在IE 地址 栏中键入http://geci.chinamp3.com/relatedgeci.php?song_name=偷心&singer_name=张学友 并回车 ,即可 搜索 出歌词。 也就是 说在“ 张学友 ” 处要 输入 的是歌 手名,在“偷心” 处要输 入的是 歌名 ,然后 就能搜 索。我又 试了搜 索其他 歌手 的 歌曲 , 均可 以。 并且 我查看 源文件 发觉 歌词 在网页中 排放有 固定规律。比 如在显 示歌词的 网页 上, 均有 固定的“ 歌词 :” 后面接 歌词,而且在 源文件 中 它们都 被放在一个 … 之间 。所以当 我们 获取了全部 源文件 ,我们 首先 寻找“歌词:”, 如果 找不到, 则服务器 上没 提 供要 搜索 的歌词; 如果找到 ,则去掉它 前面 所有 代码 , 然后 再寻找“ ”,只要找到第一个“ ”,我 们就 把它以 及它 后面的 代码 全部 清除 ,歌词就在剩下的 代码 中。我们 知道 ,在 网页 中“<”和“>” 是配对 出现的。我 仔细研 究了 剩下 的 代码 ,发 觉在 “>”和“<”之间要么是歌词,要么是空格。所以只要在剩下的 代码 中去除全部“<”和“>”之间的内容包括它们本身即可得到歌词。 又如何进行搜索以获取 源文件 呢? VB 当中有几个 控件 都可以 做到 。本程序使用 inet控件 。inet有 两种 方法可 以向服 务器 请求获 取指定的 数据 ,分别是OpenURL和Execute。 他们的 不同 点在 于前 者是 同步的, 后者 是异步的。 一般来 说,使用OpenURL比 较方 便, 因为它 可以直接 把获取 的数据 赋给某 个变量。但是本 程序 只用Execute, 因为 使用OpenURL 会出 现一个 很难解 决的问题, 至于什么问题 , 还是留 着给 读者您 当练习吧。 现在开工。打开 VB6 ,新建一个工程,在工具箱里添加 inet控件 。在窗 体Form 上画出三个 文本框 ,分别 命名为 txt歌手、 txt歌 名和txt歌词, Text属性 均为空,其中txt歌词的 属性 MultiLine为True, 属性 ScrollBars为2-Vertical。再添加一个 按钮 并命名为cmd 搜索 ,其 属性 Caption 为搜索 ; 最后 添加一个 inet控件 ,名为inet1。 详细 代码 如下: Option Explicit Private Sub cmd 搜索 _Click() '向服务器请求下载歌词 Inet1.Execute "http://geci.chinamp3.com/relatedgeci.php?song_name=" & Trim(txt歌 名) & "&" & "singer_name=" & Trim(txt歌手), "get" End Sub Private Sub inet1_StateChanged(ByVal State As Integer) Dim 网页 代码 $ Dim 临时变量 $ Dim 位置& If State = 11 Then MsgBox " 出现错误 !" ElseIf State = 12 Then Do '开始接受数据 DoEvents 临时变量$ = Inet1.GetChunk(1024, icString) If Len(临时变量$) = 0 Then Exit Do 网页 代码 $ = 网页 代码 $ & 临时 变量 $ '接受到的所有数 据存 放在变量? “网页 代码 $”中 Loop 位置& = InStr(1, 网页 代码 $, "歌词:") ' 首先 寻找特征词“歌词:” If 位置& = 0 Then '如果没 找到特 征词“歌词:” 就证 明服务 器上 没提供要搜索的歌词 MsgBox "未收录这首歌的歌词!" Exit Sub Else '把歌词解析出来 '首先把“网页 代码 $”中“歌词:” 前面 的 代码 全部去掉 网页 代码 $ = Right(网页 代码 $, Len(网页 代码 $) - (位置& - 1)) '寻找第二个特征词“ ” 位置& = InStr(1, 网页 代码 $, " ") '把特征词“ ”后面的 代码 (包括特征词自身)全部去掉 网页 代码 $ = Left(网页 代码 $, 位置& - 1) '歌词就在剩下的 代码 中 Do DoEvents 位置& = InStr(1, 网页 代码 $, "<") If 位置& = 0 Then '如果找不到 字符 “<”则证明整个寻找已结束 临时变量$ = 临时变量$ & " " & 网页 代码 $ Exit Do Else '找到 字符 “<”把它前面的 代码 截取保存 临时变量$ = 临时变量$ & " " & Left(网页 代码 $, 位置& - 1) '然后从“网页 代码 $ ”中清除已被 截取 部分和字符“<” 网页 代码 $ = Right(网页 代码 $, Len(网页 代码 $) - 位置&) '再寻找字符“>” 位置& = InStr(1, 网页 代码 $, ">") '找到字符“>”把它前面 代码 包括它 自身 全部清除 网页 代码 $ = Right(网页 代码 $, Len(网页 代码 $) - 位置&) End If Loop '“临时变量$”中存 放着 歌词,把它们全部赋给“txt歌词” txt歌词 = 临时变量$ End If End If End Sub vbzxnet 发表于 2004-12-16 00:53 引用(Trackback0) | 编辑 评论 发表评论 最后更新 用VB写歌词搜索程序 vb 实现漂亮的XP界面 游戏外挂制作 VB