Comments (17)
搜索接口失效问题解决方案
搜索类型:默认为 0 // 0:单曲,1:歌手,2:专辑,3:歌单,7:歌词
代码:直接将以下代码覆盖原来的search.js即可,兼容以前的数据。
module.exports = {
'/': async ({req, res, request, globalCookie, cache}) => {
const obj = {...req.query, ...req.body};
let { uin, qqmusic_key } = globalCookie.userCookie();
if (Number(obj.ownCookie)) {
uin = req.cookies.uin || uin;
}
const {
pageNo = 1,
pageSize = 20,
key,
t = 0, // 0:单曲,2:歌单,7:歌词,8:专辑,9:歌手,12:mv
raw
} = req.query;
let total = 0;
if (!key) {
return res.send({
result: 500,
errMsg: '关键词不能为空',
});
}
// 缓存
const cacheKey = `search_${key}_${pageNo}_${pageSize}_${t}`;
const cacheData = cache.get(cacheKey);
if (cacheData) {
res && res.send(cacheData);
return cacheData;
}
const url = 'https://u.y.qq.com/cgi-bin/musicu.fcg'
const typeMap = {
0: 'song',
2: 'album',
1: 'singer',
3: 'songlist',
7: 'lyric',
12: 'mv',
};
if (!typeMap[t]) {
return res.send({
result: 500,
errMsg: '搜索类型错误,检查一下参数 t',
});
}
const params = {
req_1: {
method: "DoSearchForQQMusicDesktop",
module: "music.search.SearchCgiService",
param: {
num_per_page: Number(pageSize),
page_num: Number(pageNo),
query: key,
search_type: Number(t)
}
}
}
let result = {}
try {
result = await request({
url,
method: 'POST',
data: params,
headers: {
Referer: 'https://y.qq.com'
},
});
} catch (error) {
return res.send({
result: 400,
error
})
}
// 直接返回原生数据
if (Number(raw)) {
return res.send(result);
}
const response = {
result: 100,
data: {
list: Number(t) === 0 ? formatSongList(result.req_1.data.body[typeMap[t]].list) : result.req_1.data.body[typeMap[t]].list,
pageNo,
pageSize,
total: result.req_1.data.meta.sum,
key: result.req_1.data.meta.query || key,
t,
type: typeMap[t],
},
}
res.send(response);
},
// 热搜词
'/hot': async ({req, res, request}) => {
const {raw} = req.query;
const result = await request({
url: 'https://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg',
});
if (Number(raw)) {
return res.send(result);
}
res.send({
result: 100,
data: result.data.hotkey,
});
},
// 快速搜索
'/quick': async ({req, res, request}) => {
const {raw, key} = req.query;
if (!key) {
return res.send({
result: 500,
errMsg: 'key ?',
});
}
const result = await request(
`https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?key=${key}&g_tk=5381`,
);
if (Number(raw)) {
return res.send(result);
}
return res.send({
result: 100,
data: result.data,
});
},
}
function formatSongList(list) {
if (!Array.isArray(list)) {
return []
}
return list.map((item) => {
// 美化歌曲数据
return {
singer: item.singer, // 、
name: item.title,
songid: item.id,
songmid: item.mid,
songname: item.title,
albumid: item.album.id,
albummid: item.album.mid,
albumname: item.album.name,
interval: item.interval,
strMediaMid: item.file.media_mid,
size128: item.file.size_128mp3,
size320: item.file.size_320mp3,
sizeape: item.file.size_ape,
sizeflac: item.file.size_flac,
pay: item.pay || {}
}
})
}
from qqmusicapi.
报404阿
from qqmusicapi.
报404阿
from qqmusicapi.
报404阿
检查一下路由写对没
from qqmusicapi.
报404阿
检查一下路由写对没
额 不是覆盖代码就行了吗,不是搞nodejs的不知道咋判断....
from qqmusicapi.
报404阿
检查一下路由写对没额 不是覆盖代码就行了吗,不是搞nodejs的不知道咋判断....
就是直接覆盖就行了啊
from qqmusicapi.
报404阿
检查一下路由写对没额 不是覆盖代码就行了吗,不是搞nodejs的不知道咋判断....
就是直接覆盖就行了啊
那就奇怪了.我直接把\routes文件夹下的search.js里面的代码直接覆盖成了上面发的,就一直报404错误了
from qqmusicapi.
报404阿
检查一下路由写对没额 不是覆盖代码就行了吗,不是搞nodejs的不知道咋判断....
就是直接覆盖就行了啊
那就奇怪了.我直接把\routes文件夹下的search.js里面的代码直接覆盖成了上面发的,就一直报404错误了
其他的接口能调用?检查一下代码复制完整没有,改完了重启服务。
from qqmusicapi.
其他接口是正常的
这是文件里的代码,我对比了下 应该是一模一样的
module.exports = {
'/': async ({req, res, request, globalCookie, cache}) => {
const obj = {...req.query, ...req.body};
let { uin, qqmusic_key } = globalCookie.userCookie();
if (Number(obj.ownCookie)) {
uin = req.cookies.uin || uin;
}
const {
pageNo = 1,
pageSize = 20,
key,
t = 0, // 0:单曲,2:歌单,7:歌词,8:专辑,9:歌手,12:mv
raw
} = req.query;
let total = 0;
if (!key) {
return res.send({
result: 500,
errMsg: '关键词不能为空',
});
}
// 缓存
const cacheKey = `search_${key}_${pageNo}_${pageSize}_${t}`;
const cacheData = cache.get(cacheKey);
if (cacheData) {
res && res.send(cacheData);
return cacheData;
}
const url = 'https://u.y.qq.com/cgi-bin/musicu.fcg'
const typeMap = {
0: 'song',
2: 'album',
1: 'singer',
3: 'songlist',
7: 'lyric',
12: 'mv',
};
if (!typeMap[t]) {
return res.send({
result: 500,
errMsg: '搜索类型错误,检查一下参数 t',
});
}
const params = {
req_1: {
method: "DoSearchForQQMusicDesktop",
module: "music.search.SearchCgiService",
param: {
num_per_page: Number(pageSize),
page_num: Number(pageNo),
query: key,
search_type: Number(t)
}
}
}
let result = {}
try {
result = await request({
url,
method: 'POST',
data: params,
headers: {
Referer: 'https://y.qq.com'
},
});
} catch (error) {
return res.send({
result: 400,
error
})
}
// 直接返回原生数据
if (Number(raw)) {
return res.send(result);
}
const response = {
result: 100,
data: {
list: Number(t) === 0 ? formatSongList(result.req_1.data.body[typeMap[t]].list) : result.req_1.data.body[typeMap[t]].list,
pageNo,
pageSize,
total: result.req_1.data.meta.sum,
key: result.req_1.data.meta.query || key,
t,
type: typeMap[t],
},
}
res.send(response);
},
// 热搜词
'/hot': async ({req, res, request}) => {
const {raw} = req.query;
const result = await request({
url: 'https://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg',
});
if (Number(raw)) {
return res.send(result);
}
res.send({
result: 100,
data: result.data.hotkey,
});
},
// 快速搜索
'/quick': async ({req, res, request}) => {
const {raw, key} = req.query;
if (!key) {
return res.send({
result: 500,
errMsg: 'key ?',
});
}
const result = await request(
`https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?key=${key}&g_tk=5381`,
);
if (Number(raw)) {
return res.send(result);
}
return res.send({
result: 100,
data: result.data,
});
},
}
function formatSongList(list) {
if (!Array.isArray(list)) {
return []
}
return list.map((item) => {
// 美化歌曲数据
return {
singer: item.singer, // 、
name: item.title,
songid: item.id,
songmid: item.mid,
songname: item.title,
albumid: item.album.id,
albummid: item.album.mid,
albumname: item.album.name,
interval: item.interval,
strMediaMid: item.file.media_mid,
size128: item.file.size_128mp3,
size320: item.file.size_320mp3,
sizeape: item.file.size_ape,
sizeflac: item.file.size_flac,
pay: item.pay || {}
}
})
}
from qqmusicapi.
报404阿
检查一下路由写对没额 不是覆盖代码就行了吗,不是搞nodejs的不知道咋判断....
就是直接覆盖就行了啊
那就奇怪了.我直接把\routes文件夹下的search.js里面的代码直接覆盖成了上面发的,就一直报404错误了
其他的接口能调用?检查一下代码复制完整没有,改完了重启服务。
我把服务器重启了下 好了,难道是缓存? 昨天项目重启了好几次都不行 真尴尬
from qqmusicapi.
你好,替换后,搜索类型为7,对应歌词,会直接崩溃;搜索类型12,对应MV,搜出来的数据为空,应该如何解决呢
from qqmusicapi.
有用
from qqmusicapi.
你好,替换后,搜索类型为7,对应歌词,会直接崩溃;搜索类型12,对应MV,搜出来的数据为空,应该如何解决呢
没有用过歌词和mv搜索,可以抓包看看对应类型的传参是否有变化
from qqmusicapi.
你好,替换后,搜索类型为7,对应歌词,会直接崩溃;搜索类型12,对应MV,搜出来的数据为空,应该如何解决呢
刚刚在其他issue里看到搜索歌词崩溃的原因如下,加上结构检查就行了:
from qqmusicapi.
你好,替换后,搜索类型为7,对应歌词,会直接崩溃;搜索类型12,对应MV,搜出来的数据为空,应该如何解决呢
刚刚在其他issue里看到搜索歌词崩溃的原因如下,加上结构检查就行了:
我指的是搜索接口(search.js)对应的搜索类型为歌词(t=7)时会发生崩溃,不是获取歌词的接口(lyric.js)
from qqmusicapi.
问题已解决,抓包看了下,当搜索类型为歌词时,返回的数据没有lyric字段,实际存放的字段为song;
当搜索类型为mv时,对应的serach_type=4,而不是12。search.js的修改如下:
from qqmusicapi.
谢谢你,人间尤物🌹
from qqmusicapi.
Related Issues (20)
- 这些是不是都不能用了 HOT 7
- search接口 系统异常:Request failed with status code 404 HOT 1
- 公用 cookie 的形式指的是/user/setCookie吗
- 评论接口返回400怎么回事,原本是没问题的 HOT 1
- 运行时报错The string to be decoded is not correctly encoded.
- 可以试试QQ音乐客户端扫码登录呢? HOT 3
- user/refresh接口有别的接口替代的吗
- ✅cookie长期有效方案,已解决 HOT 10
- 请求没有歌词的歌曲的歌词导致崩溃 HOT 3
- 黑白名单是什么啊,有什么学习资料推荐嘛
- 黑白名单是什么啊,有什么系统的学习资料吗
- 调用获取歌单详情去获取百万收藏官方歌单,无法获取数据
- 获取歌词时,没有获取到会崩溃
- [功能请求] 对ipv6的支持
- 怎样用后台程序设置cookie?只有在第一次服务端没cookie时可以生效。第二次再设置就不会生效了? HOT 1
- 无版权歌曲在 app 上可以正常播放,但是不支持分享,而 web 端打开显示无版权无法播放
- 数据统计模块报错
- 网址提示502
- 腾讯调整了接口吗,[获取专辑信息]和[歌手介绍]获取不到数据,上周还能正常调 HOT 8
- 发送评论和删除评论的接口无效
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from qqmusicapi.