mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 04:52:50 +08:00
fix(qq): bypass broken c.y.qq.com search API, use u.y.qq.com directly
This commit is contained in:
1 parent
f9e2a210b7
commit
4de8ac1810
1 file changed
+34
-15
+34
-15
@@ -10,6 +10,14 @@ import type {
|
|||||||
} from "./provider.js";
|
} from "./provider.js";
|
||||||
import { parseLyrics } from "./netease.js";
|
import { parseLyrics } from "./netease.js";
|
||||||
|
|
||||||
|
// Direct QQ Music API client — bypasses the local API server for search
|
||||||
|
// because @sansenjian/qq-music-api still uses the broken c.y.qq.com endpoint.
|
||||||
|
const qqDirectApi = axios.create({
|
||||||
|
baseURL: "https://u.y.qq.com",
|
||||||
|
timeout: 10000,
|
||||||
|
headers: { referer: "https://y.qq.com" },
|
||||||
|
});
|
||||||
|
|
||||||
export class QQMusicProvider implements MusicProvider {
|
export class QQMusicProvider implements MusicProvider {
|
||||||
readonly platform = "qq" as const;
|
readonly platform = "qq" as const;
|
||||||
private api: AxiosInstance;
|
private api: AxiosInstance;
|
||||||
@@ -36,23 +44,34 @@ export class QQMusicProvider implements MusicProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async search(query: string, limit = 20): Promise<SearchResult> {
|
async search(query: string, limit = 20): Promise<SearchResult> {
|
||||||
const res = await this.api.get("/getSearchByKey", {
|
const reqData = JSON.stringify({
|
||||||
params: { key: query, pageSize: limit, ...this.cookieParams },
|
req_0: {
|
||||||
|
module: "music.search.SearchCgiService",
|
||||||
|
method: "DoSearchForQQMusicDesktop",
|
||||||
|
param: {
|
||||||
|
searchid: "1",
|
||||||
|
query,
|
||||||
|
num_per_page: Math.min(limit, 50),
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
const res = await qqDirectApi.get("/cgi-bin/musicu.fcg", {
|
||||||
|
params: { format: "json", data: reqData },
|
||||||
|
});
|
||||||
|
const list: any[] =
|
||||||
|
res.data?.req_0?.data?.body?.song?.list ?? [];
|
||||||
|
|
||||||
const songs: Song[] = (res.data?.response?.data?.song?.list ?? []).map(
|
const songs: Song[] = list.map((s: any) => ({
|
||||||
(s: any) => ({
|
id: String(s.mid ?? s.id),
|
||||||
id: String(s.mid ?? s.songmid ?? s.songid),
|
name: s.title ?? s.name ?? "",
|
||||||
name: s.songname ?? "",
|
artist: (s.singer ?? []).map((a: any) => a.name).join(" / "),
|
||||||
artist: (s.singer ?? []).map((a: any) => a.name).join(" / "),
|
album: s.album?.name ?? s.album?.title ?? "",
|
||||||
album: s.albumname ?? "",
|
duration: s.interval ?? 0,
|
||||||
duration: s.interval ?? 0,
|
coverUrl: s.album?.mid
|
||||||
coverUrl: s.albummid
|
? `https://y.gtimg.cn/music/photo_new/T002R300x300M000${s.album.mid}.jpg`
|
||||||
? `https://y.gtimg.cn/music/photo_new/T002R300x300M000${s.albummid}.jpg`
|
: "",
|
||||||
: "",
|
platform: "qq",
|
||||||
platform: "qq",
|
}));
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
return { songs, playlists: [], albums: [] };
|
return { songs, playlists: [], albums: [] };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user