今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 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: false,  | |
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);  | |
          } | |
})  | |
})  | |
    } |