MusicBee 歌词插件(基于QQ音乐API)

article/2025/3/4 19:35:32

MusicBee 歌词插件(基于QQ音乐API)

MusicBee 是一个很棒的免费音乐管理、播放软件,支持通过插件来扩展功能。然而 MusicBee 在初始情况下仅对外国的几个歌词数据库进行检索,得到的结果一般是不带时间轴的纯文本歌词,并且检索成功率并不高。自己写咯。

效果截图

MusicBee歌词插件下载

GitHub链接
使用方法:下载后将所有文件复制到 MusicBee 目录下的 Plugins 文件夹内,重启 MusicBee,在首选项-插件中看到 GetLyrics 插件即成功启用。
在歌词界面 右键-重新搜索 可以查找歌词,默认在切歌时会查找一次,右键-查找下一个提供者 会在插件提供的歌词和内置的数据库查询结果中切换。

2017-8-3 更新

现在可以自己选择搜索结果了

MusicBee插件开发

获取模板

从这里下载MusicBee的插件开发模板。本文以C#为开发语言,熟悉VB的也可以去官网下载VB语言的插件开发模板,具体细节应该大同小异。官方并没有给出任何插件相关文档,所有API和要求都写在了模板里(偷懒,报警了!)。
下载解压应该得到类似的目录结构:

插件目录结构
用宇宙最强IDE打开 .csproj 的项目工程文件,其中 TestCSharpDll.cs 这个文件可以随意重命名。在VS中打开以后,可以看到我们主要需要改写的就是这个 TestCSharpDll.cs 文件。

基础信息改写

整个插件有一些基础信息可供定制,改写的位置在 TestCSharpDll.cs -> Initialise方法里面。大概长这样,注意看注释咯:

