之前修改过现在查词失败的同学请点这里
Lyrics Grabber2 可以说我理想中的歌曲下载插件,主要是它可以批量抓取更新歌词,又可以自定义抓取脚本方便扩展(见此HowToMakeProviderInPython),实在强大。不过还是有一些不足,比如找到的歌词没有给出来源(Provider),歌词服务器(Provier)不能更改优先级,还有就是出现多个歌词的匹配问题,既有多个服务器的,也有一个服务器的多个歌词的,希望能增加人工选择的选项。不过 Lyrics Grabber2刚好一年没更新了,再更新实在希望不大。
再者,现在Lyrics Grabber2里面的千千静听歌词抓取脚本(TTPlayer(LRC).py)是用不了的。我了解一下,把bug总结如下:
bug_1:36行
导致搜索失败的主要原因,现在千千静听搜索歌词的服务器变了
bug_2:103行
另一个导致搜索失败的原因,用来生成code的字符串应该用utf-8编码,而用minidom.parseString出来的字符串已经是utf-16le的了.
bug_3:114行
这一行应该是打错了. 条件应该是 c >= 0×80:
bug_4:42行
同样是编码问题,导致Levenshtein算法失效,因为比对的是两个不同编码的字符串。
由上图可以看出是,英文和简体没压力但繁(正)体中文就不行了。显然还需对title做些处理。通过对千千静听进行测试,发现千千静听对查询串的处理远不止 71 72 73 所在的那样。
大概做了下面这些过滤:
- 英文转小写
- 去括号,大中小还有全角的小括号
- 去除半角特殊符号,空格,逗号,etc。
- 去除全角特殊符号
- 繁(正)体转换为简体
繁(正)体转换为简体,找不到好的现成方案(针对unicode字符集uft-8编码的)。只能动用谷歌翻译的api了。没想到谷歌翻译倒工作的很好。不过毕竟是多一个网络请求,建议不需要的时候可以把它注释掉,以加快查询速度。其他过滤功能也可以根据情况去掉,已加强效率。FYI:脚本更改后立即生效,无须重启foobar2000的。
针对这些,增加了下面的新方法
s = string
# 英文转小写
s = s.lower()
# 去括号,大中小还有全角的小括号
s = re.sub('\(.*?\)|\[.*?]|{.*?}|(.*?)', '', s);
# 去除半角特殊符号,空格,逗号,etc。
s = re.sub('[ -/:-@[-`{-~]+', '', s);
# 繁(正)体转换为简体
s = translate(s,'zh-tw','zh-cn')
s = unicode(s, 'utf_8')
# 去除全角特殊符号
s = re.sub(u'[\u2014\u2018\u201c\u2026\u3001\u3002\u300a\u300b\u300e\u300f\u3010\u3011\u30fb\uff01\uff08\uff09\uff0c\uff1a\uff1b\uff1f\uff5e\uffe5]+','',s)
return s
url = ('http://ajax.googleapis.com/ajax/services/language/translate?' +
'v=1.0&q='+urllib.quote(text)+'&langpair='+lang_from+'%7C'+lang_to)
json = urllib.urlopen(url).read()
# return json;
p = re.compile('"translatedText":"(.+?)"')
m = p.search(json);
return m.group(1);
注意:谷歌翻译的api已经过期了,会导致查词失败,新的翻译api又要收费还很贵,见http://code.google.com/apis/language/translate/v2/pricing.html,坑爹呢这是。幸好还有Bing做后援。虽然不给力,但简繁转换还是没问题的。下面的代码改用Bing的翻译服务:
url = ('http://api.microsofttranslator.com/V2/Ajax.svc/Translate?' +
'appId=DE2A1CAA235EB52E611BC1243F16E4D301BB600E' +
'&from='+ lang_from +'&to='+ lang_to +
'&text='+urllib.quote(text))
json = urllib.urlopen(url).read()
p = re.compile('"(.+?)"') #對應必應
m = p.search(json);
return m.group(1);
这样,大部分流行歌曲特别是华人音乐,都可以表示毫无压力。

千千静听的大部分歌词都是简体的……

You Ain’t Goin Nowhere在千千静听里面也是Fault。
但是这样并不完美,毕竟是黑盒测试,比如 中千千静听的後(/u8C5F)字并没有转换到后 ,如下图:
最後の放課後 在千千静听中可以找到,花は桜 君は美し -instrumental- 则同样找不到
不过目前也就这能做到这样。
改好的脚本在此:TTPlayer(LRC).py
另外,乐辞的脚本也是不行的,顺手也改好了。Lyricist(LRC).py
btw:千千静听的歌词库,只要是热门的,流行的,出名的歌曲都挺全的,不知是从哪里来的。
Tags: foobar2000, Lyrics Grabber2, python, 歌词搜索



還是Failed,不太懂設定 …
能把你設定好的的Lyrics Grabber 2傳給我嗎…?
郵箱:(这里曾经有一个邮箱地址)
真是非常感谢。可是Lyrics Grabber2 最大的遗憾就是只有一条歌词的匹配啊……
736fecd7bdc83多谢博主免费分享,支持一个。X卧底祝博主事业蒸蒸日上。请关注一下我们http://www.sjxwodi007.com/谢谢~54
博主真的很强啊,能不能也传我一份修改的Lyrics Grabber2,感谢!
非常感谢!
顺便我想知道怎么才能把千千静听作为“歌词获取2”的默认歌词服务器,毕竟搜索歌词要进第三层目录选择千千静听还是很麻烦的。
确实是麻烦,不过我是一次性把歌词抓下来的
。把千千静听设为builtin_provider这个应该要改源码的,比较麻烦。
Thank you!~