diff --git a/README.md b/README.md index cd94049..571297f 100644 --- a/README.md +++ b/README.md @@ -162,10 +162,10 @@ $ $Env:HOST=127.0.0.1; npm run dev 46. 乐库 banner 47. 乐库电台 48. 乐库 -49. 推荐频道 -50. 频道 -51. 频道图片 -52. 频道歌曲 +49. 电台 - 推荐 +50. 电台 +51. 电台 - 图片 +52. 电台 - 音乐列表 53. 编辑精选 54. 编辑精选数据 55. 编辑精选歌单 @@ -212,6 +212,21 @@ $ $Env:HOST=127.0.0.1; npm run dev 96. 获取服务器时间 97. 刷刷 98. AI 推荐 +99. 频道 - 获取用户所有频道 +100. 频道 - 详情 +101. 频道 - 频道安利 +102. 频道 - 相似频道 +103. 频道 - 订阅 +104. 频道 - 音乐故事 +105. 频道 - 音乐故事详情 +106. 动态 - 最常访问 +107. 获取用户公开的音乐 +108. 听书 - 每日推荐 +109. 听书 - 排行榜推荐 +110. 听书 - VIP 推荐 +111. 听书 - 每周推荐 +112. 听书 - 专辑详情 +113. 听书 - 专辑音乐列表 ## License diff --git a/docs/README.md b/docs/README.md index aa50026..14decd9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -75,10 +75,10 @@ 46. [`乐库 banner`](#乐库-banner) 47. [`乐库电台`](#乐库电台) 48. [`乐库`](#乐库) -49. [`推荐频道`](#推荐频道) -50. [`频道`](#频道) -51. [`频道图片`](#频道图片) -52. [`频道歌曲`](#频道歌曲) +49. [`电台 - 推荐`](#电台---推荐) +50. [`电台`](#电台) +51. [`电台 - 图片`](#电台---图片) +52. [`电台 - 音乐列表`](#电台---音乐列表) 53. [`编辑精选`](#编辑精选) 54. [`编辑精选数据`](#编辑精选数据) 55. [`编辑精选歌单`](#编辑精选歌单) @@ -125,6 +125,21 @@ 96. [`获取服务器时间`](#获取服务器时间) 97. [`刷刷`](#刷刷) 98. [`AI 推荐`](#ai-推荐) +99. [`频道 - 获取用户所有频道`](#频道---获取用户所有频道) +100. [`频道 - 详情`](#频道---详情) +101. [`频道 - 频道安利`](#频道---频道安利) +102. [`频道 - 相似频道`](#频道---相似频道) +103. [`频道 - 订阅`](#频道---订阅) +104. [`频道 - 音乐故事`](#频道---音乐故事) +105. [`频道 - 音乐故事详情`](#频道---音乐故事详情) +106. [`动态 - 最常访问`](#动态---最常访问) +107. [`获取用户公开的音乐`](#获取用户公开的音乐) +108. [`听书 - 每日推荐`](#听书---每日推荐) +109. [`听书 - 排行榜推荐`](#听书---排行榜推荐) +110. [`听书 - VIP 推荐`](#听书---vip-推荐) +111. [`听书 - 每周推荐`](#听书---每周推荐) +112. [`听书 - 专辑详情`](#听书---专辑详情) +113. [`听书 - 专辑音乐列表`](#听书---专辑音乐列表) ### 安装 @@ -233,6 +248,8 @@ $ set HOST=127.0.0.1 && npm run dev #### 更新记录 +24-07-14: 添加 频道、听书等多个接口。 + 24-07-14: 添加 刷刷、AI 推荐 接口,更新 提交听歌历史 接口。 24-06-30: 添加 获取歌手列表 接口 @@ -1013,7 +1030,7 @@ vip 专属推荐 **可选参数** -`fields`: 可以传 `album_info` `authors.base` `base` `audio_info`, 每个 field 以逗号分开 +`fields`: 可以传 `album_info` `authors.base` `base` `audio_info`, `authors.ip`, `extra`, `tags`, `tagmap` 每个 field 以逗号分开 **接口地址:** `/krm/audio` @@ -1077,25 +1094,25 @@ vip 专属推荐 **调用例子:** `/yueku` -### 推荐频道 +### 电台 -说明 : 调用此接口 , 可获取推荐频道数据 +说明 : 调用此接口 , 可获取所有电台数据 -**接口地址:** `/fm/recommend` +**接口地址:** `/fm/class` -**调用例子:** `/fm/recommend` +**调用例子:** `/fm/class` -### 频道 +### 电台 - 推荐 -说明 : 调用此接口 , 可获取所有频道数据 +说明 : 调用此接口 , 可获取推荐电台 -**接口地址:** `/fm/class` +**接口地址:** `/fm/recommend` -**调用例子:** `/fm/class` +**调用例子:** `/fm/recommend` -### 频道图片 +### 电台 - 图片 -说明 : 调用此接口 , 可获取对应频道的图片 +说明 : 调用此接口 , 可获取对应电台的图片 **必选参数:** @@ -1105,9 +1122,9 @@ vip 专属推荐 **调用例子:** `/fm/image?fmid=693` `/fm/image?fmid=693,37` -### 获取频道音乐列表 +### 电台 - 音乐列表 -说明 : 调用此接口 , 可获取对应频道的音乐列表 +说明 : 调用此接口 , 可获取对应电台的音乐列表 **必选参数:** @@ -1829,6 +1846,180 @@ fields: 支持多个,每个以逗号分隔,支持的值有:mkv,tags,h264,h **调用例子:** `/ai/recommend?album_audio_id=274565080` `/ai/recommend?album_audio_id=274565080,68435124` +### 频道 - 获取用户所有频道 + +说明:登录后调用此接口,可以获取用户所有订阅的频道 + +**可选参数:** + +`page`:页数 + +`pagesize `: 每页页数, 默认为 30 + +**接口地址:** `/youth/channel/all` + +**调用例子:** `/youth/channel/all` + +### 频道 - 详情 + +说明:调用此接口,传入 `global_collection_id / channel_id` 可以获取频道详情 + +**必选参数:** + +`global_collection_id`:频道 id (global_collection_id / channel_id 均可以), 可以传多个,每个以逗号分开, + +**接口地址:** `/youth/channel/detail` + +**调用例子:** `/youth/channel/detail?global_collection_id=11576464149` + +### 频道 - 频道安利 + +说明:调用此接口,传入 `global_collection_id / channel_id` 可以获取频道安利 + +**必选参数:** + +`global_collection_id`:频道 id (global_collection_id / channel_id 均可以) + +**接口地址:** `/youth/channel/amway` + +**调用例子:** `/youth/channel/amway?global_collection_id=11576464149` + +### 频道 - 相似频道 + +说明:调用此接口,传入 `global_collection_id / channel_id` 可以获取相似频道 + +**必选参数:** + +`channel_id`:频道 id (global_collection_id / channel_id 均可以) + +**接口地址:** `/youth/channel/similar` + +**调用例子:** `/youth/channel/similar?channel_id=11576464149` + +### 频道 - 订阅 + +说明:登录后调用此接口, 传入 `global_collection_id / channel_id` 可订阅频道 + +**必选参数:** + +`global_collection_id`:频道 id (global_collection_id / channel_id 均可以) + +**可选参数:** + +`t`:1 为订阅,0 为取消订阅,不传默认为订阅 + +**接口地址:** `/youth/channel/sub` + +**调用例子:** `/youth/channel/sub?global_collection_id=11576464149` `/youth/channel/sub?global_collection_id=11576464149&t=0` + +### 频道 - 音乐故事 + +说明:调用此接口,传入 `global_collection_id / channel_id` 可以获取音乐故事 + +**必选参数:** + +`global_collection_id`:频道 id (global_collection_id / channel_id 均可以) + +**可选参数:** + +`page`:页数 + +`pagesize `: 每页页数, 默认为 30 + +**接口地址:** `/youth/channel/song` + +**调用例子:** `/youth/channel/song?global_collection_id=11576464149` + +### 频道 - 音乐故事详情 + +说明:调用此接口,传入 `global_collection_id / channel_id` 和 `fileid` 可以获取音乐故事详情 + +**必选参数:** + +`global_collection_id`:频道 id (global_collection_id / channel_id 均可以) + +`fileid`: 音乐故事 fileid + +**接口地址:** `/youth/channel/song/detail` + +**调用例子:** `/youth/channel/song/detail?global_collection_id=11576464149&fileid=1720958083456581` + +### 动态 - 最常访问 + +说明:登录后调用此接口,可以获取经常访问的频道和用户 + +**接口地址:** `/youth/dynamic/recent` + +**调用例子:** `/youth/dynamic/recent` + +### 获取用户公开的音乐 + +说明:调用此接口,可以获取用户公开的音乐 + +**必选参数:** + +`userid`:用户 id + +**可选参数:** + +`page`:页数 + +`pagesize `: 每页页数, 默认为 30 + +**接口地址:** `/youth/user/song` + +**调用例子:** `/youth/user/song?userid=1354894105` + +### 听书 - 每日推荐 + +**可选参数:** + +`page`:页数 + +`pagesize `: 每页页数, 默认为 30 + +**接口地址:** `/longaudio/daily/recommend` + +**调用例子:** `/longaudio/daily/recommend` + +### 听书 - 排行榜推荐 + +**接口地址:** `/longaudio/rank/recommend` + +**调用例子:** `/longaudio/rank/recommend` + +### 听书 - VIP 推荐 + +**接口地址:** `/longaudio/vip/recommend` + +**调用例子:** `/longaudio/vip/recommend` + +### 听书 - 每周推荐 + +**接口地址:** `/longaudio/week/recommend` + +**调用例子:** `/longaudio/week/recommend` + +### 听书 - 专辑详情 + +**必选参数:** + +`album_id`: 专辑 id 可以传多个,每个以逗号分开, + +**接口地址:** `/longaudio/album/detail` + +**调用例子:** `/longaudio/album/detail?album_id=56655759` + +### 听书 - 专辑音乐列表 + +**必选参数:** + +`album_id`: 专辑 id 可以传多个 + +**接口地址:** `/longaudio/album/audios` + +**调用例子:** `/longaudio/album/audios?album_id=56655759` + ## License [The MIT License (MIT)](https://github.com/MakcRe/KuGouMusicApi/blob/main/LICENSE) diff --git a/module/longaudio_album_audios.js b/module/longaudio_album_audios.js new file mode 100644 index 0000000..3073b0b --- /dev/null +++ b/module/longaudio_album_audios.js @@ -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' }, + }); +}; diff --git a/module/longaudio_album_detail.js b/module/longaudio_album_detail.js new file mode 100644 index 0000000..4e10c69 --- /dev/null +++ b/module/longaudio_album_detail.js @@ -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'} + }); +}; diff --git a/module/longaudio_daily_recommend.js b/module/longaudio_daily_recommend.js new file mode 100644 index 0000000..1e7497e --- /dev/null +++ b/module/longaudio_daily_recommend.js @@ -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 || {}, + }); +}; diff --git a/module/longaudio_rank_recommend.js b/module/longaudio_rank_recommend.js new file mode 100644 index 0000000..bb738ff --- /dev/null +++ b/module/longaudio_rank_recommend.js @@ -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 || {}, + }); +}; diff --git a/module/longaudio_vip_recommend.js b/module/longaudio_vip_recommend.js new file mode 100644 index 0000000..de5fe91 --- /dev/null +++ b/module/longaudio_vip_recommend.js @@ -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 || {}, + }); +}; diff --git a/module/longaudio_week_recommend.js b/module/longaudio_week_recommend.js new file mode 100644 index 0000000..2a610f8 --- /dev/null +++ b/module/longaudio_week_recommend.js @@ -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 || {}, + }); +}; diff --git a/module/top_ip.js b/module/top_ip.js index c71ee68..d62fb81 100644 --- a/module/top_ip.js +++ b/module/top_ip.js @@ -14,7 +14,7 @@ module.exports = (params, useAxios) => { method: 'POST', data: dataMap, params: { - apiver: 3, + clientver: 12349, area_code: 1, }, cookie: params?.cookie || {}, diff --git a/module/youth_channel_all.js b/module/youth_channel_all.js new file mode 100644 index 0000000..aba1e92 --- /dev/null +++ b/module/youth_channel_all.js @@ -0,0 +1,9 @@ +module.exports = (params, useAxios) => { + return useAxios({ + url: '/youth/v2/channel/channel_all_list', + encryptType: 'android', + method: 'get', + params: { page: params.page || 1, pagesize: params.pagesize || 30, type: 1}, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_channel_amway.js b/module/youth_channel_amway.js new file mode 100644 index 0000000..bb56835 --- /dev/null +++ b/module/youth_channel_amway.js @@ -0,0 +1,9 @@ +module.exports = (params, useAxios) => { + return useAxios({ + url: '/youth/api/amway/v2/index', + encryptType: 'android', + method: 'get', + params: { global_collection_id: params.global_collection_id }, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_channel_detail.js b/module/youth_channel_detail.js new file mode 100644 index 0000000..9439916 --- /dev/null +++ b/module/youth_channel_detail.js @@ -0,0 +1,10 @@ +module.exports = (params, useAxios) => { + const data = (params.global_collection_id || '').split(',').map((s) => ({ global_collection_id: s })); + return useAxios({ + url: '/youth/api/channel/v1/channel_list_by_id', + encryptType: 'android', + method: 'post', + data: { data }, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_channel_similar.js b/module/youth_channel_similar.js new file mode 100644 index 0000000..963ac9f --- /dev/null +++ b/module/youth_channel_similar.js @@ -0,0 +1,15 @@ +module.exports = (params, useAxios) => { + return useAxios({ + url: '/youth/v1/channel/get_friendly_channel', + encryptType: 'android', + method: 'post', + data: { + area_code: 1, + playlist_ver: 2, + vip_type: params?.vip_type || params?.cookie?.vip_type || 0, + platform: 'ios' + }, + params: { channel_id: params.channel_id }, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_channel_song.js b/module/youth_channel_song.js new file mode 100644 index 0000000..bfdb157 --- /dev/null +++ b/module/youth_channel_song.js @@ -0,0 +1,16 @@ + +module.exports = (params, useAxios) => { + const dataMap = { + global_collection_id: params.global_collection_id, + pagesize: params.pagesize || 30, + page: params.page || 1, + is_filter: 0, + } + return useAxios({ + url: '/youth/api/channel/v1/channel_get_song_audit_passed', + encryptType: 'android', + method: 'get', + params: dataMap, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_channel_song_detail.js b/module/youth_channel_song_detail.js new file mode 100644 index 0000000..d1d71e0 --- /dev/null +++ b/module/youth_channel_song_detail.js @@ -0,0 +1,14 @@ + +module.exports = (params, useAxios) => { + const dataMap = { + global_collection_id: params.global_collection_id, + fileid: params.fileid + } + return useAxios({ + url: '/youth/v2/post/get_song_detail', + encryptType: 'android', + method: 'get', + params: dataMap, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_channel_sub.js b/module/youth_channel_sub.js new file mode 100644 index 0000000..e06658c --- /dev/null +++ b/module/youth_channel_sub.js @@ -0,0 +1,10 @@ +module.exports = (params, useAxios) => { + const t = Number(params.t) === 0 ? 0 : 1; + return useAxios({ + url: `/youth/v1/channel${t === 0 ? '_un' : ''}_subscribe`, + encryptType: 'android', + method: t === 0 ? 'delete': 'post', + params: { global_collection_id: params.global_collection_id, source: 1}, + cookie: params?.cookie, + }); +}; diff --git a/module/youth_dynamic.js b/module/youth_dynamic.js new file mode 100644 index 0000000..25480bc --- /dev/null +++ b/module/youth_dynamic.js @@ -0,0 +1,9 @@ + +module.exports = (params, useAxios) => { + return useAxios({ + url: '/youth/v3/user/get_dynamic', + encryptType: 'android', + method: 'get', + cookie: params?.cookie, + }); +}; diff --git a/module/youth_dynamic_recent.js b/module/youth_dynamic_recent.js new file mode 100644 index 0000000..9691609 --- /dev/null +++ b/module/youth_dynamic_recent.js @@ -0,0 +1,9 @@ + +module.exports = (params, useAxios) => { + return useAxios({ + url: '/youth/v3/user/recent_dynamic', + encryptType: 'android', + method: 'get', + cookie: params?.cookie, + }); +}; diff --git a/module/youth_user_song.js b/module/youth_user_song.js new file mode 100644 index 0000000..0aaa647 --- /dev/null +++ b/module/youth_user_song.js @@ -0,0 +1,18 @@ + +module.exports = (params, useAxios) => { + const dataMap = { + filter_video: 0, + type: params?.type || 0, + userid: params.userid, + pagesize: params.pagesize || 30, + page: params.page || 1, + is_filter: 0, + } + return useAxios({ + url: '/youth/v1/get_user_song_public', + encryptType: 'android', + method: 'get', + params: dataMap, + cookie: params?.cookie, + }); +}; diff --git a/package.json b/package.json index 6349c03..337b68a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kugoumusicapi", - "version": "1.2.3", + "version": "1.3.0", "description": "", "main": "main.js", "bin": "./app.js", diff --git a/util/config.json b/util/config.json index 1c6e644..4469ac6 100644 --- a/util/config.json +++ b/util/config.json @@ -8,5 +8,5 @@ "apiver": 20, "clientver": 12329, "liteAppid": 3116, - "liteClientver": 10870 + "liteClientver": 10940 } \ No newline at end of file