public PluginInfo Initialise(IntPtr apiInterfacePtr){mbApiInterface = new MusicBeeApiInterface();mbApiInterface.Initialise(apiInterfacePtr);about.PluginInfoVersion = PluginInfoVersion;about.Name = "GetLyrics";//你的插件的名字about.Description = "Get Lyrics From Internet";//插件描述about.Author = "Dixeran";//插件作者about.TargetApplication = "";   // current only applies to artwork, lyrics or instant messenger name that appears in the provider drop down selector or target Instant Messenger(不知道啥用,别改)about.Type = PluginType.LyricsRetrieval;//这个很重要,速览定义可以看到,这是一个枚举类型,决定了插件被调用的函数,我这里写的是提供歌词的插件,所以必须是这个值。about.VersionMajor = 1;  // your plugin version(插件版本号)about.VersionMinor = 0;about.Revision = 1;about.MinInterfaceVersion = MinInterfaceVersion;about.MinApiRevision = MinApiRevision;about.ReceiveNotifications = ReceiveNotificationFlags.DownloadEvents;about.ConfigurationPanelHeight = 0;   // height in pixels that musicbee should reserve in a panel for config settings. When set, a handle to an empty panel will be passed to the Configure functionreturn about;}

更改完毕以后,已经可以试着生成了!如果参数都正确的话,把生成的插件(三个文件)放到 MusicBee 安装目录的 Plugins 文件夹内,启动 MusicBee,在首选项->插件中应该可以看到刚刚生成的插件啦。

关键函数改写

插件要起作用,关键在于改写特定的被调函数并且返回正确的格式。例如这里是歌词插件,可以看到在代码中最下面有一个函数RetrieveLyrics(...),上面还有一大段注释,大概意思就是如果插件类型是PluginType.LyricsRetrieval,这个函数就会被调用,你提供的歌词以 string 对象返回,如果没有查到歌词,返回 null。函数调用提供了很多歌曲相关的参数,足够我们查找歌词了,接下来就是抓取QQ音乐的API并且把查询方法写入函数中。

using System.Net;
using System.IO;
using Newtonsoft.Json.Linq;
using System.Web;public string RetrieveLyrics(string sourceFileUrl, string artist, string trackTitle, string album, bool synchronisedPreferred, string provider){string SearchUrl = String.Format("http://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w={0} {1}&g_tk=5381&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0", trackTitle, artist);var request = (HttpWebRequest)WebRequest.Create(SearchUrl);var response = (HttpWebResponse)request.GetResponse();var SearchString = new StreamReader(response.GetResponseStream()).ReadToEnd();SearchString = SearchString.Replace("callback(", "");SearchString = SearchString.Replace("})", "}");//删除回调中的多余字符JObject SearchResult = JObject.Parse(SearchString);//解析搜索结果JArray SongList = (JArray)SearchResult["data"]["song"]["list"];//搜索结果曲目列表int ID = SongList[0]["id"].ToObject<int>();//从曲目列表得到歌曲唯一id(默认首选)var LyricsUrl = String.Format("http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric.fcg?nobase64=1&musicid={0}&callback=jsonp1&g_tk=5381&jsonpCallback=jsonp1&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0", ID.ToString());var Lyrequest = (HttpWebRequest)WebRequest.Create(LyricsUrl);Lyrequest.Referer = "https://y.qq.com/";//QQ音乐查询歌词必带var Lyresponse = (HttpWebResponse)Lyrequest.GetResponse();var LyricsRawString = new StreamReader(Lyresponse.GetResponseStream()).ReadToEnd();LyricsRawString = LyricsRawString.Replace("jsonp1(", "");LyricsRawString = LyricsRawString.Replace("})", "}");//删除回调中的多余字符JObject LyricsResult = JObject.Parse(LyricsRawString);//解析得到的JSONint Lycode = LyricsResult["retcode"].ToObject<int>();//判断是否存在歌词if(Lycode != 0){return null;}else{string LyricsString = LyricsResult["lyric"].ToObject<string>();//解析JSON中的歌词LyricsString = HttpUtility.HtmlDecode(LyricsString);return LyricsString;}}

很简短的代码噢,为了解析JSON额外引入了 Newtonsoft.Json 这个库。只要搞懂了下面这个QQ音乐API的解析,代码的逻辑就很明显啦。

QQ音乐API分析

使用的是QQ音乐网页版的API。通过使用Fiddler抓包可以看到,搜索歌曲的时候调用的是

http://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w={关键字}&g_tk=5381&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0

返回的结构大概是这样的:

Callback({json
})

对回调中的json进行解析,可以得到类似的结构
QQ音乐搜索返回
候选歌曲的列表在data-song-list这个列表,list中的每一个item都是这样的结构

候选曲目json结构
通过这些数据,我们可以做进一步的校验,判断这个item是不是我们所需的音乐;而获取对应歌词的关键是其中的”id”字段,接下来要通过歌曲id请求歌词。

请求歌词的地址是

http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric.fcg?nobase64=1&musicid={歌曲id}&callback=jsonp1&g_tk=5381&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0

请求的时候 Refer 必须为https://y.qq.com/,返回的数据类似这样:

Callback({json
})

解析其中的json,”lyric”字段就是我们所需的歌词(经过HtmlEncode)。于是通过HtmlDecode()方法即可得到最终的歌词。


http://chatgpt.dhexx.cn/article/r3xUnvhn.shtml

相关文章

php开发个人音乐站 QQ音乐api

做位一名优秀的程序员 工作时候戴耳机是不可避免的 然后好听的歌又需要会员 下面小编就给大家简绍我自己听歌的神器 话不多说 开撸&#xff01; 一&#xff0c;要想获得对应的歌曲肯定要先获得歌曲的id,图片id等 下面主要讲解如何获取歌曲播放id&#xff1b; 1.搜索歌曲API&a…

python调用QQ音乐API

python调用QQ音乐API 1. 音乐搜索接口、其他接口 2. 获取token 3. 拼接播放地址 先上一份代码&#xff1a; import requests import pprint import json from selenium import webdriver# 音乐搜索接口p, n, w 1, 5, 碰 url_1 https://c.y.qq.com/soso/fcgi-bin/client_…

php计算QQ音乐guid,QQ音乐API分析2017

官网提供API 说明&#xff1a;此API主要针对移动端直接调用QQ音乐API用&#xff0c;API只能在QQAPP内执行&#xff0c;上线时间尚短。 http://y.qq.com/m/api/api.html 自己分析的API 说明&#xff1a; 根据官网https://y.qq.com/分析的API&#xff0c;经过测试&#xff0c;可以…

java qq音乐接口 api,GitHub - yan123zi/qqMusicApi: qq音乐Api接口

qq音乐 API qq音乐 Node.js API service QQ音乐API koa2 版本, 通过Web网页版请求QQ音乐接口数据, 有问题请提 issue 当前代码仅共学习&#xff0c;不可做商业用途 API结构图 环境要求 因为本项目采用的是koa2, 所以请确保你的node版本是7.6.0 node -v &#x1f4e6; 安装 git…

QQ音乐API整理

最近准备用vue做个音乐播放器&#xff0c;网上找了找音乐API&#xff0c;看了一圈&#xff0c;还是QQ音乐最合适&#xff0c;这里做个整理 这篇博客已经过时了&#xff0c;下面的不用看了。。。。 歌曲搜索 接口地址 var num 3,name 王菲,urlString http://s.music.qq.co…

网易云音乐api、QQ音乐api、黑马电商api、小说api、漫画api接口

网易云音乐接口文档 基础访问地址&#xff08;api的跟地址&#xff09;&#xff1a;https://autumnfish.cn/ 接口文档地址&#xff1a;https://binaryify.github.io/NeteaseCloudMusicApi/ QQ音乐接口文档 基础访问地址&#xff08;api的跟地址&#xff09;&#xff1a;http…

QQ音乐API

** QQ音乐API ** 效果图: URL: 通过这条接口查找到这10条歌曲每一条的Songmid https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=10&w=邓紫棋; 这条链接获取到QQ音乐当前使用的地址(QQ音乐不定期换地址,本人跳过这…

2019最新版QQ音乐api调用(原创)

下载QQ音乐任意歌曲方法&#xff1a; 1.首先在QQ音乐任意播放页面 2.进入开发者模式按F12即可 3.选择network&#xff0c;按ctrlR进行筛选多媒体文件 4.优先选择大小排序右击最大的多媒体文件出来快捷菜单&#xff0c;选择如下图的选项即可进入歌曲播放页面 5.如下链接就是播放…

QQ音乐api 最新版,亲测可用

关注公众号&#xff0c;每天都能领红包 最近这个api出现了403问题&#xff0c;已经找到原因了 原因是 歌曲不能再以第一参数当id了 要以倒数第5个 如以上的例子 002qU5aY3Qu24y当id&#xff0c;而且前面要加C100&#xff0c;完整的就是 http://ws.stream.qqmusic.qq.com/C1000…

Java版本中最好用的网易云音乐、qq音乐api请求工具,你还在忙于如何使用java调音乐api?来看下这里的实现

去年闲着没事干&#xff0c;就封装了下面QQ和Netease音乐的 api &#xff0c;目的就是通过java可以更便捷的调用&#xff0c;网易云音乐或者qq音乐的api&#xff0c;另外每个接口我都加了注释&#xff0c;对于不懂的参数&#xff0c;通过接口上的注释直接可以查看&#xff0c;不…

QQ音乐API爬取全过程

QQ音乐API爬取全过程 1. 前序&#xff1a; 在以前的QQ音乐的API爬取中&#xff0c;是非常容易的&#xff0c;采用的是jsonp的请求方式&#xff0c;但现在QQ音乐请求已经全部改成XHR的ajax的方式发送请求&#xff0c;所以要爬取QQ音乐的数据就需要破解QQ音乐发送请求的参数。 …

QQ音乐API分析之-加密参数分析(sign计算)

QQ音乐API加密参数分析 1、背景2、QQ音乐sign计算3、Java代码实现4、总结 1、背景 不知道什么时候开始&#xff0c;各家音乐APP都开始对API进行加密&#xff0c;最近一段时间对六大音乐平台的加密算法进行了研究&#xff0c;逆向了网页端、安卓端等等&#xff0c;已经掌握了各…

微信小程序使用QQ音乐API完整实例

微信小程序使用QQ音乐API完整实例 一、QQ音乐常用API接口&#xff1a;1.1、音乐搜索接口&#xff1a;1.2、最新音乐排行榜top1001.3. 随机推荐 二、请求数据格式&#xff08;以搜索为例&#xff09;三、播放链接&#xff08;重点&#xff09;3.1、获取歌曲信息3.2 获取token3.3…

音乐播放器之QQ音乐最新api,亲测可用

大家好&#xff0c;前段时间重写了自己的音乐播放器&#xff0c;源码放在github上&#xff0c;源码地址和项目地址下面都有&#xff0c;如果喜欢记得star一下哈。 由于之前给大家分享的api虽然可以用&#xff0c;但是版本太旧了&#xff0c;很多也没有了歌词&#xff0c;今天博…

步数精灵v3.0运动安卓版

软件介绍: 一键修改微信运动、支付宝运动的步数&#xff0c;让你在家足不出户也能走几万步&#xff0c;天天霸占好友排行榜首位&#xff01; 软件预览图&#xff1a; 软件版本号&#xff1a;3.0 软件是否收费&#xff1a;免费软件/共享软件 运行环境&#xff1a;安卓 软件…

艾出行广告精灵挂机源码+对接码支付即时到账+充值系统+推广下级系统+封装app

简介&#xff1a; 安装说明&#xff1a;请使用win系统 apache php5.6 mysql5.6 进行安装。 1、上传到网站根目录 2、用phpMyadmin导入数据库文件.sql 3、修改数据库链接文件 /APP/Conf/config.php &#xff08;记得不要用记事本修改&#xff0c;否则可能会出现验证码显示不了问…

支付平台架构:终端安全技术实现

前蚂蚁集团宣布即将IPO之后&#xff0c;9月11日晚间&#xff0c;以金融支付起家的京东数科也要上市了。近年来&#xff0c;第三方支付业务的资金规模不断扩大&#xff0c;支付业务量稳步增长&#xff0c;“第三方支付”及“移动支付”已成为年度搜索热词&#xff0c;支付平台作…

键盘精灵_键盘

键盘精灵 They folks over at DasKeyboard loaned me a reviewers copy of their totally blank keyboard about three weeks ago and Ive been typing on it since. 大约在三周前&#xff0c; DasKeyboard的同事们借给了我审阅他们完全空白的键盘的副本&#xff0c;此后我一直…

Telink ble mesh天猫精灵应用

文章目录 1 前言2 完美对接天猫精灵平台2.1 创建新产品2.1.1 添加产品类型2.1.2 添加产品信息2.1.3 添加产品功能 2.2 设置人机交互2.2.1 设置控制口令2.2.2 添加产品展示图2.2.3 添加配网指导2.2.4 添加升级指导2.2.5 添加控制面板 2.3 选择品牌模组2.4 下载并保管好三元组2.5…

[超详细] 2021支付宝集五福【攻略】来了-附自动化脚本

一年一度的支付宝集五福在2月1号的凌晨开始了&#xff0c;虽然一年比一年瓜分的少&#xff0c;但不知不觉集福卡成了过年最佳的消遣娱乐方式了。活动从2月1日开始至1月11日结束。 扫下面这个福字&#xff0c;必得沾福卡&#xff01; 零、额外福利 额外福卡二维码扫福器下载地址…