今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。
解决方法如下:
到 themes\shoka\source\js\_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs ('fancybox');,然后找到 56 行用下面的代码替换即可。
fetch: function(source) { | |
var list = [] | |
return new Promise(function(resolve, reject) { | |
source.forEach(function(raw) { | |
var meta = utils.parse(raw) | |
if(meta[0]) { | |
var skey = JSON.stringify(meta) | |
var playlist = store.get(skey) | |
if(playlist) { | |
// 自己修改 - start | |
var audioInfos = JSON.parse(playlist); | |
var neteaseStartUrl = "https://music.163.com/song/media/outer/url?id="; | |
if (meta[0] == "netease" && audioInfos && audioInfos.length>0 && !audioInfos[0].url.startsWith(neteaseStartUrl)) {// 如果是网易音乐就自己构建 url | |
jQuery.ajax({ | |
url: audioInfos[0].url, | |
type: 'get', | |
async: true, | |
timeout: 5000, | |
complete : function(XMLHttpRequest, status){ | |
if (XMLHttpRequest.status != 200) { | |
audioInfos.forEach(function(audioInfo) { | |
var id = audioInfo.url.substring(audioInfo.url.indexOf("id=")+3, audioInfo.url.indexOf("&auth=")); | |
audioInfo.url = neteaseStartUrl + id; | |
audioInfo.pic = "https://p3.music.126.net/Vji3PQJAZ2C7gS_6X51NFQ==/109951164723650033.jpg?param=200y200"; | |
}) | |
} | |
list.push.apply(list, audioInfos); | |
resolve(list); | |
} | |
}); | |
} else { | |
list.push.apply(list, audioInfos); | |
resolve(list); | |
} | |
// 自己修改 - end | |
} else { | |
fetch('https://api.i-meto.com/meting/api?server='+meta[0]+'&type='+meta[1]+'&id='+meta[2]+'&r='+ Math.random()) | |
.then(function(response) { | |
return response.json() | |
}).then(function(json) { | |
store.set(skey, JSON.stringify(json)) | |
list.push.apply(list, json); | |
resolve(list); | |
}).catch(function(ex) {}) | |
} | |
} else { | |
list.push(raw); | |
resolve(list); | |
} | |
}) | |
}) | |
} |