123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- // 小枸音乐
- "use strict";
- Object.defineProperty(exports, "__esModule", {value: true});
- const axios_1 = require("axios");
- const cheerio_1 = require("cheerio");
- const CryptoJs = require("crypto-js");
- const he = require("he");
- const pageSize = 20;
- function formatMusicItem(_) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
- return {
- id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,
- title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,
- artist: (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,
- album: (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,
- album_id: (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,
- album_audio_id: 0,
- duration: _.Duration,
- artwork: ((_f = _.Image) !== null && _f !== void 0 ? _f : _.Grp[0].Image).replace("{size}", "1080"),
- "320hash": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,
- sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,
- ResFileHash: (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined,
- };
- }
- function formatMusicItem2(_) {
- var _a, _b, _c, _d, _e, _f, _g;
- return {
- id: _.hash,
- title: _.songname,
- artist: (_a = _.singername) !== null && _a !== void 0 ? _a : (((_c = (_b = _.authors) === null || _b === void 0 ? void 0 : _b.map((_) => {
- var _a;
- return (_a = _ === null || _ === void 0 ? void 0 : _.author_name) !== null && _a !== void 0 ? _a : "";
- })) === null || _c === void 0 ? void 0 : _c.join(", ")) ||
- ((_f = (_e = (_d = _.filename) === null || _d === void 0 ? void 0 : _d.split("-")) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.trim())),
- album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,
- album_id: _.album_id,
- album_audio_id: _.album_audio_id,
- artwork: _.album_sizable_cover
- ? _.album_sizable_cover.replace("{size}", "400")
- : undefined,
- duration: _.duration,
- "320hash": _["320hash"],
- sqhash: _.sqhash,
- origin_hash: _.origin_hash,
- };
- }
- function formatImportMusicItem(_) {
- var _a, _b, _c, _d, _e, _f, _g;
- let title = _.name;
- const singerName = _.singername;
- if (singerName && title) {
- const index = title.indexOf(singerName);
- if (index !== -1) {
- title = (_a = title.substring(index + singerName.length + 2)) === null || _a === void 0 ? void 0 : _a.trim();
- }
- if (!title) {
- title = singerName;
- }
- }
- const qualites = _.relate_goods;
- return {
- id: _.hash,
- title,
- artist: singerName,
- album: (_b = _.albumname) !== null && _b !== void 0 ? _b : "",
- album_id: _.album_id,
- album_audio_id: _.album_audio_id,
- artwork: (_d = (_c = _ === null || _ === void 0 ? void 0 : _.info) === null || _c === void 0 ? void 0 : _c.image) === null || _d === void 0 ? void 0 : _d.replace("{size}", "400"),
- "320hash": (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) === null || _e === void 0 ? void 0 : _e.hash,
- sqhash: (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) === null || _f === void 0 ? void 0 : _f.hash,
- origin_hash: (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) === null || _g === void 0 ? void 0 : _g.hash,
- };
- }
- const headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
- Accept: "*/*",
- "Accept-Encoding": "gzip, deflate",
- "Accept-Language": "zh-CN,zh;q=0.9",
- };
- async function searchMusic(query, page) {
- const res = (await axios_1.default.get("https://songsearch.kugou.com/song_search_v2", {
- headers,
- params: {
- keyword: query,
- page,
- pagesize: pageSize,
- userid: 0,
- clientver: "",
- platform: "WebFilter",
- filter: 2,
- iscorrection: 1,
- privilege_filter: 0,
- area_code: 1,
- },
- })).data;
- const songs = res.data.lists.map(formatMusicItem);
- return {
- isEnd: page * pageSize >= res.data.total,
- data: songs,
- };
- }
- async function searchAlbum(query, page) {
- const res = (await axios_1.default.get("http://msearch.kugou.com/api/v3/search/album", {
- headers,
- params: {
- version: 9108,
- iscorrection: 1,
- highlight: "em",
- plat: 0,
- keyword: query,
- pagesize: 20,
- page,
- sver: 2,
- with_res_tag: 0,
- },
- })).data;
- const albums = res.data.info.map((_) => {
- var _a, _b;
- return ({
- id: _.albumid,
- artwork: (_a = _.imgurl) === null || _a === void 0 ? void 0 : _a.replace("{size}", "400"),
- artist: _.singername,
- title: (0, cheerio_1.load)(_.albumname).text(),
- description: _.intro,
- date: (_b = _.publishtime) === null || _b === void 0 ? void 0 : _b.slice(0, 10),
- });
- });
- return {
- isEnd: page * 20 >= res.data.total,
- data: albums,
- };
- }
- async function searchMusicSheet(query, page) {
- const res = (await axios_1.default.get("http://mobilecdn.kugou.com/api/v3/search/special", {
- headers,
- params: {
- format: "json",
- keyword: query,
- page,
- pagesize: pageSize,
- showtype: 1,
- },
- })).data;
- const sheets = res.data.info.map(item => ({
- title: item.specialname,
- createAt: item.publishtime,
- description: item.intro,
- artist: item.nickname,
- coverImg: item.imgurl,
- gid: item.gid,
- playCount: item.playcount,
- id: item.specialid,
- worksNum: item.songcount
- }));
- return {
- isEnd: page * pageSize >= res.data.total,
- data: sheets,
- };
- }
- const qualityLevels = {
- low: "128k",
- standard: "320k",
- high: "320k",
- super: "320k",
- };
- async function getMediaSource(musicItem, quality) {
- const res = (
- await axios_1.default.get(`https: //render.niuma666bet.buzz/url/kg/${musicItem.id}/${qualityLevels[quality]}`, {
- headers: {
- "X-Request-Key": "share-v2"
- },
- })
- ).data;
- return {
- url: res.url,
- };
- }
- async function getTopLists() {
- const lists = (await axios_1.default.get("http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0", {
- headers: headers,
- })).data.data.info;
- const res = [
- {
- title: "热门榜单",
- data: [],
- },
- {
- title: "特色音乐榜",
- data: [],
- },
- {
- title: "全球榜",
- data: [],
- },
- ];
- const extra = {
- title: "其他",
- data: [],
- };
- lists.forEach((item) => {
- var _a, _b, _c, _d;
- if (item.classify === 1 || item.classify === 2) {
- res[0].data.push({
- id: item.rankid,
- description: item.intro,
- coverImg: (_a = item.imgurl) === null || _a === void 0 ? void 0 : _a.replace("{size}", "400"),
- title: item.rankname,
- });
- } else if (item.classify === 3 || item.classify === 5) {
- res[1].data.push({
- id: item.rankid,
- description: item.intro,
- coverImg: (_b = item.imgurl) === null || _b === void 0 ? void 0 : _b.replace("{size}", "400"),
- title: item.rankname,
- });
- } else if (item.classify === 4) {
- res[2].data.push({
- id: item.rankid,
- description: item.intro,
- coverImg: (_c = item.imgurl) === null || _c === void 0 ? void 0 : _c.replace("{size}", "400"),
- title: item.rankname,
- });
- } else {
- extra.data.push({
- id: item.rankid,
- description: item.intro,
- coverImg: (_d = item.imgurl) === null || _d === void 0 ? void 0 : _d.replace("{size}", "400"),
- title: item.rankname,
- });
- }
- });
- if (extra.data.length !== 0) {
- res.push(extra);
- }
- return res;
- }
- async function getTopListDetail(topListItem) {
- const res = await axios_1.default.get(`http: //mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`, {
- headers,
- });
- return Object.assign(Object.assign({}, topListItem), {musicList: res.data.data.info.map(formatMusicItem2)});
- }
- async function getLyricDownload(lyrdata) {
- const result = (await (0, axios_1.default)({
- // url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=krc&charset=utf8`,
- url: `http: //lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,
- headers: {
- 'KG-RC': 1,
- 'KG-THash': 'expand_search_manager.cpp:852736169:451',
- 'User-Agent': 'KuGou2012-9020-ExpandSearchManager',
- },
- method: "get",
- xsrfCookieName: "XSRF-TOKEN",
- withCredentials: true,
- })).data;
- return {
- rawLrc: he.decode(CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)),
- };
- }
- // copy from lxmusic https://github.com/lyswhut/lx-music-desktop/blob/master/src/renderer/utils/musicSdk/kg/lyric.js#L114
- async function getLyric(musicItem) {
- const result = (await (0, axios_1.default)({
- url: `http: //lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,
- headers: {
- 'KG-RC': 1,
- 'KG-THash': 'expand_search_manager.cpp:852736169:451',
- 'User-Agent': 'KuGou2012-9020-ExpandSearchManager',
- },
- method: "get",
- xsrfCookieName: "XSRF-TOKEN",
- withCredentials: true,
- })).data;
- const info = result.candidates[0];
- return await getLyricDownload({
- id: info.id, accessKey: info.accesskey
- })
- }
- async function getAlbumInfo(albumItem, page = 1) {
- const res = (await axios_1.default.get("http://mobilecdn.kugou.com/api/v3/album/song", {
- params: {
- version: 9108,
- albumid: albumItem.id,
- plat: 0,
- pagesize: 100,
- area_code: 1,
- page,
- with_res_tag: 0,
- },
- })).data;
- return {
- isEnd: page * 100 >= res.data.total,
- albumItem: {
- worksNum: res.data.total,
- },
- musicList: res.data.info.map((_) => {
- var _a;
- const [artist, songname] = _.filename.split("-");
- return {
- id: _.hash,
- title: songname.trim(),
- artist: artist.trim(),
- album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,
- album_id: _.album_id,
- album_audio_id: _.album_audio_id,
- artwork: albumItem.artwork,
- "320hash": _.HQFileHash,
- sqhash: _.SQFileHash,
- origin_hash: _.id,
- };
- }),
- };
- }
- async function importMusicSheet(urlLike) {
- var _a;
- let id = (_a = urlLike.match(/^(?: .*?)(\d+)(?: .*?)$/)) === null || _a === void 0 ? void 0 : _a[1];
- let musicList = [];
- if (!id) {
- return;
- }
- let res = await axios_1.default.post(`http: //t.kugou.com/command/`, {
- appid: 1001,
- clientver: 9020,
- mid: "21511157a05844bd085308bc76ef3343",
- clienttime: 640612895,
- key: "36164c4015e704673c588ee202b9ecb8",
- data: id,
- });
- if (res.status === 200 && res.data.status === 1) {
- let data = res.data.data;
- let response = await axios_1.default.post(`http: //www2.kugou.kugou.com/apps/kucodeAndShare/app/`, {
- appid: 1001,
- clientver: 10112,
- mid: "70a02aad1ce4648e7dca77f2afa7b182",
- clienttime: 722219501,
- key: "381d7062030e8a5a94cfbe50bfe65433",
- data: {
- id: data.info.id,
- type: 3,
- userid: data.info.userid,
- collect_type: data.info.collect_type,
- page: 1,
- pagesize: data.info.count,
- },
- });
- if (response.status === 200 && response.data.status === 1) {
- let resource = [];
- response.data.data.forEach((song) => {
- resource.push({
- album_audio_id: 0,
- album_id: "0",
- hash: song.hash,
- id: 0,
- name: song.filename.replace(".mp3", ""),
- page_id: 0,
- type: "audio",
- });
- });
- let postData = {
- appid: 1001,
- area_code: "1",
- behavior: "play",
- clientver: "10112",
- dfid: "2O3jKa20Gdks0LWojP3ly7ck",
- mid: "70a02aad1ce4648e7dca77f2afa7b182",
- need_hash_offset: 1,
- relate: 1,
- resource,
- token: "",
- userid: "0",
- vip: 0,
- };
- var result = await axios_1.default.post(`https: //gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`, postData, {
- headers: {
- "x-router": "media.store.kugou.com",
- },
- });
- if (response.status === 200 && response.data.status === 1) {
- musicList = result.data.data
- .map(formatImportMusicItem);
- }
- }
- }
- return musicList;
- }
- module.exports = {
- platform: "小枸音乐",
- version: "0.2.0",
- author: 'Huibq',
- appVersion: ">0.1.0-alpha.0",
- srcUrl: "https://raw.niuma666bet.buzz/Huibq/keep-alive/master/Music_Free/xiaogou.js",
- cacheControl: "no-cache",
- description: "",
- primaryKey: ["id", "album_id", "album_audio_id"],
- hints: {
- importMusicSheet: [
- "仅支持酷狗APP通过酷狗码导入,输入纯数字酷狗码即可。",
- "导入时间和歌单大小有关,请耐心等待",
- ],
- },
- supportedSearchType: ["music", "album", "sheet"],
- async search(query, page, type) {
- if (type === "music") {
- return await searchMusic(query, page);
- } else if (type === "album") {
- return await searchAlbum(query, page);
- } else if (type === "sheet") {
- return await searchMusicSheet(query, page);
- }
- },
- getMediaSource,
- getTopLists,
- getLyric,
- getTopListDetail,
- getAlbumInfo,
- importMusicSheet,
- };
|