From 89ab94b276724d0d924448b7ea792c73401c8c17 Mon Sep 17 00:00:00 2001 From: TRAE Bot Date: Sun, 5 Jul 2026 18:56:45 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20kg=20use=20mobilecdn=20(has=20=E5=91=A8?= =?UTF-8?q?=E6=9D=B0=E4=BC=A6=E7=89=88=E6=9D=83);=20wy=20use=20weapi=20clo?= =?UTF-8?q?udsearch;=20add=20hires/master=20quality=20labels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 聆澜/Koneko_聆澜_GIT音源_v0.1.3_QZv2.js | 4 +- 聆澜/Koneko_聆澜_QQ音乐_v0.1.3_QZv2.js | 4 +- 聆澜/Koneko_聆澜_咪咕音乐_v0.1.3_QZv2.js | 4 +- 聆澜/Koneko_聆澜_网易云音乐_v0.1.3_QZv2.js | 50 +++++++++--------- 聆澜/Koneko_聆澜_酷我音乐_v0.1.3_QZv2.js | 4 +- 聆澜/Koneko_聆澜_酷狗音乐_v0.1.3_QZv2.js | 59 +++++++++------------- 6 files changed, 63 insertions(+), 62 deletions(-) diff --git a/聆澜/Koneko_聆澜_GIT音源_v0.1.3_QZv2.js b/聆澜/Koneko_聆澜_GIT音源_v0.1.3_QZv2.js index e0a34fc..aaf4b52 100644 --- a/聆澜/Koneko_聆澜_GIT音源_v0.1.3_QZv2.js +++ b/聆澜/Koneko_聆澜_GIT音源_v0.1.3_QZv2.js @@ -244,7 +244,9 @@ var pluginInfo = { quality: [ { name: '标准音质', ui: '标', id: '128k' }, { name: '高品音质', ui: 'HQ', id: '320k' }, - { name: '无损音质', ui: 'SQ', id: 'flac' } + { name: '无损音质', ui: 'SQ', id: 'flac' }, + { name: '高解析度无损(Hi-Res)', ui: 'HR', id: 'hires' }, + { name: '至臻母带', ui: 'MT', id: 'master' } ], supportFunc: ['search_song', 'search_playlist', 'playlist', 'album', 'lyric'] } diff --git a/聆澜/Koneko_聆澜_QQ音乐_v0.1.3_QZv2.js b/聆澜/Koneko_聆澜_QQ音乐_v0.1.3_QZv2.js index fd50a2c..4a106b2 100644 --- a/聆澜/Koneko_聆澜_QQ音乐_v0.1.3_QZv2.js +++ b/聆澜/Koneko_聆澜_QQ音乐_v0.1.3_QZv2.js @@ -327,7 +327,9 @@ var pluginInfo = { quality: [ { name: '标准音质', ui: '标', id: '128k' }, { name: '高品音质', ui: 'HQ', id: '320k' }, - { name: '无损音质', ui: 'SQ', id: 'flac' } + { name: '无损音质', ui: 'SQ', id: 'flac' }, + { name: '高解析度无损(Hi-Res)', ui: 'HR', id: 'hires' }, + { name: '至臻母带', ui: 'MT', id: 'master' } ], supportFunc: ['search_song', 'search_playlist', 'playlist', 'album', 'lyric'] } diff --git a/聆澜/Koneko_聆澜_咪咕音乐_v0.1.3_QZv2.js b/聆澜/Koneko_聆澜_咪咕音乐_v0.1.3_QZv2.js index 011a40c..f38d77a 100644 --- a/聆澜/Koneko_聆澜_咪咕音乐_v0.1.3_QZv2.js +++ b/聆澜/Koneko_聆澜_咪咕音乐_v0.1.3_QZv2.js @@ -212,7 +212,9 @@ var pluginInfo = { quality: [ { name: '标准音质', ui: '标', id: '128k' }, { name: '高品音质', ui: 'HQ', id: '320k' }, - { name: '无损音质', ui: 'SQ', id: 'flac' } + { name: '无损音质', ui: 'SQ', id: 'flac' }, + { name: '高解析度无损(Hi-Res)', ui: 'HR', id: 'hires' }, + { name: '至臻母带', ui: 'MT', id: 'master' } ], supportFunc: ['search_song', 'search_playlist', 'playlist', 'album', 'lyric'] } diff --git a/聆澜/Koneko_聆澜_网易云音乐_v0.1.3_QZv2.js b/聆澜/Koneko_聆澜_网易云音乐_v0.1.3_QZv2.js index 057fe82..6667540 100644 --- a/聆澜/Koneko_聆澜_网易云音乐_v0.1.3_QZv2.js +++ b/聆澜/Koneko_聆澜_网易云音乐_v0.1.3_QZv2.js @@ -143,21 +143,23 @@ function formatPlayCount(count) { // ===== 搜索实现 ===== function musicSearch(str, page, limit) { - var form = eapi('/api/search/song/list/page', { - keyword: str, - needCorrect: '1', - channel: 'typing', + var form = weapi({ + s: str, + type: 1, + limit: limit, offset: limit * (page - 1), - scene: 'normal', - total: page == 1, - limit: limit + total: page == 1 }); - return requestUrl('http://interface3.music.163.com/eapi/search/song/list/page', 'POST', { + return requestUrl('https://music.163.com/weapi/cloudsearch/get/web', 'POST', { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 'Origin': 'https://music.163.com', + 'Referer': 'https://music.163.com', 'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': WY_COOKIE }, querystring.stringify(form)).then(function(res) { + if (typeof res.body === 'string') { + try { res.body = JSON.parse(res.body); } catch (e) { return null; } + } return res.body; }); } @@ -167,24 +169,23 @@ function handleSearchResult(rawList) { var list = []; for (var i = 0; i < rawList.length; i++) { var item = rawList[i]; - if (!item.baseInfo || !item.baseInfo.simpleSongData) continue; - var s = item.baseInfo.simpleSongData; var qualities = {}; - if (s.l && s.l.size) qualities['128k'] = sizeFormate(s.l.size); - if (s.h && s.h.size) qualities['320k'] = sizeFormate(s.h.size); - if (s.sq && s.sq.size) qualities['flac'] = sizeFormate(s.sq.size); - var picUrl = s.al && s.al.picUrl ? s.al.picUrl : ''; + if (item.l && item.l.size) qualities['128k'] = sizeFormate(item.l.size); + if (item.h && item.h.size) qualities['320k'] = sizeFormate(item.h.size); + if (item.sq && item.sq.size) qualities['flac'] = sizeFormate(item.sq.size); + if (item.hr && item.hr.size) qualities['hires'] = sizeFormate(item.hr.size); + var picUrl = item.al && item.al.picUrl ? item.al.picUrl : ''; list.push({ - id: String(s.id), - name: s.name, - artists: formatSingerName(s.ar, 'name'), + id: String(item.id), + name: item.name || '', + artists: formatSingerName(item.ar, 'name'), source: 'wy', pic: picUrl, mPic: picUrl, sPic: picUrl, - albumName: s.al && s.al.name ? s.al.name : '', - albumId: String(s.al && s.al.id ? s.al.id : ''), - interval: String(formatPlayTime((s.dt || 0) / 1000) || '--/--'), + albumName: item.al && item.al.name ? item.al.name : '', + albumId: String(item.al && item.al.id ? item.al.id : ''), + interval: String(formatPlayTime((item.dt || 0) / 1000) || '--/--'), qualities: qualities }); } @@ -197,9 +198,10 @@ function search(str, page, limit, retryNum) { if (!limit) limit = 30; return musicSearch(str, page, limit).then(function(result) { if (!result || result.code !== 200) return search(str, page, limit, retryNum); - var list = handleSearchResult(result.data && result.data.resources ? result.data.resources : []); + var songs = (result.result && result.result.songs) ? result.result.songs : []; + var list = handleSearchResult(songs); if (!list || list.length === 0) return search(str, page, limit, retryNum); - var total = result.data && result.data.totalCount ? result.data.totalCount : 0; + var total = result.result && result.result.songCount ? result.result.songCount : 0; return { list: list, allPage: Math.ceil(total / limit), @@ -644,7 +646,9 @@ var pluginInfo = { quality: [ { name: '标准音质', ui: '标', id: '128k' }, { name: '高品音质', ui: 'HQ', id: '320k' }, - { name: '无损音质', ui: 'SQ', id: 'flac' } + { name: '无损音质', ui: 'SQ', id: 'flac' }, + { name: '高解析度无损(Hi-Res)', ui: 'HR', id: 'hires' }, + { name: '至臻母带', ui: 'MT', id: 'master' } ], supportFunc: ['search_song', 'search_playlist', 'playlist', 'album', 'lyric'] } diff --git a/聆澜/Koneko_聆澜_酷我音乐_v0.1.3_QZv2.js b/聆澜/Koneko_聆澜_酷我音乐_v0.1.3_QZv2.js index db670f0..cfa3ae2 100644 --- a/聆澜/Koneko_聆澜_酷我音乐_v0.1.3_QZv2.js +++ b/聆澜/Koneko_聆澜_酷我音乐_v0.1.3_QZv2.js @@ -225,7 +225,9 @@ var pluginInfo = { quality: [ { name: '标准音质', ui: '标', id: '128k' }, { name: '高品音质', ui: 'HQ', id: '320k' }, - { name: '无损音质', ui: 'SQ', id: 'flac' } + { name: '无损音质', ui: 'SQ', id: 'flac' }, + { name: '高解析度无损(Hi-Res)', ui: 'HR', id: 'hires' }, + { name: '至臻母带', ui: 'MT', id: 'master' } ], supportFunc: ['search_song', 'search_playlist', 'playlist', 'album', 'lyric'] } diff --git a/聆澜/Koneko_聆澜_酷狗音乐_v0.1.3_QZv2.js b/聆澜/Koneko_聆澜_酷狗音乐_v0.1.3_QZv2.js index 9fcef4a..1f09684 100644 --- a/聆澜/Koneko_聆澜_酷狗音乐_v0.1.3_QZv2.js +++ b/聆澜/Koneko_聆澜_酷狗音乐_v0.1.3_QZv2.js @@ -79,29 +79,10 @@ function stripEm(s) { } function musicSearch(str, page, limit) { - var url = 'http://songsearch.kugou.com/song_search_v2?keyword=' + encodeURIComponent(str) + '&page=' + page + '&pagesize=' + limit + '&showtype=10&utf8=1'; + var url = 'http://mobilecdn.kugou.com/api/v3/search/song?showtype=14&highlight=&pagesize=' + limit + '&page=' + page + '&keyword=' + encodeURIComponent(str); return requestUrl(url, 'GET', { 'User-Agent': 'Mozilla/5.0 (Linux; Android 10)' }).then(function(res) { - if (res.body && res.body.data && res.body.data.lists) return res.body.data; - // fallback to mobilecdn http - var url2 = 'http://mobilecdn.kugou.com/api/v3/search/song?showtype=14&pagesize=' + limit + '&page=' + page + '&keyword=' + encodeURIComponent(str); - return requestUrl(url2, 'GET', { 'User-Agent': 'Mozilla/5.0 (Linux; Android 10)' }).then(function(res2) { - if (res2.body && res2.body.data && res2.body.data.info) { - // map mobilecdn format to songsearch format - var info = res2.body.data.info; - var mapped = []; - for (var i = 0; i < info.length; i++) { - var it = info[i]; - mapped.push({ - FileName: it.songname, SingerName: it.singername, AlbumName: it.album_name, - AlbumID: it.album_id, FileHash: it.hash, Image: it.img, - FileSize: it.filesize, HQFileSize: it.sqfilesize, SQFileSize: it.flacfilesize, - Duration: it.duration - }); - } - return { lists: mapped, total: res2.body.data.total || mapped.length * 10 }; - } - throw new Error('kg search failed'); - }); + if (res.body && res.body.data && res.body.data.info) return res.body.data; + throw new Error('kg search failed'); }); } @@ -111,25 +92,31 @@ function handleSearchResult(rawList) { for (var i = 0; i < rawList.length; i++) { var item = rawList[i]; var qualities = {}; - if (item.FileSize) qualities['128k'] = sizeFormate(item.FileSize); - if (item.HQFileSize) qualities['320k'] = sizeFormate(item.HQFileSize); - if (item.SQFileSize) qualities['flac'] = sizeFormate(item.SQFileSize); - var picUrl = item.Image || item.AblumPic || item.AlbumImage || ''; - if (picUrl) picUrl = picUrl.replace('{size}', '480'); - if (picUrl && picUrl.indexOf('http') !== 0) picUrl = 'https://' + picUrl.replace(/^\/+/, ''); - var name = stripEm(item.FileName || item.SongName || ''); - var singerName = stripEm(item.SingerName || ''); + if (item.filesize) qualities['128k'] = sizeFormate(item.filesize); + if (item['320filesize']) qualities['320k'] = sizeFormate(item['320filesize']); + if (item.sqfilesize) qualities['flac'] = sizeFormate(item.sqfilesize); + // 封面:用 album_id 拼 kugou 封面 URL + var albumId = String(item.album_id || ''); + var picUrl = ''; + if (albumId) picUrl = 'http://imge.kugou.com/stdmusic/150/' + albumId + '.jpg'; + var name = stripEm(item.songname || item.filename || ''); + var singerName = stripEm(item.singername || ''); + // filename 格式 "歌手 - 歌名",如果没有 songname 就从 filename 拆 + if (!name && item.filename) { + var parts = String(item.filename).split(' - '); + name = stripEm(parts[1] || parts[0]); + } list.push({ - id: String(item.FileHash || item.HQFileHash || item.SQFileHash || ''), + id: String(item.hash || ''), name: name, artists: singerName, source: 'kg', pic: picUrl, mPic: picUrl, sPic: picUrl, - albumName: stripEm(item.AlbumName || ''), - albumId: String(item.AlbumID || ''), - interval: String(formatPlayTime(item.Duration) || '--/--'), + albumName: stripEm(item.album_name || ''), + albumId: albumId, + interval: String(formatPlayTime(item.duration) || '--/--'), qualities: qualities }); } @@ -240,7 +227,9 @@ var pluginInfo = { quality: [ { name: '标准音质', ui: '标', id: '128k' }, { name: '高品音质', ui: 'HQ', id: '320k' }, - { name: '无损音质', ui: 'SQ', id: 'flac' } + { name: '无损音质', ui: 'SQ', id: 'flac' }, + { name: '高解析度无损(Hi-Res)', ui: 'HR', id: 'hires' }, + { name: '至臻母带', ui: 'MT', id: 'master' } ], supportFunc: ['search_song', 'search_playlist', 'playlist', 'album', 'lyric'] }