feat: kg 源搜索改用 AndroidFilter 接口并提供 albumAudioId (#2849)
将搜索接口 platform 从 WebFilter 切换到 AndroidFilter,新接口返回
MixSongID(即 album_audio_id),用于后续歌词精确搜索。
- songmid 各处仍保持原取值(Audioid / audio_id)不变,避免影响
既有歌曲 id 与旧收藏/列表数据
- 所有歌曲列表产出点均新增 albumAudioId 字段:
musicSearch(MixSongID)、songList 顶层(album_audio_id)、
songList 详情/leaderboard/musicInfo(audio_group_id / album_audio_id)
- music.d.ts 的 MusicInfoMeta_kg 增加 albumAudioId 字段,
tools.ts 新旧格式双向转换中保留,确保持久化后不丢失
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
21619e72dc
commit
905b2c3c42
Vendored
+1
@@ -58,6 +58,7 @@ declare namespace LX {
|
|||||||
qualitys: MusicQualityTypeKg[]
|
qualitys: MusicQualityTypeKg[]
|
||||||
_qualitys: _MusicQualityTypeKg
|
_qualitys: _MusicQualityTypeKg
|
||||||
hash: string // 歌曲hash
|
hash: string // 歌曲hash
|
||||||
|
albumAudioId?: string // 专辑内歌曲ID(MixSongID),用于歌词精确搜索
|
||||||
}
|
}
|
||||||
interface MusicInfo_kg extends MusicInfoBase<'kg'> {
|
interface MusicInfo_kg extends MusicInfoBase<'kg'> {
|
||||||
meta: MusicInfoMeta_kg
|
meta: MusicInfoMeta_kg
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ export const toNewMusicInfo = (oldMusicInfo: any): LX.Music.MusicInfo => {
|
|||||||
switch (oldMusicInfo.source) {
|
switch (oldMusicInfo.source) {
|
||||||
case 'kg':
|
case 'kg':
|
||||||
meta.hash = oldMusicInfo.hash
|
meta.hash = oldMusicInfo.hash
|
||||||
|
meta.albumAudioId = oldMusicInfo.albumAudioId
|
||||||
newInfo.id = oldMusicInfo.songmid + '_' + oldMusicInfo.hash
|
newInfo.id = oldMusicInfo.songmid + '_' + oldMusicInfo.hash
|
||||||
break
|
break
|
||||||
case 'tx':
|
case 'tx':
|
||||||
@@ -79,6 +80,7 @@ export const toOldMusicInfo = (minfo: LX.Music.MusicInfo) => {
|
|||||||
switch (minfo.source) {
|
switch (minfo.source) {
|
||||||
case 'kg':
|
case 'kg':
|
||||||
oInfo.hash = minfo.meta.hash
|
oInfo.hash = minfo.meta.hash
|
||||||
|
oInfo.albumAudioId = minfo.meta.albumAudioId
|
||||||
break
|
break
|
||||||
case 'tx':
|
case 'tx':
|
||||||
oInfo.strMediaMid = minfo.meta.strMediaMid
|
oInfo.strMediaMid = minfo.meta.strMediaMid
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ export default {
|
|||||||
albumName: decodeName(item.remark),
|
albumName: decodeName(item.remark),
|
||||||
albumId: item.album_id,
|
albumId: item.album_id,
|
||||||
songmid: item.audio_id,
|
songmid: item.audio_id,
|
||||||
|
albumAudioId: item.album_audio_id,
|
||||||
source: 'kg',
|
source: 'kg',
|
||||||
interval: formatPlayTime(item.duration),
|
interval: formatPlayTime(item.duration),
|
||||||
img: null,
|
img: null,
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ export const filterMusicInfoList = (rawList) => {
|
|||||||
albumName: decodeName(item.album_info.album_name),
|
albumName: decodeName(item.album_info.album_name),
|
||||||
albumId: item.album_info.album_id,
|
albumId: item.album_info.album_id,
|
||||||
songmid: item.audio_info.audio_id,
|
songmid: item.audio_info.audio_id,
|
||||||
|
albumAudioId: item.audio_info.audio_group_id,
|
||||||
source: 'kg',
|
source: 'kg',
|
||||||
interval: formatPlayTime(parseInt(item.audio_info.timelength) / 1000),
|
interval: formatPlayTime(parseInt(item.audio_info.timelength) / 1000),
|
||||||
img: null,
|
img: null,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export default {
|
|||||||
page: 0,
|
page: 0,
|
||||||
allPage: 1,
|
allPage: 1,
|
||||||
musicSearch(str, page, limit) {
|
musicSearch(str, page, limit) {
|
||||||
const searchRequest = httpFetch(`https://songsearch.kugou.com/song_search_v2?keyword=${encodeURIComponent(str)}&page=${page}&pagesize=${limit}&userid=0&clientver=&platform=WebFilter&filter=2&iscorrection=1&privilege_filter=0&area_code=1`)
|
const searchRequest = httpFetch(`http://songsearch.kugou.com/song_search_v2?platform=AndroidFilter&iscorrection=1&keyword=${encodeURIComponent(str)}&hifiquality=0&pagesize=${limit}&PrivilegeFilter=0&page=${page}`)
|
||||||
return searchRequest.promise.then(({ body }) => body)
|
return searchRequest.promise.then(({ body }) => body)
|
||||||
},
|
},
|
||||||
filterData(rawData) {
|
filterData(rawData) {
|
||||||
@@ -53,6 +53,7 @@ export default {
|
|||||||
albumName: decodeName(rawData.AlbumName),
|
albumName: decodeName(rawData.AlbumName),
|
||||||
albumId: rawData.AlbumID,
|
albumId: rawData.AlbumID,
|
||||||
songmid: rawData.Audioid,
|
songmid: rawData.Audioid,
|
||||||
|
albumAudioId: rawData.MixSongID,
|
||||||
source: 'kg',
|
source: 'kg',
|
||||||
interval: formatPlayTime(rawData.Duration),
|
interval: formatPlayTime(rawData.Duration),
|
||||||
_interval: rawData.Duration,
|
_interval: rawData.Duration,
|
||||||
|
|||||||
@@ -740,6 +740,7 @@ export default {
|
|||||||
albumName: decodeName(item.album_name),
|
albumName: decodeName(item.album_name),
|
||||||
albumId: item.album_id,
|
albumId: item.album_id,
|
||||||
songmid: item.audio_id,
|
songmid: item.audio_id,
|
||||||
|
albumAudioId: item.album_audio_id,
|
||||||
source: 'kg',
|
source: 'kg',
|
||||||
interval: formatPlayTime(item.duration / 1000),
|
interval: formatPlayTime(item.duration / 1000),
|
||||||
img: null,
|
img: null,
|
||||||
@@ -863,6 +864,7 @@ export default {
|
|||||||
albumName: decodeName(item.album_info.album_name),
|
albumName: decodeName(item.album_info.album_name),
|
||||||
albumId: item.album_info.album_id,
|
albumId: item.album_info.album_id,
|
||||||
songmid: item.audio_info.audio_id,
|
songmid: item.audio_info.audio_id,
|
||||||
|
albumAudioId: item.audio_info.audio_group_id,
|
||||||
source: 'kg',
|
source: 'kg',
|
||||||
interval: formatPlayTime(parseInt(item.audio_info.timelength) / 1000),
|
interval: formatPlayTime(parseInt(item.audio_info.timelength) / 1000),
|
||||||
img: null,
|
img: null,
|
||||||
|
|||||||
Reference in New Issue
Block a user