完成网络音乐、工具页面与安装器体验升级
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
const { appid, clientver, signParamsKey, cryptoMd5 } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const mid = params?.cookie?.KUGOU_API_MID; // 可以自定义
|
||||
const clienttime = Date.now();
|
||||
|
||||
const recommend_source = (params?.album_audio_id || '').split(',').map((s) => ({ ID: Number(s) }));
|
||||
|
||||
const dataMap = {
|
||||
platform: 'ios',
|
||||
clientver,
|
||||
clienttime: clienttime,
|
||||
userid,
|
||||
client_playlist: [],
|
||||
source_type: 2,
|
||||
playlist_ver: 2,
|
||||
area_code: 1,
|
||||
appid,
|
||||
key: signParamsKey(clienttime.toString()),
|
||||
mid,
|
||||
recommend_source,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/recommend',
|
||||
data: dataMap,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'songlistairec.kugou.com' },
|
||||
clearDefaultParams: true,
|
||||
});
|
||||
};
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
const { clientver, appid, cryptoMd5, signParamsKey } = require('../util');
|
||||
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const data = (params?.album_id || '').split(',').map((s) => ({ album_id: s, album_name: '', author_name: '' }));
|
||||
const dfid = params?.cookie?.dfid || params?.dfid || '-';
|
||||
const userid = params?.cookie?.userid || params?.userid || 0;
|
||||
const token = params?.cookie?.token || params?.token || 0;
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clienttime: dateTime,
|
||||
clientver,
|
||||
data,
|
||||
dfid,
|
||||
fields: params?.fields || '',
|
||||
key: signParamsKey(dateTime),
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
};
|
||||
|
||||
if (token) dataMap['token'] = token;
|
||||
if (userid) dataMap['userid'] = userid;
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'http://kmr.service.kugou.com',
|
||||
url: '/v1/album',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'kmr.service.kugou.com', 'Content-Type': 'application/json' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
// 专辑详情
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = {
|
||||
data: [{ album_id: params.id }],
|
||||
is_buy: params?.is_buy || 0,
|
||||
fields: 'album_id,album_name,publish_date,sizable_cover,intro,language,is_publish,heat,type,quality,authors,exclusive,author_name,trans_param',
|
||||
};
|
||||
return useAxios({
|
||||
url: '/kmr/v2/albums',
|
||||
method: 'POST',
|
||||
data,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'openapi.kugou.com', 'kg-tid': '255' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
// 唱片店
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/zhuanjidata/v3/album_shop_v2/get_classify_data',
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
// 专辑音乐列表
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
album_id: params.id,
|
||||
is_buy: params?.is_buy || '',
|
||||
page: params?.page || 1,
|
||||
pagesize: params?.pagesize || 30,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v1/album_audio/lite',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'openapi.kugou.com', 'kg-tid': '255' },
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
// 获取歌手专辑
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
author_id: params.id,
|
||||
pagesize: params?.pagesize || 30,
|
||||
page: params?.page || 1,
|
||||
sort: params?.sort === 'hot' ? 3 : 1, // 3:最热,1:最新
|
||||
category: 1,
|
||||
area_code: 'all',
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/kmr/v1/author/albums',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'openapi.kugou.com', 'kg-tid': 36 },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
const { cryptoMd5, signParamsKey, clientver, appid } = require('../util');
|
||||
// 获取歌手单曲
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const clienttime = Math.floor(new Date().getTime() / 1000);
|
||||
const mid = params?.cookie?.KUGOU_API_MID;
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
mid,
|
||||
clienttime,
|
||||
key: signParamsKey(clienttime),
|
||||
author_id: params.id,
|
||||
pagesize: params?.pagesize || 30,
|
||||
page: params?.page || 1,
|
||||
sort: params?.sort === 'hot' ? 1 : 2, // 1:最热,2:最新
|
||||
area_code: 'all',
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://openapi.kugou.com',
|
||||
url: '/kmr/v1/audio_group/author',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'openapi.kugou.com', 'kg-tid': 220 },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
// 歌手详情
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/kmr/v3/author',
|
||||
method: 'POST',
|
||||
data: { author_id: params.id },
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'openapi.kugou.com', 'kg-tid': 36 },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
const { cryptoAesEncrypt, rsaEncrypt2 } = require('../util');
|
||||
// 关注歌手
|
||||
module.exports = (params, useAxios) => {
|
||||
const singerid = Number(params.id);
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
const userid = Number(params?.userid || params?.cookie?.userid || 0);
|
||||
const clienttime = Math.floor(Date.now() / 1000);
|
||||
|
||||
const encrypt = cryptoAesEncrypt({ singerid, token });
|
||||
|
||||
|
||||
const paramsMap = {
|
||||
plat: 0,
|
||||
userid,
|
||||
singerid,
|
||||
source: 7,
|
||||
p: rsaEncrypt2({ clienttime, key: encrypt.key }),
|
||||
params: encrypt.str
|
||||
}
|
||||
|
||||
|
||||
|
||||
return useAxios({
|
||||
url: '/followservice/v3/follow_singer',
|
||||
method: 'post',
|
||||
data: paramsMap,
|
||||
params: {clienttime},
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
// 获取关注歌手新歌
|
||||
module.exports = (params, useAxios) => {
|
||||
const last_album_id = params.last_album_id || 0;
|
||||
const page_size = params.pagesize || 30;
|
||||
const opt_sort = params.opt_sort === 2 ? 2 : 1;
|
||||
|
||||
const paramsMap = {
|
||||
last_album_id,
|
||||
page_size,
|
||||
opt_sort,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/feed/v1/follow/newsong_album_list',
|
||||
method: 'post',
|
||||
data: { last_album_id },
|
||||
params: paramsMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
// 歌手荣誉详情
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
baseURL: 'http://h5activity.kugou.com',
|
||||
url: '/v1/query_singer_honour_detail',
|
||||
method: 'POST',
|
||||
params: { singer_id: params.id, pagesize: params?.pagesize || 30, page: params?.page || 1 },
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
// 歌手列表
|
||||
module.exports = (params, useAxios) => {
|
||||
const paramsMap = {
|
||||
musician: Number(params.musician || 0),
|
||||
sextype: params.sextypes || 0,
|
||||
showtype: 2,
|
||||
type: params.type || 0,
|
||||
hotsize: Number(params.hotsize || 30)
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/ocean/v6/singer/list',
|
||||
method: 'GET',
|
||||
params: paramsMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
const { cryptoAesEncrypt, rsaEncrypt2 } = require('../util');
|
||||
// 取消关注歌手
|
||||
module.exports = (params, useAxios) => {
|
||||
const singerid = params.id;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const clienttime = Math.floor(Date.now() / 1000);
|
||||
|
||||
const encrypt = cryptoAesEncrypt({ singerid, token });
|
||||
|
||||
const paramsMap = {
|
||||
plat: 0,
|
||||
userid,
|
||||
singerid,
|
||||
source: 7,
|
||||
p: rsaEncrypt2({ clienttime, key: encrypt.key }),
|
||||
params: encrypt.str
|
||||
}
|
||||
|
||||
|
||||
return useAxios({
|
||||
url: '/followservice/v3/unfollow_singer',
|
||||
method: 'post',
|
||||
data: paramsMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
// 获取歌手mv
|
||||
|
||||
const tag_idx = { official: 18, live: 20, fan: 23, artist: 42419, all: '' };
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const paramsMap = {
|
||||
author_id: params.id,
|
||||
is_fanmade: '',
|
||||
tag_idx: tag_idx[params?.tag || 'all'] || '', // 18:官方版本,20:现场版本,23:饭制版本,42419:歌手发布
|
||||
pagesize: params.pagesize || 30,
|
||||
page: params.page || 1,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://openapicdn.kugou.com',
|
||||
url: '/kmr/v1/author/videos',
|
||||
method: 'GET',
|
||||
params: paramsMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
const { signParamsKey, appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const data = (params?.hash || '').split(',').map((s) => ({ hash: s, audio_id: 0 }));
|
||||
const dfid = params?.cookie?.dfid || params?.dfid || '-';
|
||||
const userid = params?.cookie?.userid || params?.userid || 0;
|
||||
const token = params?.cookie?.token || params?.token || 0;
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clienttime: dateTime,
|
||||
clientver,
|
||||
data,
|
||||
dfid,
|
||||
key: signParamsKey(dateTime),
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
};
|
||||
|
||||
if (token) dataMap['token'] = token;
|
||||
if (userid) dataMap['userid'] = userid;
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'http://kmr.service.kugou.com',
|
||||
url: '/v1/audio/audio',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'kmr.service.kugou.com', 'Content-Type': 'application/json' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
const { cryptoMd5, appid } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const dataMap = {
|
||||
isteen: 0,
|
||||
mixId: Number(params.mixId) || 0,
|
||||
usemkv: 1,
|
||||
platform: 2,
|
||||
fileName: params.fileName || '',
|
||||
hash: params.hash,
|
||||
version: 12375,
|
||||
appid,
|
||||
}
|
||||
|
||||
|
||||
const str = '*s&iN#G70*';
|
||||
const paramsString = Object.keys(dataMap)
|
||||
.sort()
|
||||
.map((key) => `${key}=${typeof dataMap[key] === 'object' ? JSON.stringify(dataMap[key]) : dataMap[key]}`)
|
||||
.join('&');
|
||||
dataMap['sign'] = cryptoMd5(`${paramsString}${str}`).substring(8, 24);
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://nsongacsing.kugou.com',
|
||||
url: '/sing7/accompanywan/json/v2/cdn/optimal_matching_accompany_2_listen.do',
|
||||
params: dataMap,
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
clearDefaultParams: true,
|
||||
notSignature: true,
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
const { cryptoMd5, appid } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const dataMap = {
|
||||
isteen: 0,
|
||||
songId: Number(params.songId),
|
||||
usemkv: 1,
|
||||
platform: 2,
|
||||
singerName: params.singerName,
|
||||
songHash: params.songHash,
|
||||
version: 12375,
|
||||
appid,
|
||||
}
|
||||
|
||||
|
||||
const str = '*s&iN#G70*';
|
||||
const paramsString = Object.keys(dataMap)
|
||||
.sort()
|
||||
.map((key) => `${key}=${typeof dataMap[key] === 'object' ? JSON.stringify(dataMap[key]) : dataMap[key]}`)
|
||||
.join('&');
|
||||
dataMap['sign'] = cryptoMd5(`${paramsString}${str}`).substring(8, 24);
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://acsing.service.kugou.com',
|
||||
url: '/sing7/listenguide/json/v2/cdn/listenguide/get_total_opus_num_v02.do',
|
||||
params: dataMap,
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
clearDefaultParams: true,
|
||||
notSignature: true,
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
// 听歌识曲
|
||||
module.exports = (params, useAxios) => {
|
||||
const paramsMap = {
|
||||
fpid: Date.now(),
|
||||
area_code: 1,
|
||||
include_unpublish: 1,
|
||||
useid: params?.userid || params?.cookie?.userid || 0,
|
||||
multi_result: 1,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/fingerprint.service/v1/music_trackid_mulit',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: params.data,
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'content-type': 'application/octet-stream', 'user-agent': 'KuGou/11490 (Android)' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
const { cryptoMd5 } = require('../util');
|
||||
|
||||
const sortType = { all: 1, hot: 2, new: 3 };
|
||||
|
||||
// https://listkmrp3cdnretry.kugou.com/v3/album_audio/related
|
||||
module.exports = (params, useAxios) => {
|
||||
const show_detail = Number(params.show_detail) === 0;
|
||||
|
||||
let dataMap = {
|
||||
album_audio_id: Number(params.album_audio_id),
|
||||
appid: 1005,
|
||||
area_code: 1,
|
||||
clientver: 12329,
|
||||
};
|
||||
|
||||
if (!show_detail) {
|
||||
dataMap = {
|
||||
...dataMap,
|
||||
page: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
show_input: 1,
|
||||
show_type: params.show_type || 0,
|
||||
sort: sortType[params.sort] || 1,
|
||||
type: params.type || 0,
|
||||
};
|
||||
}
|
||||
|
||||
dataMap['version'] = 1;
|
||||
|
||||
const str = 'OIlwieks28dk2k092lksi2UIkp';
|
||||
const paramsString = Object.keys(dataMap)
|
||||
.sort()
|
||||
.map((key) => `${key}=${typeof dataMap[key] === 'object' ? JSON.stringify(dataMap[key]) : dataMap[key]}`)
|
||||
.join('');
|
||||
dataMap['signature'] = cryptoMd5(`${str}${paramsString}${str}`);
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://listkmrp3cdnretry.kugou.com',
|
||||
url: !show_detail ? '/v3/album_audio/related' : '/v2/audio_related/total',
|
||||
params: dataMap,
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
clearDefaultParams: true,
|
||||
});
|
||||
};
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
const { appid, clientver, signParamsKey } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.cookie?.userid || params?.userid || 0;
|
||||
const vip_type = params?.cookie?.vip_type || params?.vipType || 0;
|
||||
const dateTime = Date.now();
|
||||
|
||||
const personal_recommend = {
|
||||
userid,
|
||||
appid,
|
||||
playlist_ver: 2,
|
||||
clienttime: dateTime,
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
new_sync_point: dateTime,
|
||||
module_id: 1,
|
||||
action: 'login',
|
||||
vip_type,
|
||||
vip_flags: 3,
|
||||
recommend_source_locked: 0,
|
||||
song_pool_id: Number(params?.song_pool_id || 0),
|
||||
callerid: 0,
|
||||
m_type: 1,
|
||||
kguid: userid,
|
||||
platform: 'ios',
|
||||
area_code: 1,
|
||||
fakem: 'ca981cfc583a4c37f28d2d49000013c16a0a',
|
||||
clientver: 11850,
|
||||
mode: params?.mode || 'normal',
|
||||
active_swtich: 'on',
|
||||
key: signParamsKey(dateTime),
|
||||
};
|
||||
|
||||
const dataMap = {
|
||||
behaviors: [],
|
||||
abtest: {
|
||||
abtest: { shuashua: { commentcard: 2 } },
|
||||
},
|
||||
personal_recommend_params: personal_recommend,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/genesisapi/v1/newepoch_song_rec/feed',
|
||||
data: dataMap,
|
||||
params: { sort_type: 1, platform: 'ios', page: 1, content_ver: 4, clientver: 11850 },
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
// 手机验证码发送
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
businessid: 5,
|
||||
mobile: `${params?.mobile}`,
|
||||
plat: 3,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'http://login.user.kugou.com',
|
||||
url: '/v7/send_mobile_code',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: {mid: params?.cookie?.KUGOU_API_MID},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
// 歌曲评论
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const paramsMap = {
|
||||
childrenid: params.id,
|
||||
need_show_image: 1,
|
||||
p: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
show_classify: params.show_classify || 1,
|
||||
show_hotword_list: params.show_hotword_list || 1,
|
||||
code: '94f1792ced1df89aa68a7939eaf2efca',
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/m.comment.service/v1/cmtlist',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
// 歌曲评论数
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const paramsMap = {
|
||||
r: 'comments/getcommentsnum',
|
||||
code: 'fc4be23b4e972707f36b8a828a93ba8a',
|
||||
};
|
||||
|
||||
if (params && params.hash) {
|
||||
paramsMap.hash = params.hash;
|
||||
} else if (params && params.special_id) {
|
||||
paramsMap.childrenid = params.special_id;
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/index.php',
|
||||
encryptType: 'web',
|
||||
method: 'GET',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'sum.comment.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
// 楼层评论
|
||||
const songCode = 'fc4be23b4e972707f36b8a828a93ba8a';
|
||||
const playlistCode = 'ca53b96fe5a1d9c22d71c8f522ef7c4f';
|
||||
const albumCode = '94f1792ced1df89aa68a7939eaf2efca';
|
||||
|
||||
const isNonEmpty = (value) => {
|
||||
if (value == null) return false;
|
||||
const text = `${value}`.trim();
|
||||
return text !== '' && text !== 'null' && text !== 'undefined';
|
||||
};
|
||||
|
||||
const resolveFloorCommentRequestConfig = (params = {}) => {
|
||||
const resourceType = `${params.resource_type || params.resourceType || ''}`.toLowerCase();
|
||||
const code = isNonEmpty(params.code)
|
||||
? `${params.code}`
|
||||
: resourceType === 'playlist'
|
||||
? playlistCode
|
||||
: resourceType === 'album'
|
||||
? albumCode
|
||||
: songCode;
|
||||
|
||||
const useServiceEndpoint =
|
||||
resourceType === 'playlist' ||
|
||||
resourceType === 'album' ||
|
||||
code === playlistCode ||
|
||||
code === albumCode;
|
||||
|
||||
const paramsMap = {
|
||||
childrenid: params.special_id,
|
||||
need_show_image: 1,
|
||||
p: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
show_classify: params.show_classify ?? 1,
|
||||
show_hotword_list: params.show_hotword_list ?? 1,
|
||||
code,
|
||||
tid: params.tid,
|
||||
};
|
||||
|
||||
if (isNonEmpty(params.mixsongid)) {
|
||||
paramsMap.mixsongid = params.mixsongid;
|
||||
}
|
||||
|
||||
return {
|
||||
url: useServiceEndpoint
|
||||
? '/m.comment.service/v1/hot_replylist'
|
||||
: '/mcomment/v1/hot_replylist',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
};
|
||||
};
|
||||
|
||||
const commentFloor = (params, useAxios) => {
|
||||
return useAxios(resolveFloorCommentRequestConfig(params));
|
||||
};
|
||||
|
||||
module.exports = commentFloor;
|
||||
module.exports.resolveFloorCommentRequestConfig = resolveFloorCommentRequestConfig;
|
||||
@@ -0,0 +1,22 @@
|
||||
// 歌曲评论
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const paramsMap = {
|
||||
mixsongid: params.mixsongid,
|
||||
need_show_image: 1,
|
||||
p: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
show_classify: params.show_classify || 1,
|
||||
show_hotword_list: params.show_hotword_list || 1,
|
||||
extdata: '0',
|
||||
code: 'fc4be23b4e972707f36b8a828a93ba8a'
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/mcomment/v1/cmtlist',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
// 歌曲评论-根据分类获取评论
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const paramsMap = {
|
||||
mixsongid: params.mixsongid,
|
||||
need_show_image: 1,
|
||||
page: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
type_id: params.type_id,
|
||||
extdata: '0',
|
||||
code: 'fc4be23b4e972707f36b8a828a93ba8a',
|
||||
sort_method: Number(params.sort) === 2 ? params.sort : 1
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/mcomment/v1/cmt_classify_list',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
// 歌曲评论-更具热词获取评论
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const paramsMap = {
|
||||
mixsongid: params.mixsongid,
|
||||
need_show_image: 1,
|
||||
p: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
hot_word: params.hot_word,
|
||||
extdata: '0',
|
||||
code: 'fc4be23b4e972707f36b8a828a93ba8a',
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/mcomment/v1/get_hot_word',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
// 歌曲评论
|
||||
module.exports = (params, useAxios) => {
|
||||
|
||||
const paramsMap = {
|
||||
childrenid: params.id,
|
||||
need_show_image: 1,
|
||||
p: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
show_classify: params.show_classify || 1,
|
||||
show_hotword_list: params.show_hotword_list || 1,
|
||||
code: 'ca53b96fe5a1d9c22d71c8f522ef7c4f',
|
||||
content_type: 0,
|
||||
tag: 5
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/m.comment.service/v1/cmtlist',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
baseURL: 'https://acsing.service.kugou.com',
|
||||
url: '/sing7/relation/json/v3/friend_rec_by_using_song_list',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: {list: [{user_id: 853927886, mixsong_ids: [290083753,251724346,571554587,250126644,208831644,40328518,250504076,581706850,318347675,585258401,288481998,407414475,28239430,280584633,291957521,64556644,243149863,488725103,32114153,39951172,29019580,40397606,327507651,32029382,32218359,340353127,276448762,177071956,100031397,249251602]}]},
|
||||
params: { channel: 130, isteen: 0, platform: 2, usemkv: 1 },
|
||||
cookie: params?.cookie || {},
|
||||
headers: { pid: 126556797 },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
// mode list ,song
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const paramsMap = {
|
||||
mode: params.mode || 'list',
|
||||
platform: params.platform || 'ios'
|
||||
};
|
||||
|
||||
if (params.history_name) paramsMap['history_name'] = params.history_name;
|
||||
if (params.date) paramsMap['date'] = params.date;
|
||||
|
||||
return useAxios({
|
||||
url: '/everyday/api/v1/get_history',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'everydayrec.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/everyday_song_recommend',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: { platform: params.platform || 'ios' },
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'everydayrec.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
platform: params.platform || 'ios'
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/everydayrec.service/everyday_style_recommend',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: {},
|
||||
params: { tagids: params.tagids ?? ''},
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: `/count/v1/audio/mget_collect`,
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
params: { mixsongids: params.mixsongids },
|
||||
});
|
||||
};
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
const { appid, clientver, cryptoMd5, signParamsKey } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const userid = params?.cookie?.userid || params?.userid || 0;
|
||||
const dataMap = {
|
||||
kguid: userid,
|
||||
clienttime: dateTime,
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
platform: 'android',
|
||||
clientver,
|
||||
uid: userid,
|
||||
get_tracker: 1,
|
||||
key: signParamsKey(dateTime),
|
||||
appid,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v1/class_fm_song',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'fm.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
const { appid, clientver, signParamsKey } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const dfid = params?.cookie?.dfid || params?.dfid || '-';
|
||||
const userid = params?.cookie?.userid || params?.userid;
|
||||
const token = params?.cookie?.token || params?.token;
|
||||
|
||||
const fmData = (params?.fmid || '').split(',').map((s) => ({ fields: 'imgUrl100,imgUrl50', fmid: s, fmtype: 2 }));
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clienttime: dateTime,
|
||||
clientver,
|
||||
data: fmData,
|
||||
dfid,
|
||||
key: signParamsKey(dateTime),
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
};
|
||||
if (userid) dataMap['userid'] = userid;
|
||||
if (token) dataMap['token'] = token;
|
||||
|
||||
return useAxios({
|
||||
url: '/v1/fm_info',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'fm.service.kugou.com', 'Content-Type': 'application/json' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
const { appid, clientver, signParamsKey } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const dfid = params?.cookie?.dfid || params?.dfid || '-';
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
clienttime: dateTime,
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
key: signParamsKey(dateTime),
|
||||
rcmdsongcount: 1,
|
||||
level: 0,
|
||||
area_code: 1,
|
||||
get_tracker: 1,
|
||||
uid: 0,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v1/rcmd_list',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'fm.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
const { appid, clientver, signParamsKey } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const userid = params?.cookie?.userid || params?.userid;
|
||||
|
||||
const fmData = (params?.fmid || '').split(',').map((s) => ({
|
||||
fmid: s,
|
||||
fmtype: params?.type || 2,
|
||||
offset: params?.offset || -1,
|
||||
size: params?.size || 20,
|
||||
singername: s.singername || '',
|
||||
}));
|
||||
|
||||
// fmType 生成
|
||||
(params?.fmtype || '').split(',').forEach((s, l) => (fmData[l].fmtype = s || fmData[l].fmtype));
|
||||
|
||||
(params?.fmoffset || '').split(',').forEach((s, l) => (fmData[l].offset = s || fmData[l].offset));
|
||||
|
||||
(params?.fmsize || '').split(',').forEach((s, l) => (fmData[l].size = s || fmData[l].size));
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
area_code: 1,
|
||||
clienttime: dateTime,
|
||||
clientver,
|
||||
data: fmData,
|
||||
get_tracker: 1,
|
||||
key: signParamsKey(dateTime),
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
uid: userid,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v1/app_song_list_offset',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'fm.service.kugou.com', 'Content-Type': 'application/json' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
// 获取音效详情
|
||||
const { signParamsKey } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
model_id: Number(params.model_id || 0),
|
||||
req_src: 'collection',
|
||||
earphone_vip: 1,
|
||||
sound_ver: 2,
|
||||
key: signParamsKey(Date.now()),
|
||||
page: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
};
|
||||
|
||||
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'http://mobileservice.kugou.com',
|
||||
url: '/api/v5/earphone/get_model_info',
|
||||
encryptType: 'android',
|
||||
method: 'GET',
|
||||
params: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// 获取社区音效
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
super_vip: 1,
|
||||
sound_ver: 2,
|
||||
page: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
apiver: 3,
|
||||
classify: '2,3',
|
||||
plat: 2,
|
||||
privilege: 1,
|
||||
sort: 2
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
return useAxios({
|
||||
url: '/ocean/v6/sound/list',
|
||||
encryptType: 'android',
|
||||
method: 'GET',
|
||||
params: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
// 获取验证码数据
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = Number(params?.userid || params?.cookie?.userid || '0');
|
||||
const dataMap = {
|
||||
eventid: params?.eventid,
|
||||
userid,
|
||||
platid: params?.platid || 2,
|
||||
rtype: 1,
|
||||
wasm: 1,
|
||||
i: '',
|
||||
sid: '',
|
||||
edt: '',
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/verifyservice/v3/get_verify_info',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
const { signatureAndroidParams, appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = (params?.hash || '').split(',').map((s) => ({ album_id: 0, hash: s, album_audio_id: 0 }));
|
||||
(params?.album_id || '').split(',').forEach((s, index) => {
|
||||
if (index <= data.length - 1) {
|
||||
data[index]['album_id'] = s || 0;
|
||||
}
|
||||
});
|
||||
(params?.album_audio_id || '').split(',').forEach((s, index) => {
|
||||
if (index <= data.length - 1) {
|
||||
data[index]['album_audio_id'] = s || 0;
|
||||
}
|
||||
});
|
||||
|
||||
const paramsMap = {
|
||||
album_image_type: '-3',
|
||||
appid,
|
||||
clientver,
|
||||
author_image_type: '3,4,5',
|
||||
count: params?.count || 5,
|
||||
data,
|
||||
isCdn: 1,
|
||||
publish_time: 1,
|
||||
};
|
||||
|
||||
const query = Object.keys(paramsMap)
|
||||
.sort()
|
||||
.map((s) => `${s}=${encodeURIComponent(typeof paramsMap[s] === 'object' ? JSON.stringify(paramsMap[s]) : paramsMap[s])}`);
|
||||
|
||||
const signature = signatureAndroidParams(paramsMap);
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://expendablekmr.kugou.com',
|
||||
url: `/container/v2/image?${query.join('&')}`,
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
params: { signature },
|
||||
cookie: params?.cookie || {},
|
||||
notSign: true,
|
||||
clearDefaultParams: true,
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
const { signatureAndroidParams, appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = (params?.hash || '').split(',').map((s) => ({ audio_id: 0, hash: s, album_audio_id: 0, filename: '' }));
|
||||
(params?.audio_id || '').split(',').forEach((s, index) => {
|
||||
if (index <= data.length - 1) {
|
||||
data[index]['audio_id'] = s || 0;
|
||||
}
|
||||
});
|
||||
(params?.album_audio_id || '').split(',').forEach((s, index) => {
|
||||
if (index <= data.length - 1) {
|
||||
data[index]['album_audio_id'] = s || 0;
|
||||
}
|
||||
});
|
||||
(params?.filename || '').split(',').forEach((s, index) => {
|
||||
if (index <= data.length - 1) {
|
||||
data[index]['filename'] = s;
|
||||
}
|
||||
});
|
||||
|
||||
const paramsMap = {
|
||||
appid,
|
||||
clientver,
|
||||
count: params?.count || 5,
|
||||
data,
|
||||
isCdn: 1,
|
||||
publish_time: 1,
|
||||
show_authors: 1,
|
||||
};
|
||||
|
||||
const query = Object.keys(paramsMap)
|
||||
.sort()
|
||||
.map((s) => `${s}=${encodeURIComponent(typeof paramsMap[s] === 'object' ? JSON.stringify(paramsMap[s]) : paramsMap[s])}`);
|
||||
|
||||
const signature = signatureAndroidParams(paramsMap);
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://expendablekmr.kugou.com',
|
||||
url: `/v2/author_image/audio?${query.join('&')}`,
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
params: { signature },
|
||||
cookie: params?.cookie || {},
|
||||
notSign: true,
|
||||
clearDefaultParams: true,
|
||||
});
|
||||
};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// 根据 ip id 获取相对应的 歌曲/专辑/视频/歌手
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
is_publish: 1,
|
||||
ip_id: params?.id,
|
||||
sort: 3,
|
||||
page: params?.page || 1,
|
||||
pagesize: params?.pagesize || 30,
|
||||
query: 1,
|
||||
};
|
||||
|
||||
const type = ['audios', 'albums', 'videos', 'author_list'].includes(params?.type) ? params.type : 'audios';
|
||||
|
||||
return useAxios({
|
||||
url: `/openapi/v1/ip/${type}`,
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// 获取ip详情
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = (params?.id || '').split(',').map((s) => ({ ip_id: s }));
|
||||
|
||||
const dataMap = {
|
||||
data,
|
||||
is_publish: 1,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/openapi/v1/ip',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
// 根据 ip 获取相对于歌单
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
ip: params?.id,
|
||||
page: params?.page || 1,
|
||||
pagesize: params?.pagesize || 30,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/ocean/v6/pubsongs/list_info_for_ip',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
// ip 专区
|
||||
module.exports = (params, useAxios) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
url: `/v1/zone/index`,
|
||||
encryptType: 'android',
|
||||
method: 'GET',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'yuekucategory.kugou.com' },
|
||||
})
|
||||
.then((resp) => {
|
||||
if (resp.body.status == 1) {
|
||||
if (resp.body.data?.list) {
|
||||
const list = Array.isArray(resp.body.data.list) ? resp.body.data?.list : [];
|
||||
for (let index = 0; index < list.length; index += 1) {
|
||||
if (list[index].special_link) {
|
||||
const urls = new URLSearchParams(list[index].special_link);
|
||||
if (urls.has('path')) {
|
||||
const pathUrls = new URLSearchParams(urls.get('path') || '');
|
||||
list[index]['ip_id'] = Number(pathUrls.get('ip_id') || '');
|
||||
}
|
||||
}
|
||||
}
|
||||
resp.body.data.list = list;
|
||||
}
|
||||
}
|
||||
resolve(resp);
|
||||
})
|
||||
.catch((e) => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
// 获取今日推荐信息,有可能为空
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
id: params?.id,
|
||||
share: 0,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v1/zone/home',
|
||||
encryptType: 'android',
|
||||
method: 'GET',
|
||||
params: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'yuekucategory.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
const { appid, clientver } = require('../util');
|
||||
// 根据 album_audio_id/MixSongID 获取歌曲 相对应的 mv
|
||||
module.exports = (params, useAxios) => {
|
||||
const resource = (params?.album_audio_id || '').split(',').map((s) => ({ album_audio_id: s }));
|
||||
|
||||
const paramsMap = {
|
||||
data: resource,
|
||||
fields: params.fields || '',
|
||||
};
|
||||
|
||||
|
||||
return useAxios({
|
||||
url: '/kmr/v1/audio/mv',
|
||||
method: 'POST',
|
||||
data: paramsMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: {'x-router': 'openapi.kugou.com', 'KG-TID': 38},
|
||||
});
|
||||
};
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// 根据 album_audio_id/MixSongID 获取歌曲 相对应的 歌手/专辑/歌曲信息
|
||||
module.exports = (params, useAxios) => {
|
||||
const resource = (params?.album_audio_id || '').split(',').map((s) => ({ entity_id: Number(s) }));
|
||||
|
||||
const paramsMap = {
|
||||
data: resource,
|
||||
fields: params.fields || 'base',
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/kmr/v2/audio',
|
||||
method: 'POST',
|
||||
data: paramsMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: {'x-router': 'openapi.kugou.com', 'KG-TID': 238},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
// 获取继续播放信息
|
||||
module.exports = (params, useAxios) => {
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
const userid = Number(params?.userid || params?.cookie?.userid || 0);
|
||||
const paramsMap = {
|
||||
area_code: '1',
|
||||
sources: ['pc', 'mobile', 'tv', 'car'],
|
||||
userid,
|
||||
ret_info: 1,
|
||||
token,
|
||||
pagesize: Number(params.pagesize || 30)
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/playque/devque/v1/get_latest_songs',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
const { cryptoAesDecrypt, cryptoAesEncrypt, cryptoRSAEncrypt } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateNow = Date.now();
|
||||
const encrypt = cryptoAesEncrypt({ pwd: params?.password || '', code: params?.code || '', clienttime_ms: dateNow });
|
||||
const dataMap = {
|
||||
plat: 1,
|
||||
support_multi: 1,
|
||||
clienttime_ms: dateNow,
|
||||
t1: '562a6f12a6e803453647d16a08f5f0c2ff7eee692cba2ab74cc4c8ab47fc467561a7c6b586ce7dc46a63613b246737c03a1dc8f8d162d8ce1d2c71893d19f1d4b797685a4c6d3d81341cbde65e488c4829a9b4d42ef2df470eb102979fa5adcdd9b4eecfea8b909ff7599abeb49867640f10c3c70fc444effca9d15db44a9a6c907731e2bb0f22cd9b3536380169995693e5f0e2424e3378097d3813186e3fe96bbe7023808a0981b4e2b6135a76faac',
|
||||
t2: '31c4daf4cf480169ccea1cb7d4a209295865a9d2b788510301694db229b87807469ea0d41b4d4b9173c2151da7294aeebfc9738df154bbdf11a4e117bb5dff6a3af8ce5ce333e681c1f29a44038f27567d58992eb81283e080778ac77db1400fdf49b7cf7e26be2e5af4da7830cc3be4',
|
||||
t3: 'MCwwLDAsMCwwLDAsMCwwLDA=',
|
||||
username: params?.username,
|
||||
params: encrypt.str,
|
||||
pk: cryptoRSAEncrypt({ 'clienttime_ms': dateNow, key: encrypt.key }).toUpperCase(),
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
url: '/v9/login_by_pwd',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'login.user.kugou.com' },
|
||||
})
|
||||
.then((res) => {
|
||||
const { body } = res;
|
||||
if (body?.status && body?.status === 1) {
|
||||
if (body?.data?.secu_params) {
|
||||
const getToken = cryptoAesDecrypt(body.data.secu_params, encrypt.key);
|
||||
if (typeof getToken === 'object') {
|
||||
res.body.data = { ...body.data, ...getToken };
|
||||
Object.keys(getToken).forEach((key) => res.cookie.push(`${key}=${getToken[key]}`));
|
||||
} else {
|
||||
res.body.data['token'] = getToken;
|
||||
res.cookie.push(`token=${getToken}`);
|
||||
}
|
||||
res.cookie.push(`userid=${res.body.data?.userid || 0}`);
|
||||
res.cookie.push(`vip_type=${res.body.data?.vip_type || 0}`);
|
||||
res.cookie.push(`vip_token=${res.body.data?.vip_token || ''}`);
|
||||
|
||||
resolve(res);
|
||||
return;
|
||||
}
|
||||
}
|
||||
resolve(res);
|
||||
})
|
||||
.catch((e) => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,76 @@
|
||||
// 手机登录
|
||||
const { cryptoAesDecrypt, cryptoAesEncrypt, cryptoRSAEncrypt, signParamsKey, isLite, randomString } = require('../util');
|
||||
|
||||
let liteT2Key = 'fd14b35e3f81af3817a20ae7adae7020';
|
||||
let liteT2Iv = '17a20ae7adae7020';
|
||||
let liteT1Key = '5e4ef500e9597fe004bd09a46d8add98';
|
||||
let liteT1Iv = '04bd09a46d8add98';
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateTime = Date.now();
|
||||
const encrypt = cryptoAesEncrypt({ mobile: params?.mobile || '', code: params?.code || '' });
|
||||
const mobile = params?.mobile && `${params.mobile.toString().substring(0, 2)}*****${params.mobile.toString().substring(10, 11)}`;
|
||||
const dfid = params?.cookie?.dfid ?? randomString(24);
|
||||
const t2 = cryptoAesEncrypt(
|
||||
`${params.cookie?.KUGOU_API_GUID}|0f607264fc6318a92b9e13c65db7cd3c|${params.cookie?.KUGOU_API_MAC}|${params.cookie?.KUGOU_API_DEV}|${dateTime}`,
|
||||
{ key: liteT2Key, iv: liteT2Iv }
|
||||
);
|
||||
const t1 = cryptoAesEncrypt(`|${dateTime}`, { key: liteT1Key, iv: liteT1Iv });
|
||||
let dataMap = {
|
||||
plat: 1,
|
||||
support_multi: 1,
|
||||
t1: isLite ? t1 : 0,
|
||||
t2: isLite ? t2 : 0,
|
||||
clienttime_ms: dateTime,
|
||||
mobile,
|
||||
key: signParamsKey(dateTime),
|
||||
pk: cryptoRSAEncrypt({ 'clienttime_ms': dateTime, key: encrypt.key }).toUpperCase(),
|
||||
params: encrypt.str,
|
||||
};
|
||||
|
||||
if (params?.userid) dataMap['userid'] = params.userid;
|
||||
|
||||
if (isLite) {
|
||||
dataMap['dfid'] = dfid;
|
||||
dataMap['dev'] = params.cookie?.KUGOU_API_DEV;
|
||||
dataMap['gitversion'] = '5f0b7c4';
|
||||
} else {
|
||||
dataMap['t3'] = 'MCwwLDAsMCwwLDAsMCwwLDA=';
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
baseURL: 'https://loginserviceretry.kugou.com',
|
||||
url: `/v7/login_by_verifycode`,
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
headers: {
|
||||
'support-calm': '1',
|
||||
'User-Agent': 'Android16-1070-11440-130-0-LOGIN-wifi',
|
||||
},
|
||||
cookie: params?.cookie || {},
|
||||
})
|
||||
.then((res) => {
|
||||
const { body } = res;
|
||||
if (body?.status && body?.status === 1) {
|
||||
if (body?.data?.secu_params) {
|
||||
const getToken = cryptoAesDecrypt(body.data.secu_params, encrypt.key);
|
||||
if (typeof getToken === 'object') {
|
||||
res.body.data = { ...body.data, ...getToken };
|
||||
Object.keys(getToken).forEach((key) => res.cookie.push(`${key}=${getToken[key]}`));
|
||||
} else {
|
||||
res.body.data['token'] = getToken;
|
||||
}
|
||||
}
|
||||
res.cookie.push(`t1=${res.body.data['t1']}`);
|
||||
res.cookie.push(`token=${res.body.data['token']}`);
|
||||
res.cookie.push(`userid=${res.body.data?.userid || 0}`);
|
||||
res.cookie.push(`vip_type=${res.body.data?.vip_type || 0}`);
|
||||
res.cookie.push(`vip_token=${res.body.data?.vip_token || ''}`);
|
||||
}
|
||||
resolve(res);
|
||||
})
|
||||
.catch((e) => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
const { cryptoAesEncrypt, cryptoRSAEncrypt } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const clienttime_ms = parseInt(new Date().getTime());
|
||||
const encrypt = cryptoAesEncrypt({ token: params.token || params.cookie?.token });
|
||||
const dataMap = {
|
||||
plat: 1,
|
||||
userid: params.userid || params.cookie?.userid || 0,
|
||||
clienttime_ms,
|
||||
pk: cryptoRSAEncrypt({ clienttime_ms, key: encrypt.key }).toUpperCase(),
|
||||
params: encrypt.str,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://userinfoservice.kugou.com',
|
||||
url: '/v2/get_dev',
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
//登出选定设备
|
||||
const { cryptoAesEncrypt, cryptoRSAEncrypt, appid, clientver, srcappid,signParamsKey } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const clienttime_ms = parseInt(new Date().getTime());
|
||||
const encrypt = cryptoAesEncrypt({ token: params.token || params.cookie?.token });
|
||||
const mid = calculateMid(params.mid)
|
||||
const dateTime = Date.now();
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
clienttime: clienttime_ms,
|
||||
mid: mid,
|
||||
uuid,
|
||||
dfid,
|
||||
plat: 1,
|
||||
userid,
|
||||
token: encrypt,
|
||||
t_mid :guid,
|
||||
t : dateTime,
|
||||
t_appid: 3116,
|
||||
t_clientver: 10597,
|
||||
srcappid,
|
||||
signature: signParamsKey(dateTime),
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/loginservice/v1/dev_logout',
|
||||
encryptType: 'android',
|
||||
method: 'GET',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie,
|
||||
headers: { 'Host':'gateway.kugou.com'}
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,84 @@
|
||||
// 开放平台登录
|
||||
const axios = require('axios');
|
||||
const { wx_appid, wx_secret, cryptoAesDecrypt, cryptoAesEncrypt, cryptoRSAEncrypt, wx_lite_appid, wx_lite_secret, isLite } = require('../util');
|
||||
const appid = isLite ? wx_lite_appid : wx_appid;
|
||||
const secret = isLite ? wx_lite_secret : wx_secret;
|
||||
|
||||
let liteT2Key = 'fd14b35e3f81af3817a20ae7adae7020';
|
||||
let liteT2Iv = '17a20ae7adae7020';
|
||||
let liteT1Key = '5e4ef500e9597fe004bd09a46d8add98';
|
||||
let liteT1Iv = '04bd09a46d8add98';
|
||||
|
||||
const assetsToken = (code) => {
|
||||
return axios({
|
||||
url: 'https://api.weixin.qq.com/sns/oauth2/access_token',
|
||||
method: 'POST',
|
||||
params: { secret, appid, code, grant_type: 'authorization_code' },
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const answer = { status: 500, body: {}, cookie: [] };
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const assetsTokenResp = await assetsToken(params?.code || '');
|
||||
|
||||
if (assetsTokenResp.data?.access_token && assetsTokenResp.data?.openid) {
|
||||
const dateNow = Date.now();
|
||||
const encrypt = cryptoAesEncrypt({ access_token: assetsTokenResp.data.access_token });
|
||||
const pk = cryptoRSAEncrypt({ 'clienttime_ms': dateNow, key: encrypt.key }).toUpperCase();
|
||||
const t2 = cryptoAesEncrypt(
|
||||
`${params.cookie?.KUGOU_API_GUID}|0f607264fc6318a92b9e13c65db7cd3c|${params.cookie?.KUGOU_API_MAC}|${params.cookie?.KUGOU_API_DEV}|${dateNow}`,
|
||||
{ key: liteT2Key, iv: liteT2Iv }
|
||||
);
|
||||
const t1 = cryptoAesEncrypt(`|${dateNow}`, { key: liteT1Key, iv: liteT1Iv });
|
||||
|
||||
const dataMap = {
|
||||
dev: params.cookie?.KUGOU_API_DEV,
|
||||
force_login: 1,
|
||||
partnerid: 36,
|
||||
clienttime_ms: dateNow,
|
||||
t1: isLite ? t1 : 0,
|
||||
t2: isLite ? t2 : 0,
|
||||
t3: 'MCwwLDAsMCwwLDAsMCwwLDA=',
|
||||
openid: assetsTokenResp.data.openid,
|
||||
params: encrypt.str,
|
||||
pk,
|
||||
};
|
||||
|
||||
const response = await useAxios({
|
||||
url: `/v6/login_by_openplat`,
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie,
|
||||
encryptType: 'android',
|
||||
headers: { 'x-router': 'login.user.kugou.com' },
|
||||
});
|
||||
|
||||
if (response.body?.status === 1) {
|
||||
const getToken = cryptoAesDecrypt(response.body.data?.secu_params, encrypt.key);
|
||||
if (typeof getToken === 'object') {
|
||||
response.body.data = { ...response.body.data, ...getToken };
|
||||
Object.keys(getToken).forEach((key) => response.cookie.push(`${key}=${getToken[key]}`));
|
||||
} else {
|
||||
response.body.data['token'] = getToken;
|
||||
response.cookie.push(`token=${getToken}`);
|
||||
}
|
||||
response.cookie.push(`t1=${response.body.data?.t1 ?? ''}`);
|
||||
response.cookie.push(`userid=${response.body.data?.userid || 0}`);
|
||||
response.cookie.push(`vip_type=${response.body.data?.vip_type || 0}`);
|
||||
response.cookie.push(`vip_token=${response.body.data?.vip_token || ''}`);
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: assetsTokenResp.data };
|
||||
reject(answer);
|
||||
}
|
||||
} catch (error) {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: error };
|
||||
reject(answer);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
const { srcappid, appid } = require('../util');
|
||||
|
||||
// 酷狗二维码状态检测
|
||||
// 0 为二维码过期,1 为等待扫码,2 为待确认,4 为授权登录成功(4 状态码下会返回 token)
|
||||
module.exports = (params, useAxios) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
baseURL: 'https://login-user.kugou.com',
|
||||
url: '/v2/get_userinfo_qrcode',
|
||||
method: 'GET',
|
||||
params: { plat: 4, appid, srcappid, qrcode: params?.key },
|
||||
encryptType: 'web',
|
||||
cookie: params?.cookie || {},
|
||||
}).then(resp => {
|
||||
if (resp.body?.data?.status == 4) {
|
||||
resp.cookie.push(`token=${resp.body?.data?.token}`);
|
||||
resp.cookie.push(`userid=${resp.body?.data?.userid}`);
|
||||
}
|
||||
resolve(resp);
|
||||
}).catch(e => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
const qrcode = require('qrcode');
|
||||
// 酷狗二维码生成
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
return new Promise(async (resolve) => {
|
||||
const url = `https://h5.kugou.com/apps/loginQRCode/html/index.html?qrcode=${params.key}`
|
||||
return resolve({
|
||||
code: 200,
|
||||
status: 200,
|
||||
body: {
|
||||
code: 200,
|
||||
data: {
|
||||
url: url,
|
||||
base64: params?.qrimg ? await qrcode.toDataURL(url) : '',
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
const { srcappid, appid } = require('../util');
|
||||
|
||||
// 二维码 key 生成接口
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
baseURL: 'https://login-user.kugou.com',
|
||||
url: '/v2/qrcode',
|
||||
method: 'GET',
|
||||
params: {
|
||||
appid: params?.type === 'web' ? 1014 : 1001,
|
||||
type: 1,
|
||||
plat: 4,
|
||||
qrcode_txt: `https://h5.kugou.com/apps/loginQRCode/html/index.html?appid=${appid}&`,
|
||||
srcappid,
|
||||
},
|
||||
encryptType: 'web',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,79 @@
|
||||
// 刷新登录
|
||||
const { cryptoAesDecrypt, cryptoAesEncrypt, cryptoRSAEncrypt, isLite } = require('../util');
|
||||
|
||||
const key = '90b8382a1bb4ccdcf063102053fd75b8';
|
||||
const iv = 'f063102053fd75b8';
|
||||
|
||||
const liteKey = 'c24f74ca2820225badc01946dba4fdf7';
|
||||
const liteIv = 'adc01946dba4fdf7';
|
||||
|
||||
let liteT2Key = 'fd14b35e3f81af3817a20ae7adae7020';
|
||||
let liteT2Iv = '17a20ae7adae7020';
|
||||
let liteT1Key = '5e4ef500e9597fe004bd09a46d8add98';
|
||||
let liteT1Iv = '04bd09a46d8add98';
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dateNow = Date.now();
|
||||
const token = params?.token || params?.cookie?.token || '';
|
||||
const userid = params?.userid || params?.cookie?.userid || '0';
|
||||
const encrypt = cryptoAesEncrypt({ clienttime: Math.floor(dateNow / 1000), token }, { key: isLite ? liteKey : key, iv: isLite ? liteIv : iv });
|
||||
const encryptParams = cryptoAesEncrypt({});
|
||||
const pk = cryptoRSAEncrypt({ clienttime_ms: dateNow, key: encryptParams.key });
|
||||
|
||||
const t2 = cryptoAesEncrypt(
|
||||
`${params.cookie?.KUGOU_API_GUID}|0f607264fc6318a92b9e13c65db7cd3c|${params.cookie?.KUGOU_API_MAC}|${params.cookie?.KUGOU_API_DEV}|${dateNow}`,
|
||||
{ key: liteT2Key, iv: liteT2Iv }
|
||||
);
|
||||
const t1 = cryptoAesEncrypt(params.cookie?.t1 ? `${params.cookie?.t1}|${dateNow}` : `|${dateNow}`, { key: liteT1Key, iv: liteT1Iv });
|
||||
|
||||
const dataMap = {
|
||||
dfid: params?.cookie?.dfid || '-',
|
||||
p3: encrypt,
|
||||
plat: 1,
|
||||
t1: isLite ? t1 : 0,
|
||||
t2: isLite ? t2 : 0,
|
||||
t3: 'MCwwLDAsMCwwLDAsMCwwLDA=',
|
||||
pk,
|
||||
params: encryptParams.str,
|
||||
userid,
|
||||
clienttime_ms: dateNow,
|
||||
};
|
||||
|
||||
if (isLite) {
|
||||
dataMap['dev'] = params.cookie?.KUGOU_API_DEV;
|
||||
}
|
||||
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
baseURL: 'http://login.user.kugou.com',
|
||||
url: `/v5/login_by_token`,
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie,
|
||||
encryptType: 'android',
|
||||
})
|
||||
.then((res) => {
|
||||
const { body } = res;
|
||||
if (body?.status && body?.status === 1) {
|
||||
if (body?.data?.secu_params) {
|
||||
const getToken = cryptoAesDecrypt(body.data.secu_params, encryptParams.key);
|
||||
if (typeof getToken === 'object') {
|
||||
res.body.data = { ...body.data, ...getToken };
|
||||
Object.keys(getToken).forEach((key) => res.cookie.push(`${key}=${getToken[key]}`));
|
||||
} else {
|
||||
res.body.data['token'] = getToken;
|
||||
}
|
||||
}
|
||||
|
||||
res.cookie.push(`t1=${res.body.data['t1']}`);
|
||||
res.cookie.push(`token=${res.body.data['token']}`);
|
||||
res.cookie.push(`userid=${res.body.data?.userid || 0}`);
|
||||
res.cookie.push(`vip_type=${res.body.data?.vip_type || 0}`);
|
||||
res.cookie.push(`vip_token=${res.body.data?.vip_token || ''}`);
|
||||
}
|
||||
resolve(res);
|
||||
})
|
||||
.catch((e) => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const answer = { status: 500, body: {}, cookie: [] };
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const resp = await axios({ url: `https://long.open.weixin.qq.com/connect/l/qrconnect?f=json&uuid=${params?.uuid || ''}` });
|
||||
|
||||
answer.status = 200;
|
||||
answer.body = resp.data;
|
||||
|
||||
resolve(answer);
|
||||
} catch (err) {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: err };
|
||||
reject(answer);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
const axios = require('axios');
|
||||
const { wx_appid, wx_secret, cryptoMd5, cryptoSha1, randomString, wx_lite_appid, wx_lite_secret, isLite } = require('../util');
|
||||
|
||||
const appid = isLite ? wx_lite_appid : wx_appid;
|
||||
const secret = isLite ? wx_lite_secret : wx_secret;
|
||||
|
||||
const accessToken = () => {
|
||||
return axios({ url: 'https://api.weixin.qq.com/cgi-bin/token', params: { appid, secret, grant_type: 'client_credential' } });
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string} accessToken
|
||||
* @returns
|
||||
*/
|
||||
const ticket = (accessToken) => axios({ url: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket', params: { access_token: accessToken, type: 2 } });
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const answer = { status: 500, body: {}, cookie: [] };
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const accessTokenResp = await accessToken();
|
||||
if (accessTokenResp.data?.access_token) {
|
||||
const ticketResp = await ticket(accessTokenResp.data.access_token);
|
||||
|
||||
if (ticketResp.data?.errcode === 0) {
|
||||
const ticket = ticketResp.data.ticket;
|
||||
const timestamp = Date.now();
|
||||
const noncestr = cryptoMd5(randomString());
|
||||
const signaturePrams = `appid=${appid}&noncestr=${noncestr}&sdk_ticket=${ticket}×tamp=${timestamp}`;
|
||||
const signature = cryptoSha1(signaturePrams);
|
||||
const params = { appid: appid, noncestr, timestamp, scope: 'snsapi_userinfo', signature };
|
||||
const connect = await axios({ url: 'https://open.weixin.qq.com/connect/sdk/qrconnect', params });
|
||||
|
||||
if (connect.data?.errcode === 0) {
|
||||
answer.status = 200;
|
||||
connect.data.qrcode['qrcodeurl'] = `https://open.weixin.qq.com/connect/confirm?uuid=${connect.data.uuid}`;
|
||||
answer.body = connect.data;
|
||||
resolve(answer);
|
||||
} else {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: connect.data };
|
||||
reject(answer);
|
||||
}
|
||||
} else {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: ticketResp.data };
|
||||
reject(answer);
|
||||
}
|
||||
} else {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: accessTokenResp.data };
|
||||
reject(answer);
|
||||
}
|
||||
} catch (e) {
|
||||
answer.status = 502;
|
||||
answer.body = { status: 0, msg: e };
|
||||
reject(answer);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: `/longaudio/v2/album_audios`,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
data: {
|
||||
album_id: params.album_id,
|
||||
area_code: 1,
|
||||
tagid: 0,
|
||||
page: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
},
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'openapi.kugou.com', 'KG-TID': '78' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = (params.album_id || '').split(',').map((s) => ({ album_id: s }));
|
||||
return useAxios({
|
||||
url: `/openapi/v2/broadcast`,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
data: {
|
||||
data,
|
||||
show_album_tag: 1,
|
||||
fields: "album_name,album_id,category,authors,sizable_cover,intro,author_name,trans_param,album_tag,mix_intro,full_intro,is_publish"
|
||||
},
|
||||
cookie: params?.cookie || {},
|
||||
headers: {'KG-TID': '78'}
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: `/longaudio/v1/home_new/daily_recommend`,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
params: { module_id: 1, size: params.pagesize || 30, page: params.page || 1 },
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: `/longaudio/v1/home_new/rank_card_recommend`,
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
params: {platform: 'ios'},
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: `/longaudio/v1/home_new/vip_select_recommend`,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
data: {album_playlist: []},
|
||||
params: {position: '2', clientver: 12329},
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: `/longaudio/v1/home_new/week_new_albums_recommend`,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
data: {album_playlist: []},
|
||||
params: {clientver: 12329},
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
// 歌词获取
|
||||
const { decodeLyrics } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
ver: 1,
|
||||
client: params?.client || 'android',
|
||||
id: params?.id,
|
||||
accesskey: params?.accesskey,
|
||||
fmt: params.fmt || 'krc',
|
||||
charset: 'utf8',
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
baseURL: 'https://lyrics.kugou.com',
|
||||
url: '/download',
|
||||
method: 'GET',
|
||||
params: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
encryptType: 'android',
|
||||
})
|
||||
.then((res) => {
|
||||
if (params?.decode) {
|
||||
if (res.body?.content) {
|
||||
res.body['decodeContent'] = params?.fmt == 'lrc' || Number(res.body?.contenttype) !== 0 ? Buffer.from(res.body?.content, 'base64').toString() : decodeLyrics(res.body.content);
|
||||
resolve(res);
|
||||
return;
|
||||
}
|
||||
}
|
||||
resolve(res);
|
||||
})
|
||||
.catch((e) => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
// 电台 banner
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.cookie?.userid || params?.userid || 0;
|
||||
const dataMap = {
|
||||
isvip: 0,
|
||||
userid,
|
||||
vipType: 0,
|
||||
};
|
||||
return useAxios({
|
||||
baseURL: 'https://adservice.kugou.com',
|
||||
url: '/v3/pc_diantai',
|
||||
data: dataMap,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
const { signParamsKey, appid, clientver } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.cookie?.userid || params?.userid || 0;
|
||||
const token = params?.cookie?.token || params?.token || 0;
|
||||
const vip_type = params?.cookie?.vip_type || params?.vipType || 0;
|
||||
const dateTime = Date.now();
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clienttime: dateTime,
|
||||
mid: params?.cookie?.KUGOU_API_MID,
|
||||
action: params?.action || 'play',
|
||||
recommend_source_locked: 0,
|
||||
song_pool_id: Number(params?.song_pool_id || 0),
|
||||
callerid: 0,
|
||||
m_type: 1,
|
||||
platform: params?.platform || 'ios',
|
||||
area_code: 1,
|
||||
remain_songcnt: Number(params?.remain_songcnt || 0),
|
||||
clientver,
|
||||
is_overplay: params?.is_overplay ? 1 : 0,
|
||||
mode: params?.mode || 'normal',
|
||||
fakem: 'ca981cfc583a4c37f28d2d49000013c16a0a',
|
||||
key: signParamsKey(dateTime),
|
||||
};
|
||||
|
||||
if (userid) {
|
||||
dataMap['userid'] = userid;
|
||||
dataMap['kguid'] = userid;
|
||||
}
|
||||
if (token) dataMap['token'] = token;
|
||||
if (vip_type) dataMap['vip_type'] = vip_type;
|
||||
|
||||
if (params?.hash) dataMap['hash'] = params.hash;
|
||||
if (params?.songid) dataMap['songid'] = params.songid;
|
||||
if (params?.playtime) dataMap['playtime'] = params.playtime;
|
||||
|
||||
return useAxios({
|
||||
url: '/v2/personal_recommend',
|
||||
data: dataMap,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'persnfm.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
// 提交听歌历史
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params?.cookie?.token || '';
|
||||
|
||||
const songs = [{ mxid: Number(params.mxid), op: 1, ot: Number(params.time || Math.floor(Date.now() / 1000)), pc: Number(params.pc || 1) }];
|
||||
const dataMap = { songs, token, userid };
|
||||
|
||||
return useAxios({
|
||||
url: '/playhistory/v1/upload_songs',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
method: 'POST',
|
||||
params: { plat: 3 },
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
// 收藏歌单
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
const clienttime = Math.floor(Date.now() / 1000);
|
||||
|
||||
const dataMap = {
|
||||
userid,
|
||||
token,
|
||||
total_ver: 0,
|
||||
name: params.name,
|
||||
type: params.type || 0,
|
||||
source: params.source === 0 ? 0 : params.source || 1,
|
||||
is_pri: 0,
|
||||
list_create_userid: params.list_create_userid,
|
||||
list_create_listid: params.list_create_listid,
|
||||
list_create_gid: params.list_create_gid || '',
|
||||
from_shupinmv: 0,
|
||||
};
|
||||
|
||||
if (params.type === 0) {
|
||||
dataMap['is_pri'] = params.is_pri || 0;
|
||||
}
|
||||
|
||||
return useAxios({
|
||||
url: '/cloudlist.service/v5/add_list',
|
||||
data: dataMap,
|
||||
params: params.type === 0 ? { last_time: clienttime, last_area: 'gztx', userid, token } : {},
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
const { playlistAesEncrypt, playlistAesDecrypt, rsaEncrypt2, signParamsKey, clientver, appid } = require('../util');
|
||||
|
||||
// 取消收藏歌单
|
||||
module.exports = (params, useAxios) => {
|
||||
const answer = { status: 500, body: {}, cookie: [] };
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
const clienttime = Math.floor(Date.now() / 1000);
|
||||
|
||||
const dataMap = {
|
||||
listid: Number(params.listid),
|
||||
total_ver: 0,
|
||||
type: 1,
|
||||
};
|
||||
|
||||
const aesEncrypt = playlistAesEncrypt(dataMap);
|
||||
|
||||
const p = rsaEncrypt2({ aes: aesEncrypt.key, uid: userid, token }).toUpperCase();
|
||||
|
||||
const paramsMap = {
|
||||
clienttime,
|
||||
key: signParamsKey(clienttime.toString()),
|
||||
last_area: 'gztx',
|
||||
clientver,
|
||||
appid,
|
||||
last_time: clienttime,
|
||||
p,
|
||||
};
|
||||
|
||||
const respone = await useAxios({
|
||||
url: '/v2/delete_list',
|
||||
params: paramsMap,
|
||||
data: aesEncrypt.str,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
headers: { 'x-router': 'cloudlist.service.kugou.com' },
|
||||
responseType: 'arraybuffer',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
|
||||
respone.body = playlistAesDecrypt({ str: respone.body.toString('base64'), key: aesEncrypt.key });
|
||||
|
||||
resolve(respone);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
answer.body = error;
|
||||
resolve(answer);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
// 获取歌单详情
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = (params?.ids || '').split(',').map(s => ({'global_collection_id': s }));
|
||||
|
||||
const dataMap = {
|
||||
data,
|
||||
userid: params?.userid || params?.cookie?.userid || 0,
|
||||
token: params?.token || params?.cookie?.token || ''
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v3/get_list_info',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: {'x-router': 'pubsongs.kugou.com'}
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// 获取音效歌单
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
page: params?.page || 1,
|
||||
pagesize: params?.pagesize || 30,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/pubsongs/v1/get_sound_effect_list',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
const { appid, clientver, signParamsKey } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const data = (params?.ids || '').split(',').map((s) => ({ 'global_collection_id': s }));
|
||||
const clienttime = Date.now();
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
clienttime,
|
||||
key: signParamsKey(clienttime),
|
||||
userid: params?.userid || params?.cookie?.userid || 0,
|
||||
ugc: 1,
|
||||
show_list: 1,
|
||||
need_songs: 1,
|
||||
data,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/pubsongs/v1/kmr_get_similar_lists',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
// 获取歌单分类
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
tag_type: 'collection',
|
||||
tag_id: 0,
|
||||
source: 3,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/pubsongs/v1/get_tags_by_type',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
// 获取歌单所有歌曲
|
||||
module.exports = (params, useAxios) => {
|
||||
const pagesize = params?.pagesize || 30;
|
||||
const paramsMap = {
|
||||
area_code: 1,
|
||||
begin_idx: (Number(params.page || 1) - 1) * pagesize,
|
||||
plat: 1,
|
||||
type: 1,
|
||||
// module: 'NONE',
|
||||
mode: 1,
|
||||
personal_switch: 1,
|
||||
extend_fields: 'abtags,hot_cmt,popularization',
|
||||
// page: params?.page || 1,
|
||||
pagesize ,
|
||||
global_collection_id: params?.id,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/pubsongs/v2/get_other_list_file_nofilt',
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
params: paramsMap,
|
||||
cookie: params?.cookie || {},
|
||||
// headers: { 'x-router': 'pubsongscdn.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
// 获取歌单所有歌曲
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || '0';
|
||||
const token = params?.token || params?.cookie?.token || '0';
|
||||
const dataMap = {
|
||||
listid: params.listid,
|
||||
userid,
|
||||
area_code: 1,
|
||||
show_relate_goods: 0,
|
||||
pagesize: params.pagesize || 30,
|
||||
allplatform: 1,
|
||||
show_cover: 1,
|
||||
type: 0,
|
||||
token,
|
||||
page: params.page || 1,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v4/get_list_all_file',
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'cloudlist.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
// 对歌单添加歌曲
|
||||
// listid, 歌单listid
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
const clienttime = Math.floor(Date.now() / 1000);
|
||||
|
||||
const resource = (params.data || '').split(',').map((s) => {
|
||||
const data = s.split('|');
|
||||
return {
|
||||
number: 1,
|
||||
name: data[0] || '',
|
||||
hash: data[1] || '',
|
||||
size: 0,
|
||||
sort: 0,
|
||||
timelen: 0,
|
||||
bitrate: 0,
|
||||
album_id: Number(data[2] || 0),
|
||||
mixsongid: Number(data[3] || 0),
|
||||
};
|
||||
});
|
||||
|
||||
const dataMap = {
|
||||
userid,
|
||||
token,
|
||||
listid: params.listid,
|
||||
list_ver: 0,
|
||||
type: 0,
|
||||
slow_upload: 1,
|
||||
scene: 'false;null',
|
||||
data: resource,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/cloudlist.service/v6/add_song',
|
||||
data: dataMap,
|
||||
params: { last_time: clienttime, last_area: 'gztx', userid, token },
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
// 对歌单删除歌曲
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
|
||||
const resource = (params.fileids || '').split(',').map((s) => ({ fileid: Number(s) }));
|
||||
|
||||
const dataMap = {
|
||||
listid: params.listid,
|
||||
userid,
|
||||
data: resource,
|
||||
type: 0,
|
||||
token,
|
||||
list_ver: 0,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v4/delete_songs',
|
||||
data: dataMap,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'cloudlist.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
// 获取歌曲信息
|
||||
const { appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const resource = (params?.hash || '').split(',').map((s) => ({ type: 'audio', page_id: 0, hash: s, album_id: 0 }));
|
||||
(params?.album_id || '').split(',').forEach((s, l) => (resource[l]['album_id'] = s));
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
area_code: 1,
|
||||
behavior: 'play',
|
||||
clientver,
|
||||
need_hash_offset: 1,
|
||||
relate: 1,
|
||||
support_verify: 1,
|
||||
resource,
|
||||
qualities: ['128', '320', 'flac', 'high', 'viper_atmos', 'viper_tape', 'viper_clear', 'super', 'multitrack'],
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/v2/get_res_privilege/lite',
|
||||
data: dataMap,
|
||||
method: 'post',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'media.store.kugou.com', 'Content-Type': 'application/json' },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
// 获取排行榜音乐列表
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
show_portrait_mv: 1,
|
||||
show_type_total: 1,
|
||||
filter_original_remarks: 1,
|
||||
area_code: 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
rank_cid: params.rank_cid || 0,
|
||||
type: 1,
|
||||
page: params.page || 1,
|
||||
rank_id: params.rankid,
|
||||
};
|
||||
return useAxios({
|
||||
url: '/openapi/kmr/v2/rank/audio',
|
||||
method: 'post',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'kg-tid': '369' },
|
||||
});
|
||||
};
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// 获取排行榜详情
|
||||
module.exports = (params, useAxios) => {
|
||||
const parmasMap = {
|
||||
rank_cid: params.rank_cid || 0,
|
||||
rankid: params.rankid,
|
||||
with_album_img: params.album_img || 1,
|
||||
zone: params.zone || '',
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/ocean/v6/rank/info',
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
params: parmasMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// 获取排行榜列表
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const parmasMap = {
|
||||
plat: 2,
|
||||
withsong: params.withsong || 1,
|
||||
parentid: 0,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/ocean/v6/rank/list',
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
params: parmasMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// 获取排行榜推荐列表
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/mobileservice/api/v5/rank/rec_rank_list',
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// 获取排行榜往期列表
|
||||
module.exports = (params, useAxios) => {
|
||||
const parmasMap = {
|
||||
rank_cid: params.rank_cid || 0,
|
||||
rankid: params.rankid,
|
||||
ranktype: 1,
|
||||
type: 0,
|
||||
plat: 2,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/ocean/v6/rank/vol',
|
||||
method: 'get',
|
||||
encryptType: 'android',
|
||||
params: parmasMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
// 每日推荐歌曲
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
platform: params?.platform || 'android',
|
||||
userid: params?.userid || params?.cookie?.userid || '0',
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/everyday_song_recommend',
|
||||
method: 'POST',
|
||||
data: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
headers: { 'x-router': 'everydayrec.service.kugou.com' },
|
||||
});
|
||||
};
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
const { playlistAesEncrypt, playlistAesDecrypt, rsaEncrypt2, signParamsKey, clientver, appid } = require('../util');
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
//可用内存,单位是字节
|
||||
const availableRamSize = params?.availableRamSize || 4983533568;
|
||||
//内部存储可用空间,单位是字节(约 48 MB)
|
||||
const availableRomSize = params?.availableRomSize || 48114719;
|
||||
//外部存储可用空间,单位是字节(约 48 MB)
|
||||
const availableSDSize = params?.availableSDSize || 48114717;
|
||||
//基带版本
|
||||
const basebandVer = params?.basebandVer || '';
|
||||
//电池电量百分比
|
||||
const batteryLevel = params?.batteryLevel || 100;
|
||||
//电池状态
|
||||
const batteryStatus = params?.batteryStatus || 3;
|
||||
//品牌
|
||||
const brand = params?.brand || 'Redmi';
|
||||
//设备序号
|
||||
const buildSerial = params?.buildSerial || 'unknown';
|
||||
//设备代号
|
||||
const device = params?.device || 'marble';
|
||||
//IMEI 号
|
||||
const imei = params?.imei || params.cookie?.KUGOU_API_GUID;
|
||||
//sim 卡号序号
|
||||
const imsi = params?.imsi || '';
|
||||
//厂商
|
||||
const manufacturer = params?.manufacturer || 'Xiaomi';
|
||||
//设备uuid
|
||||
const uuid = params?.uuid || params.cookie?.KUGOU_API_GUID;
|
||||
//是否有加速度传感器
|
||||
const accelerometer = params?.accelerometer || false;
|
||||
//加速度传感器值
|
||||
const accelerometerValue = params?.accelerometerValue || '';
|
||||
//是否有重力传感器
|
||||
const gravity = params?.gravity || false;
|
||||
//重力传感器的值
|
||||
const gravityValue = params?.gravityValue || '';
|
||||
//是否有陀螺仪
|
||||
const gyroscope = params?.gyroscope || false;
|
||||
//陀螺仪的值
|
||||
const gyroscopeValue = params?.gyroscopeValue || '';
|
||||
//是否有光线传感器
|
||||
const light = params?.light || false;
|
||||
//光线传感器的值
|
||||
const lightValue = params?.lightValue || '';
|
||||
//是否有磁力传感器
|
||||
const magnetic = params?.magnetic || false;
|
||||
//磁力传感器的值
|
||||
const magneticValue = params?.magneticValue || '';
|
||||
//是否有方向传感器
|
||||
const orientation = params?.orientation || false;
|
||||
//方向传感器的值
|
||||
const orientationValue = params?.orientationValue || '';
|
||||
//是否有压力传感器
|
||||
const pressure = params?.pressure|| false;
|
||||
//压力传感器的值
|
||||
const pressureValue = params?.pressureValue || '';
|
||||
//是否有步数传感器
|
||||
const step_counter = params?.step_counter || false;
|
||||
//步数传感器的值
|
||||
const step_counterValue = params?.step_counterValue || '';
|
||||
//是否有温度传感器
|
||||
const temperature = params?.temperature || false;
|
||||
//温度传感器的值
|
||||
const temperatureValue = params?.temperatureValue || '';
|
||||
|
||||
|
||||
|
||||
const dataMap = {
|
||||
'availableRamSize': availableRamSize,
|
||||
'availableRomSize': availableRomSize,
|
||||
'availableSDSize': availableSDSize,
|
||||
'basebandVer': basebandVer,
|
||||
'batteryLevel': batteryLevel,
|
||||
'batteryStatus': batteryStatus,
|
||||
'brand': brand,
|
||||
'buildSerial': buildSerial,
|
||||
'device': device,
|
||||
'imei': imei,
|
||||
'imsi': imsi,
|
||||
'manufacturer': manufacturer,
|
||||
'uuid': uuid,
|
||||
'accelerometer': accelerometer,
|
||||
'accelerometerValue': accelerometerValue,
|
||||
'gravity': gravity,
|
||||
'gravityValue': gravityValue,
|
||||
'gyroscope': gyroscope,
|
||||
'gyroscopeValue': gyroscopeValue,
|
||||
'light': light,
|
||||
'lightValue': lightValue,
|
||||
'magnetic': magnetic,
|
||||
'magneticValue': magneticValue,
|
||||
'orientation': orientation,
|
||||
'orientationValue': orientationValue,
|
||||
'pressure': pressure,
|
||||
'pressureValue': pressureValue,
|
||||
'step_counter': step_counter,
|
||||
'step_counterValue': step_counterValue,
|
||||
'temperature': temperature,
|
||||
'temperatureValue': temperatureValue,
|
||||
};
|
||||
|
||||
const aesEncrypt = playlistAesEncrypt(dataMap);
|
||||
|
||||
const p = rsaEncrypt2({ aes: aesEncrypt.key, uid: userid, token });
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
useAxios({
|
||||
baseURL: 'https://userservice.kugou.com',
|
||||
url: '/risk/v2/r_register_dev',
|
||||
method: 'POST',
|
||||
data: aesEncrypt.str,
|
||||
params: { part: 1, platid: 1, p },
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
responseType: 'arraybuffer',
|
||||
})
|
||||
.then((res) => {
|
||||
res.body = playlistAesDecrypt({ str: res.body.toString('base64'), key: aesEncrypt.key });
|
||||
|
||||
const { body } = res;
|
||||
if (body?.status === 1 && body?.data) {
|
||||
res.cookie.push(`dfid=${res.body.data['dfid']}`);
|
||||
}
|
||||
|
||||
resolve(res);
|
||||
})
|
||||
.catch((e) => reject(e));
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
const { appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
token,
|
||||
userid,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/scene/v1/scene/audio_list',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
params: { scene_id: params.id, module_id: params.module_id, tag: params.tag, page: params.page || 1, page_size: params.pagesize || 30 },
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
const { appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
token,
|
||||
userid,
|
||||
tag_id: params.tag_id,
|
||||
page: params.page || 1,
|
||||
page_size: params.pagesize || 30,
|
||||
exposed_data: [],
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/scene/v1/distribution/collection_list',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/scene/v1/scene/list',
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || '0';
|
||||
|
||||
const sortType = { rec: 1, hot: 2, new: 3 };
|
||||
|
||||
return useAxios({
|
||||
url: '/scene/v1/scene/list_v2',
|
||||
params: {
|
||||
scene_id: params.id,
|
||||
page: params.page || 1,
|
||||
pagesize: params.pagesize || 30,
|
||||
sort_type: sortType[params.sort || 'rec'] || 1,
|
||||
kugouid: userid,
|
||||
},
|
||||
data: { exposure: [] },
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/scene/v1/scene/module',
|
||||
params: { scene_id: params.id },
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/scene/v1/scene/module_info',
|
||||
params: { scene_id: params.id, module_id: params.module_id },
|
||||
method: 'GET',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
module.exports = (params, useAxios) => {
|
||||
return useAxios({
|
||||
url: '/genesisapi/v1/scene_music/rec_music',
|
||||
params: { scene_id: params.id, page: params.page || 1, pagesize: params.pagesize || 30 },
|
||||
data: { exposure: [] },
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
const { appid, clientver } = require('../util');
|
||||
|
||||
module.exports = (params, useAxios) => {
|
||||
const userid = params?.userid || params?.cookie?.userid || 0;
|
||||
const token = params?.token || params.cookie?.token || '';
|
||||
|
||||
const dataMap = {
|
||||
appid,
|
||||
clientver,
|
||||
token,
|
||||
userid,
|
||||
tag_id: params.tag_id,
|
||||
page: params.page || 1,
|
||||
page_size: params.pagesize || 30,
|
||||
exposed_data: [],
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
url: '/scene/v1/distribution/video_list',
|
||||
method: 'POST',
|
||||
encryptType: 'android',
|
||||
data: dataMap,
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// 搜索
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
// token: '',
|
||||
albumhide: 0,
|
||||
iscorrection: 1,
|
||||
keyword: params?.keywords || '',
|
||||
nocollect: 0,
|
||||
page: params?.page || 1,
|
||||
pagesize: params?.pagesize || 30,
|
||||
platform: 'AndroidFilter',
|
||||
};
|
||||
|
||||
|
||||
const type = ['special', 'lyric', 'song', 'album', 'author', 'mv'].includes(params.type) ? params.type : 'song';
|
||||
|
||||
return useAxios({
|
||||
url: `/${type === 'song' ? 'v3' : 'v1'}/search/${type}`,
|
||||
method: 'GET',
|
||||
params: dataMap,
|
||||
encryptType: 'android',
|
||||
headers: { 'x-router': 'complexsearch.kugou.com' },
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
// 综合搜索
|
||||
module.exports = (params, useAxios) => {
|
||||
const dataMap = {
|
||||
platform: 'AndroidFilter',
|
||||
keyword: params.keywords,
|
||||
page: params?.page || 1,
|
||||
pagesize: params?.pagesize || 30,
|
||||
cursor: 0,
|
||||
};
|
||||
|
||||
return useAxios({
|
||||
baseURL: 'https://complexsearch.kugou.com',
|
||||
url: '/v6/search/complex',
|
||||
method: 'GET',
|
||||
params: dataMap,
|
||||
encryptType: 'android',
|
||||
cookie: params?.cookie || {},
|
||||
});
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user