From 84a895cfd5d166d2f8a21b8eed77b3a1237007f0 Mon Sep 17 00:00:00 2001 From: METO Date: Sat, 10 Oct 2026 22:08:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(tencent):=20=E6=90=9C=E7=B4=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=88=87=E6=8D=A2=E5=88=B0=20search=5Ffor=5Fqq=5Fcp?= =?UTF-8?q?=20=E5=B9=B6=E5=85=BC=E5=AE=B9=E6=97=A7=E7=89=88=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=20(#133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/providers/tencent.js | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/providers/tencent.js b/src/providers/tencent.js index f255c2a..a0c8e25 100644 --- a/src/providers/tencent.js +++ b/src/providers/tencent.js @@ -26,20 +26,22 @@ export default class TencentProvider extends BaseProvider { /** * 搜索歌曲 + * + * 注意:旧接口 client_search_cp 已下线(HTTP 500), + * 这里改用同域名下仍在服务的 search_for_qq_cp, + * 该接口只返回老版字段(songmid/songname/albummid/albumname), + * 因此 format() 需要同时兼容新旧两种字段格式。 */ search(keyword, option = {}) { return { method: 'GET', - url: 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp', + url: 'https://c.y.qq.com/soso/fcgi-bin/search_for_qq_cp', body: { format: 'json', p: option.page || 1, n: option.limit || 30, - w: keyword, - aggr: 1, - lossless: 1, - cr: 1, - new_json: 1 + w: keyword + // 不要传 aggr=1:老接口下会导致分页/条数(p、n)失效 }, format: 'data.song.list' }; @@ -160,22 +162,28 @@ export default class TencentProvider extends BaseProvider { if (data.musicData) { data = data.musicData; } - + + // 兼容新版字段(mid/name/album.title)与老版字段(songmid/songname/albumname) + const mid = data.songmid || data.mid; + const album = data.album && data.album.title !== undefined + ? data.album.title + : (data.albumname || ''); + const result = { - id: data.mid, - name: data.name, + id: mid, + name: data.songname || data.name, artist: [], - album: data.album.title.trim(), - pic_id: data.album.mid, - url_id: data.mid, - lyric_id: data.mid, + album: String(album || '').trim(), + pic_id: (data.album && data.album.mid) || data.albummid, + url_id: mid, + lyric_id: mid, source: 'tencent' }; - - data.singer.forEach(singer => { + + (data.singer || []).forEach(singer => { result.artist.push(singer.name); }); - + return result; }