你好我正在做一个关于音乐播放器的项目。我添加了一个功能,当音乐播放器改变歌曲时,有一个浏览器将重定向到该歌曲的歌词。
但是有一个问题,我正在使用谷歌感觉幸运的api (http://google.com/search?sourceid=navclient&btnI=1&q=)
,这是我的代码(我使用的是visual basic):
Private Sub Player_CurrentItemChange(sender As Object, e As AxWMPLib._WMPOCXEvents_CurrentItemChangeEvent) Handles Player.CurrentItemChange
If My.Settings.lyricenable = True Then
Dim Artist As String = Player.Ctlcontrols.currentItem.getItemInfo("Artist")
Dim Title As String = Player.Ctlcontrols.currentItem.getItemInfo("Title")
lyricsbrowser.Navigate("http://google.com/search?sourceid=navclient&btnI=1&q=" + Title + "+" + Artist + "+Lyrics")
End If
End Sub
(lyricenable是用户可以启用自动歌词查找或取消它的设置)
所以我运行该程序,我发现其中一些有效(例如http://google.com/search?sourceid=navclient&btnI=1&q=Pompeii+Bastille+lyrics
,这会转到http://www.azlyrics.com/lyrics/bastille/pompeii.html)
但有些人向Google展示了所有搜索结果(例如https://www.google.fr/search?sourceid=navclient&btnI=1&q=Problem+Pentatonix+Lyrics)
问题出在哪里?我是VB的新手,所以我知道这些。告诉我是否有更好的方法。谢谢!
(抱歉,stackoverfow只允许我有2个链接,所以我阻止引用一些链接)
答案 0 :(得分:0)
您可以尝试以下几种方法:
正如评论中所提到的,最有效的方法可能是使用歌词API,例如http://api.wikia.com/wiki/LyricWiki_API。如果你不是一个经验丰富的开发人员,那么在VB.Net中这很难做到,但是有可能使用WebRequest()。
您可以使用其他搜索引擎 - Bing曾经拥有最佳匹配功能,但我认为它已被弃用。 DuckDuckGo(顺便说一句伟大的搜索引擎),有一个你可以使用的即时答案API(https://duckduckgo.com/api)。
使用内部网站搜索,该搜索仅在一个网站上搜索歌词。这只是找到一个歌词网站的问题。如果网站有内置网站搜索,您可以使用该搜索,或为其创建Google自定义搜索(请参阅https://support.google.com/customsearch/answer/2630963?hl=en
)。
或者,如果您知道格式,只需转到特定网站的直接网址即可。您可以使用正则表达式(RegEx)正确格式化歌曲的URL,并在If语句中尝试多种格式。
在VB.Net中可能只需要三个和四个,但它们并不可靠。我想你总是可以将多种方法结合起来作为后备。希望有所帮助。