【Listen 1】網易雲音樂歌單過長無法匯入
阿新 • • 發佈:2020-07-27
前言
喜歡的歌版權在不同平臺上,聽個歌還得切來切去太麻煩了。
以前一直用網易雲,歌曲推薦是真的好,但是逐漸網易雲變為“網抑雲”,加上廣告和新增一些花裡胡哨的功能讓我對它越來越沒法說”愛“,看著歌單逐漸變灰,真的無奈。
無意間發現一個開源的外掛Listen 1,整合了網易雲音樂,蝦米,QQ音樂,酷狗音樂,酷我音樂,Bilibili,咪咕音樂,很強大,而且沒廣告,介面清爽簡潔,支援其他平臺歌單匯入,並且歌曲沒版權自動換平臺,這就是我需要的,
但是我匯入歌單的時候其他都成功了,但是最大的一個歌單卻匯入失敗,一直轉圈圈,裡面有一千四百多首歌,應該是歌曲太多導致失敗
正文
解決方案(當前版本為2.10.0):
開啟下載的外掛資料夾,開啟檔案:.\js\provider\netease.js
找到第207行左右的”ng_parse_playlist_tracks“方法,修改為:
function ng_parse_playlist_tracks(playlist_tracks, hm, se, callback) { var list = playlist_tracks;//id集合 var count = Math.ceil(list.length / 1000);//資料分頁數向上取整 var nowCount = 0;//請求返回的資料數量 var playList = [];//儲存返回資料(未排序) /** * 下面為原方法 * @param {any} playlist_tracks * @param {any} hm * @param {any} se * @param {any} callback 更改為自己的callback * @param {any} index 新增欄位,因非同步請求返回順序不一致,所以增加標記返回下標 */ function ng_parse_playlist_tracks_getData(playlist_tracks, hm, se, callback, index) { const target_url = 'https://music.163.com/weapi/v3/song/detail'; const track_ids = playlist_tracks.map(i => i.id); const d = { c: '[' + track_ids.map(id => ('{"id":' + id + '}')).join(',') + ']', ids: '[' + track_ids.join(',') + ']' } const data = _encrypted_request(d); hm({ url: target_url, method: 'POST', data: se(data), headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }).then((response) => { //呼叫自定義callback return callback(index, response.data.songs.map(track_json => ({ id: `netrack_${track_json.id}`, title: track_json.name, artist: track_json.ar[0].name, artist_id: `neartist_${track_json.ar[0].id}`, album: track_json.al.name, album_id: `nealbum_${track_json.al.id}`, source: 'netease', source_url: `http://music.163.com/#/song?id=${track_json.id}`, img_url: track_json.al.picUrl, url: `netrack_${track_json.id}`, }))); }); } /** * 自定義callback * @param {any} index 當前資料下標 * @param {any} data 資料集 */ function cb(index, data) { nowCount++; playList[index] = data;//根據下標儲存返回資料 //資料全部返回時呼叫原方法返回資料 if (count == nowCount) { //陣列拼接成一個物件集合 var _playList = []; for (var i = 0; i < playList.length; i++) { _playList = _playList.concat(playList[i]); } return callback(null, _playList); } } //分頁並迴圈獲取資料 for (var i = 0; i < count; i++) { playlist_tracks = list.slice(i * 1000, (i + 1) * 1000); ng_parse_playlist_tracks_getData(playlist_tracks, hm, se, cb, i) } }
一千四百多首歌匯入成功:
最後
1、感謝Listen 1作者及其他熱愛分享的人
2、筆者前端技術一般般,程式碼不是很優美,歡迎各位指正
3、這個方法是網易雲的,qq音樂等其他平臺因為沒有合適的歌單,同時喜歡的歌就兩三首,搜尋歌名新增就行,絕對不是因為懶o(´^`)o,其他平臺想修改可以提供一個思路:
撥出控制檯,匯入歌單後如果卡死會在控制檯內新增一個報錯:
根據報錯內容就可以找到是哪個方法出了問題,可參照上面的方法進行修改