科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用VB写歌词搜索程序

用VB写歌词搜索程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

上网,听歌,再加上一杯香茗,真是悠哉游哉。听到兴致之时,自然想看歌词。音乐极限网站就提供了歌词搜索。我想,作为编程爱好者的我们,能不能在程序中实现歌词搜索呢?经过一番研究,发觉其实也很简单。

作者:喻青峰 来源:soft6 2008年5月15日

关键字: 程序 搜索 VB vb.net Windows

  • 评论
  • 分享微博
  • 分享邮件
网,听歌,再加上一杯香茗,真是悠哉游哉。听到兴致之时,自然想看歌词。音乐极限网站就提供了歌词搜索。我想,作为编程爱好者的我们,能不能在程序中实现歌词搜索呢?经过一番研究,发觉其实也很简单。

  首先看看音乐极限歌词搜索是怎样进行的。比如搜索张学友的《偷心》,我发觉音乐极限有一种歌词搜索方式是这样的:只要在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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章