FB2000桌面歌词插件ESLyric新增歌词搜索来源
### FB2000桌面歌词插件ESLyric新增歌词搜索来源详解 #### 插件概述 FB2000是一款流行的音乐播放器软件,它不仅支持多种音频格式的播放,还提供了丰富的插件功能来扩展其核心能力。其中,ESLyric插件就是专门为FB2000设计的一款桌面歌词显示插件。该插件可以自动从互联网上搜索并下载歌曲的歌词,并在播放时同步显示,极大地提升了用户的听歌体验。 #### 新增功能:QQ音乐作为歌词搜索来源 近期,ESLyric插件进行了更新,增加了对QQ音乐的支持,将其作为歌词搜索的一个新来源。这一更新使得ESLyric能够更加全面地覆盖各种音乐资源,提高了歌词查找的成功率和准确性。 #### 核心代码分析 以下是对新增功能的核心代码进行的详细解读: ##### 函数定义与初始化 1. **初始化ActiveX对象**: - `var ado = new ActiveXObject("ADODB.Stream");` - `var xmlDoc = new ActiveXObject("MSXML.DOMDocument");` - `var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.6.0");` 这些代码行初始化了用于网络请求、XML解析等操作的ActiveX对象。其中,`ADO.Stream`用于处理流数据,`MSXML.DOMDocument`用于解析XML文档,而`Msxml2.XMLHTTP.6.0`则用于发起HTTP请求。 2. **服务器URL定义**: - `var Q_SERVER_URL = "http://qqmusic.qq.com/fcgi-bin/qm_getLyricId.fcg?";` - `var R_SERVER_URL = "http://music.qq.com/miniportal/static/lyric/";` 这里定义了两个服务器的URL地址,`Q_SERVER_URL`用于获取歌曲的ID,而`R_SERVER_URL`则用于根据歌曲ID获取具体的歌词内容。 3. **过滤字符定义**: - `var QQFilter = "_-*.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";` 定义了一个字符串`QQFilter`,用于过滤掉某些特殊字符,确保请求参数的正确性。 4. **函数定义**: - `function get_my_name() { return "QQ"; }` - `function get_version() { return "0.0.1"; }` - `function get_author() { return "ohyeahyeah"; }` 这三个函数分别返回插件的名称、版本号以及作者信息。 5. **搜索逻辑实现**: - `function start_search(info, callback) { ... }` 这个函数是整个搜索逻辑的核心部分,接受一个包含歌曲信息的对象`info`以及回调函数`callback`作为参数。它负责构建正确的URL参数、发送HTTP请求、解析返回的数据,并最终将找到的歌词传递给回调函数处理。 ##### 请求参数构造 1. **构造请求URL**: - `url = QQQueryString(artist, title);` 使用艺术家名`artist`和歌曲名`title`构造请求URL。 2. **发送GET请求**: - `xmlhttp.open("GET", url, false);` - `xmlhttp.send();` 发送一个同步GET请求至QQ音乐API接口。 3. **处理响应**: - 如果请求成功(`xmlhttp.readyState == 4 && xmlhttp.status == 200`),则进一步解析返回的XML数据。 - 使用`xmlDoc.loadXML(ret);`加载响应体中的XML数据。 4. **提取歌曲ID**: - `var lrc = xmlDoc.getElementsByTagName("songinfo");` - `var name = xmlDoc.getElementsByTagName("name");` - `var singer = xmlDoc.getElementsByTagName("singername");` 通过`getElementsByTagName`方法从XML文档中提取出歌曲的信息。 5. **构建歌词对象**: - 遍历提取到的歌曲信息,构建一个包含歌曲ID、艺术家名和歌曲名的数组。 6. **获取歌词内容**: - 根据提取到的歌曲ID再次发起GET请求获取歌词文本。 #### 总结 通过对新增功能的具体实现细节的深入分析,我们可以看到ESLyric插件是如何通过调用QQ音乐API来增加歌词搜索来源的。这一功能的添加不仅扩展了ESLyric插件的功能范围,也提高了歌词搜索的准确性和覆盖率,为用户提供了一个更加完整且便捷的音乐播放体验。
//============QQ Music Source For ESLyric============
//===============ohyeahyeah 2014-10-14===============
//===================================================
var ado = new ActiveXObject("ADODB.Stream");
var xmlDoc = new ActiveXObject("MSXML.DOMDocument");
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.6.0");
var Q_SERVER_URL = "http://qqmusic.qq.com/fcgi-bin/qm_getLyricId.fcg?";
var R_SERVER_URL = "http://music.qq.com/miniportal/static/lyric/";
var QQFilter = " _-*.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
function get_my_name()
{
return "QQÒôÀÖ";
}
function get_version()
{
return "0.0.1";
}
function get_author()
{
return "ohyeahyeah";
}
function start_search(info,callback)
{
var title = info.Title;
var artist = info.Artist;
url = QQQueryString(artist,title);
try {
xmlhttp.open("GET",url,false);
xmlhttp.send();
} catch (e) {
return;
}
var new_lyric = fb.CreateLyric();
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
//parse HTML
var ret = A2U(xmlhttp.responseBody);
xmlDoc.loadXML(ret);
var songid = [];
var lrc = xmlDoc.getElementsByTagName("songinfo");
var name = xmlDoc.getElementsByTagName("name");
var singer = xmlDoc.getElementsByTagName("singername");
for(var i=0;i<lrc.length;i++){
songid[i] = {
I:lrc[i].getAttribute("id"),
A:decodeURI(singer[i].childNodes[0].text).replace(/[-/:-@[-`{-~/+]+/g, " "),
T:decodeURI(name[i].childNodes[0].text).replace(/[-/:-@[-`{-~/+]+/g, " ")
};
//fb.trace(i + ': ' + decodeURI(singer[i].childNodes[0].text).replace(/[-/:-@[-`{-~/+]+/g, " ") + " - " + decodeURI(name[i].childNodes[0].text).replace(/[-/:-@[-`{-~/+]+/g, " "));
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Arduino和Firebase的智能家庭管理系统NodeSmartHome.zip
- (源码)基于C++的East Zone DSTADSO Robotics Challenge 2019机器人控制系统.zip
- (源码)基于Arduino平台的焊接站控制系统.zip
- (源码)基于ESPboy系统的TZXDuino WiFi项目.zip
- (源码)基于Java的剧场账单管理系统.zip
- (源码)基于Java Swing的船只资料管理系统.zip
- (源码)基于Python框架的模拟购物系统.zip
- (源码)基于C++的图书管理系统.zip
- (源码)基于Arduino的简易温度显示系统.zip
- (源码)基于Arduino的智能电动轮椅系统.zip