@sansenjian/qq-music-api 2.2.1 → 2.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/CHANGELOG.md +120 -42
  2. package/dist/app.js +58 -0
  3. package/dist/config/user-info.js +59 -0
  4. package/dist/index.js +3 -0
  5. package/dist/jest.config.js +40 -0
  6. package/dist/middlewares/koa-cors.js +63 -0
  7. package/dist/module/apis/UCommon/UCommon.js +10 -0
  8. package/dist/module/apis/album/getAlbumInfo.js +23 -0
  9. package/dist/module/apis/comments/getComments.js +24 -0
  10. package/dist/module/apis/digitalAlbum/getDigitalAlbumLists.js +22 -0
  11. package/dist/module/apis/downloadQQMusic.js +48 -0
  12. package/dist/module/apis/extend/getPlaylistTags.js +158 -0
  13. package/dist/module/apis/music/getLyric.js +32 -0
  14. package/dist/module/apis/mv/getMvByTag.js +23 -0
  15. package/dist/module/apis/radio/getRadioLists.js +26 -0
  16. package/dist/module/apis/rank/getTopLists.js +35 -0
  17. package/dist/module/apis/recommend/getDailyRecommend.js +124 -0
  18. package/dist/module/apis/recommend/getPersonalRecommend.js +114 -0
  19. package/dist/module/apis/search/getHotKey.js +25 -0
  20. package/dist/module/apis/search/getSearchByKey.js +32 -0
  21. package/dist/module/apis/search/getSmartbox.js +40 -0
  22. package/dist/module/apis/singers/getSimilarSinger.js +24 -0
  23. package/dist/module/apis/singers/getSingerDesc.js +24 -0
  24. package/dist/module/apis/singers/getSingerMv.js +23 -0
  25. package/dist/module/apis/singers/getSingerStarNum.js +23 -0
  26. package/dist/module/apis/songLists/songListCategories.js +23 -0
  27. package/dist/module/apis/songLists/songListDetail.js +28 -0
  28. package/dist/module/apis/songLists/songLists.js +35 -0
  29. package/dist/module/apis/u_common.js +56 -0
  30. package/dist/module/apis/user/checkQQLoginQr.js +189 -0
  31. package/dist/module/apis/user/getQQLoginQr.js +23 -0
  32. package/dist/module/apis/user/getUserAvatar.js +25 -0
  33. package/dist/module/apis/user/getUserLikedSongs.js +129 -0
  34. package/dist/module/apis/user/getUserPlaylists.js +138 -0
  35. package/dist/module/apis/y_common.js +69 -0
  36. package/dist/module/config.js +24 -0
  37. package/dist/module/index.js +70 -0
  38. package/dist/package.json +117 -0
  39. package/dist/routers/context/batchGetSongInfo.js +53 -0
  40. package/dist/routers/context/batchGetSongLists.js +37 -0
  41. package/dist/routers/context/checkQQLoginQr.js +16 -0
  42. package/dist/routers/context/cookies.js +36 -0
  43. package/dist/routers/context/getAlbumInfo.js +29 -0
  44. package/dist/routers/context/getComments.js +38 -0
  45. package/dist/routers/context/getDailyRecommend.js +45 -0
  46. package/dist/routers/context/getDigitalAlbumLists.js +16 -0
  47. package/dist/routers/context/getDownloadQQMusic.js +16 -0
  48. package/dist/routers/context/getHotkey.js +21 -0
  49. package/dist/routers/context/getImageUrl.js +25 -0
  50. package/dist/routers/context/getLyric.js +29 -0
  51. package/dist/routers/context/getMusicPlay.js +91 -0
  52. package/dist/routers/context/getMv.js +57 -0
  53. package/dist/routers/context/getMvByTag.js +16 -0
  54. package/dist/routers/context/getMvPlay.js +105 -0
  55. package/dist/routers/context/getNewDisks.js +52 -0
  56. package/dist/routers/context/getPersonalRecommend.js +54 -0
  57. package/dist/routers/context/getPlaylistTags.js +60 -0
  58. package/dist/routers/context/getQQLoginQr.js +14 -0
  59. package/dist/routers/context/getRadioLists.js +16 -0
  60. package/dist/routers/context/getRanks.js +60 -0
  61. package/dist/routers/context/getRecommend.js +88 -0
  62. package/dist/routers/context/getSearchByKey.js +32 -0
  63. package/dist/routers/context/getSimilarSinger.js +27 -0
  64. package/dist/routers/context/getSingerAlbum.js +54 -0
  65. package/dist/routers/context/getSingerDesc.js +28 -0
  66. package/dist/routers/context/getSingerHotsong.js +54 -0
  67. package/dist/routers/context/getSingerList.js +51 -0
  68. package/dist/routers/context/getSingerMv.js +36 -0
  69. package/dist/routers/context/getSingerStarNum.js +27 -0
  70. package/dist/routers/context/getSmartbox.js +27 -0
  71. package/dist/routers/context/getSongInfo.js +47 -0
  72. package/dist/routers/context/getSongListCategories.js +23 -0
  73. package/dist/routers/context/getSongListDetail.js +19 -0
  74. package/dist/routers/context/getSongLists.js +25 -0
  75. package/dist/routers/context/getTicketInfo.js +47 -0
  76. package/dist/routers/context/getTopLists.js +16 -0
  77. package/dist/routers/context/getUserAvatar.js +48 -0
  78. package/dist/routers/context/getUserLikedSongs.js +24 -0
  79. package/dist/routers/context/getUserPlaylists.js +24 -0
  80. package/dist/routers/context/index.js +107 -0
  81. package/dist/routers/router.js +69 -0
  82. package/dist/routers/types.js +2 -0
  83. package/dist/routers/util.js +188 -0
  84. package/dist/types/api.js +55 -0
  85. package/dist/util/apiResponse.js +88 -0
  86. package/dist/util/colors.js +19 -0
  87. package/dist/util/cookie.js +26 -0
  88. package/dist/util/loginUtils.js +30 -0
  89. package/dist/util/lyricParse.js +72 -0
  90. package/dist/util/request.js +109 -0
  91. package/docs-dist/404.html +24 -0
  92. package/docs-dist/CHANGELOG-ARCHITECTURE.html +131 -0
  93. package/docs-dist/COOKIE_CONFIG_GUIDE.html +39 -0
  94. package/docs-dist/README.html +447 -0
  95. package/docs-dist/TEST_USER_PLAYLISTS.html +42 -0
  96. package/docs-dist/USER_AVATAR_GUIDE.html +100 -0
  97. package/docs-dist/api/comments.html +48 -0
  98. package/docs-dist/api/index.html +27 -0
  99. package/docs-dist/api/music.html +51 -0
  100. package/docs-dist/api/other.html +33 -0
  101. package/docs-dist/api/playlist.html +77 -0
  102. package/docs-dist/api/rank.html +48 -0
  103. package/docs-dist/api/search.html +62 -0
  104. package/docs-dist/api/singer.html +47 -0
  105. package/docs-dist/api/user.html +64 -0
  106. package/docs-dist/assets/CHANGELOG-ARCHITECTURE.md.BOe0ZtyR.js +105 -0
  107. package/docs-dist/assets/CHANGELOG-ARCHITECTURE.md.BOe0ZtyR.lean.js +1 -0
  108. package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.D68AwXR2.js +13 -0
  109. package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.D68AwXR2.lean.js +1 -0
  110. package/docs-dist/assets/README.md.ZJQGJ1Gb.js +421 -0
  111. package/docs-dist/assets/README.md.ZJQGJ1Gb.lean.js +1 -0
  112. package/docs-dist/assets/TEST_USER_PLAYLISTS.md.C02575X2.js +16 -0
  113. package/docs-dist/assets/TEST_USER_PLAYLISTS.md.C02575X2.lean.js +1 -0
  114. package/docs-dist/assets/USER_AVATAR_GUIDE.md.BOqjn5Cm.js +74 -0
  115. package/docs-dist/assets/USER_AVATAR_GUIDE.md.BOqjn5Cm.lean.js +1 -0
  116. package/docs-dist/assets/api_comments.md.DADvndEA.js +22 -0
  117. package/docs-dist/assets/api_comments.md.DADvndEA.lean.js +1 -0
  118. package/docs-dist/assets/api_index.md.D5IASxxG.js +1 -0
  119. package/docs-dist/assets/api_index.md.D5IASxxG.lean.js +1 -0
  120. package/docs-dist/assets/api_music.md.BgB8NmZq.js +25 -0
  121. package/docs-dist/assets/api_music.md.BgB8NmZq.lean.js +1 -0
  122. package/docs-dist/assets/api_other.md.BkRWXX2z.js +7 -0
  123. package/docs-dist/assets/api_other.md.BkRWXX2z.lean.js +1 -0
  124. package/docs-dist/assets/api_playlist.md.Dc0hTrZ4.js +51 -0
  125. package/docs-dist/assets/api_playlist.md.Dc0hTrZ4.lean.js +1 -0
  126. package/docs-dist/assets/api_rank.md.DRisCFyT.js +22 -0
  127. package/docs-dist/assets/api_rank.md.DRisCFyT.lean.js +1 -0
  128. package/docs-dist/assets/api_search.md.DNnMUZK0.js +36 -0
  129. package/docs-dist/assets/api_search.md.DNnMUZK0.lean.js +1 -0
  130. package/docs-dist/assets/api_singer.md.DCmuxQkk.js +21 -0
  131. package/docs-dist/assets/api_singer.md.DCmuxQkk.lean.js +1 -0
  132. package/docs-dist/assets/api_user.md.Cjm9GG3z.js +38 -0
  133. package/docs-dist/assets/api_user.md.Cjm9GG3z.lean.js +1 -0
  134. package/docs-dist/assets/app.Dx_1wB58.js +1 -0
  135. package/docs-dist/assets/chunks/@localSearchIndexroot.CMY5EIwU.js +1 -0
  136. package/docs-dist/assets/chunks/VPLocalSearchBox.DwKWtsdX.js +9 -0
  137. package/docs-dist/assets/chunks/framework.o40iizuP.js +19 -0
  138. package/docs-dist/assets/chunks/theme.pGVgJ9Cx.js +2 -0
  139. package/docs-dist/assets/guide_architecture.md.DGtNyuMH.js +258 -0
  140. package/docs-dist/assets/guide_architecture.md.DGtNyuMH.lean.js +1 -0
  141. package/docs-dist/assets/guide_authentication.md.mtI5LfCw.js +4 -0
  142. package/docs-dist/assets/guide_authentication.md.mtI5LfCw.lean.js +1 -0
  143. package/docs-dist/assets/guide_index.md.B-0SG46T.js +1 -0
  144. package/docs-dist/assets/guide_index.md.B-0SG46T.lean.js +1 -0
  145. package/docs-dist/assets/guide_installation.md.k-KpAfxv.js +7 -0
  146. package/docs-dist/assets/guide_installation.md.k-KpAfxv.lean.js +1 -0
  147. package/docs-dist/assets/guide_quickstart.md.Bff_KFOD.js +13 -0
  148. package/docs-dist/assets/guide_quickstart.md.Bff_KFOD.lean.js +1 -0
  149. package/docs-dist/assets/index.md.xrs-uIyo.js +1 -0
  150. package/docs-dist/assets/index.md.xrs-uIyo.lean.js +1 -0
  151. package/docs-dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  152. package/docs-dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  153. package/docs-dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  154. package/docs-dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  155. package/docs-dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  156. package/docs-dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  157. package/docs-dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  158. package/docs-dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  159. package/docs-dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  160. package/docs-dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  161. package/docs-dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  162. package/docs-dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  163. package/docs-dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  164. package/docs-dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  165. package/docs-dist/assets/reference_response-format.md.DKYTK6uJ.js +12 -0
  166. package/docs-dist/assets/reference_response-format.md.DKYTK6uJ.lean.js +1 -0
  167. package/docs-dist/assets/style.DM4qKDd4.css +1 -0
  168. package/docs-dist/guide/architecture.html +284 -0
  169. package/docs-dist/guide/authentication.html +30 -0
  170. package/docs-dist/guide/index.html +27 -0
  171. package/docs-dist/guide/installation.html +33 -0
  172. package/docs-dist/guide/quickstart.html +39 -0
  173. package/docs-dist/hashmap.json +1 -0
  174. package/docs-dist/index.html +27 -0
  175. package/docs-dist/logo.svg +4 -0
  176. package/docs-dist/reference/response-format.html +38 -0
  177. package/docs-dist/version.json +7 -0
  178. package/docs-dist/vp-icons.css +1 -0
  179. package/package.json +28 -17
  180. package/.babelrc +0 -7
  181. package/.dockerignore +0 -5
  182. package/.editorconfig +0 -31
  183. package/.eslintrc.json +0 -22
  184. package/.github/workflows/deploy-docs.yml +0 -54
  185. package/.github/workflows/release.yml +0 -37
  186. package/.github/workflows/test.yml +0 -70
  187. package/.husky/commit-msg +0 -1
  188. package/.husky/pre-commit +0 -1
  189. package/.prettierignore +0 -1
  190. package/.prettierrc +0 -9
  191. package/AGENTS.md +0 -153
  192. package/Dockerfile +0 -18
  193. package/QQ/351/237/263/344/271/220-v0.xmind +0 -0
  194. package/QQ/351/237/263/344/271/220-v1.xmind +0 -0
  195. package/app.ts +0 -68
  196. package/commitlint.config.js +0 -20
  197. package/config/user-info.ts +0 -71
  198. package/index.ts +0 -1
  199. package/jest.config.ts +0 -41
  200. package/middlewares/koa-cors.ts +0 -81
  201. package/module/apis/UCommon/UCommon.ts +0 -13
  202. package/module/apis/album/getAlbumInfo.ts +0 -22
  203. package/module/apis/comments/getComments.ts +0 -23
  204. package/module/apis/digitalAlbum/getDigitalAlbumLists.ts +0 -23
  205. package/module/apis/downloadQQMusic.ts +0 -51
  206. package/module/apis/music/getLyric.ts +0 -34
  207. package/module/apis/mv/getMvByTag.ts +0 -24
  208. package/module/apis/radio/getRadioLists.ts +0 -27
  209. package/module/apis/rank/getTopLists.ts +0 -37
  210. package/module/apis/search/getHotKey.ts +0 -24
  211. package/module/apis/search/getSearchByKey.ts +0 -31
  212. package/module/apis/search/getSmartbox.ts +0 -43
  213. package/module/apis/singers/getSimilarSinger.ts +0 -25
  214. package/module/apis/singers/getSingerDesc.ts +0 -25
  215. package/module/apis/singers/getSingerMv.ts +0 -24
  216. package/module/apis/singers/getSingerStarNum.ts +0 -24
  217. package/module/apis/songLists/songListCategories.ts +0 -22
  218. package/module/apis/songLists/songListDetail.ts +0 -27
  219. package/module/apis/songLists/songLists.ts +0 -35
  220. package/module/apis/u_common.ts +0 -29
  221. package/module/apis/user/checkQQLoginQr.ts +0 -230
  222. package/module/apis/user/getQQLoginQr.ts +0 -28
  223. package/module/apis/user/getUserAvatar.ts +0 -32
  224. package/module/apis/user/getUserLikedSongs.ts +0 -145
  225. package/module/apis/user/getUserPlaylists.ts +0 -163
  226. package/module/apis/y_common.ts +0 -44
  227. package/module/config.ts +0 -24
  228. package/module/index.ts +0 -95
  229. package/music.png +0 -0
  230. package/pnpm-workspace.yaml +0 -2
  231. package/public/index.html +0 -430
  232. package/routers/context/batchGetSongInfo.ts +0 -60
  233. package/routers/context/batchGetSongLists.ts +0 -46
  234. package/routers/context/checkQQLoginQr.ts +0 -19
  235. package/routers/context/cookies.ts +0 -38
  236. package/routers/context/getAlbumInfo.ts +0 -31
  237. package/routers/context/getComments.ts +0 -51
  238. package/routers/context/getDigitalAlbumLists.ts +0 -18
  239. package/routers/context/getDownloadQQMusic.ts +0 -17
  240. package/routers/context/getHotkey.ts +0 -25
  241. package/routers/context/getImageUrl.ts +0 -29
  242. package/routers/context/getLyric.ts +0 -32
  243. package/routers/context/getMusicPlay.ts +0 -102
  244. package/routers/context/getMv.ts +0 -61
  245. package/routers/context/getMvByTag.ts +0 -18
  246. package/routers/context/getMvPlay.ts +0 -114
  247. package/routers/context/getNewDisks.ts +0 -58
  248. package/routers/context/getQQLoginQr.ts +0 -16
  249. package/routers/context/getRadioLists.ts +0 -18
  250. package/routers/context/getRanks.ts +0 -67
  251. package/routers/context/getRecommend.ts +0 -92
  252. package/routers/context/getSearchByKey.ts +0 -34
  253. package/routers/context/getSimilarSinger.ts +0 -29
  254. package/routers/context/getSingerAlbum.ts +0 -58
  255. package/routers/context/getSingerDesc.ts +0 -30
  256. package/routers/context/getSingerHotsong.ts +0 -58
  257. package/routers/context/getSingerList.ts +0 -56
  258. package/routers/context/getSingerMv.ts +0 -41
  259. package/routers/context/getSingerStarNum.ts +0 -29
  260. package/routers/context/getSmartbox.ts +0 -27
  261. package/routers/context/getSongInfo.ts +0 -51
  262. package/routers/context/getSongListCategories.ts +0 -23
  263. package/routers/context/getSongListDetail.ts +0 -22
  264. package/routers/context/getSongLists.ts +0 -30
  265. package/routers/context/getTicketInfo.ts +0 -51
  266. package/routers/context/getTopLists.ts +0 -18
  267. package/routers/context/getUserAvatar.ts +0 -53
  268. package/routers/context/getUserLikedSongs.ts +0 -28
  269. package/routers/context/getUserPlaylists.ts +0 -29
  270. package/routers/context/index.ts +0 -87
  271. package/routers/router.ts +0 -88
  272. package/routers/types.ts +0 -18
  273. package/routers/util.ts +0 -231
  274. package/screenshot/album-image.png +0 -0
  275. package/screenshot/batchGetSongInfo.png +0 -0
  276. package/screenshot/batchGetSongLists.png +0 -0
  277. package/screenshot/downloadQQMusic.png +0 -0
  278. package/screenshot/get-album-image.png +0 -0
  279. package/screenshot/get-play-all-data.png +0 -0
  280. package/screenshot/get-song-album-id.png +0 -0
  281. package/screenshot/get-song-id.png +0 -0
  282. package/screenshot/get-song-image.png +0 -0
  283. package/screenshot/getAlbumInfo.png +0 -0
  284. package/screenshot/getComments-id.png +0 -0
  285. package/screenshot/getComments-param.png +0 -0
  286. package/screenshot/getComments.png +0 -0
  287. package/screenshot/getDigitalAlbumLists.png +0 -0
  288. package/screenshot/getLyric-parse.png +0 -0
  289. package/screenshot/getLyric.png +0 -0
  290. package/screenshot/getMusicPlay.png +0 -0
  291. package/screenshot/getMv.png +0 -0
  292. package/screenshot/getMvByTag.png +0 -0
  293. package/screenshot/getMvPlay.png +0 -0
  294. package/screenshot/getNewDisks.png +0 -0
  295. package/screenshot/getRadioLists.png +0 -0
  296. package/screenshot/getRanks.png +0 -0
  297. package/screenshot/getRecommend.png +0 -0
  298. package/screenshot/getSearchByKey.png +0 -0
  299. package/screenshot/getSimilarSinger.png +0 -0
  300. package/screenshot/getSingerAlbum.png +0 -0
  301. package/screenshot/getSingerDesc.png +0 -0
  302. package/screenshot/getSingerHotsong.png +0 -0
  303. package/screenshot/getSingerList.png +0 -0
  304. package/screenshot/getSingerMv-default.png +0 -0
  305. package/screenshot/getSingerMv-listen.png +0 -0
  306. package/screenshot/getSingerMv-time.png +0 -0
  307. package/screenshot/getSingerStarNum.png +0 -0
  308. package/screenshot/getSmartbox.png +0 -0
  309. package/screenshot/getSongInfo.png +0 -0
  310. package/screenshot/getSongListCategories.png +0 -0
  311. package/screenshot/getSongListDetail.png +0 -0
  312. package/screenshot/getSongLists-params.png +0 -0
  313. package/screenshot/getSongLists.png +0 -0
  314. package/screenshot/getTicketInfo.png +0 -0
  315. package/screenshot/getTopLists.png +0 -0
  316. package/screenshot/gethotkey.png +0 -0
  317. package/screenshot/just-get-play-url.png +0 -0
  318. package/screenshot/musicPlay.png +0 -0
  319. package/screenshot/new-feature-error-tips.png +0 -0
  320. package/screenshot/normalize-cookie.png +0 -0
  321. package/screenshot/qq-music-v0.png +0 -0
  322. package/screenshot/qq-music.png +0 -0
  323. package/screenshot/song-image.png +0 -0
  324. package/screenshot/song-quality-128.png +0 -0
  325. package/screenshot/song-quality-m4a.png +0 -0
  326. package/scripts/build-images.js +0 -36
  327. package/scripts/commit-push.sh +0 -103
  328. package/tests/integration/api/api.test.ts +0 -852
  329. package/tests/integration/middleware/cors.test.ts +0 -41
  330. package/tests/setup/jest.setup.ts +0 -15
  331. package/tests/setup/testUtils.ts +0 -35
  332. package/tests/unit/util/request.test.ts +0 -177
  333. package/tsconfig.json +0 -20
  334. package/tsconfig.test.json +0 -8
  335. package/types/api.ts +0 -105
  336. package/types/global.d.ts +0 -26
  337. package/types/index.d.ts +0 -97
  338. package/util/apiResponse.ts +0 -97
  339. package/util/colors.ts +0 -31
  340. package/util/cookie.ts +0 -40
  341. package/util/loginUtils.ts +0 -26
  342. package/util/lyricParse.ts +0 -86
  343. package/util/request.ts +0 -141
  344. package/vercel.json +0 -15
package/public/index.html DELETED
@@ -1,430 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
7
- <title>QQ 音乐 API</title>
8
- <style>
9
- * {
10
- margin: 0;
11
- padding: 0;
12
- box-sizing: border-box;
13
- }
14
-
15
- body {
16
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
17
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
18
- min-height: 100vh;
19
- padding: 40px 20px;
20
- }
21
-
22
- .container {
23
- max-width: 1400px;
24
- margin: 0 auto;
25
- background: white;
26
- border-radius: 20px;
27
- padding: 40px;
28
- box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
29
- }
30
-
31
- h1 {
32
- text-align: center;
33
- color: #667eea;
34
- font-size: 2.5em;
35
- margin-bottom: 10px;
36
- }
37
-
38
- .subtitle {
39
- text-align: center;
40
- color: #666;
41
- margin-bottom: 30px;
42
- font-size: 1.1em;
43
- }
44
-
45
- .subtitle a {
46
- color: #667eea;
47
- text-decoration: none;
48
- font-weight: bold;
49
- }
50
-
51
- .subtitle a:hover {
52
- text-decoration: underline;
53
- }
54
-
55
- .api-grid {
56
- display: grid;
57
- grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
58
- gap: 20px;
59
- margin-top: 30px;
60
- }
61
-
62
- .api-card {
63
- background: #f8f9fa;
64
- border-radius: 12px;
65
- padding: 20px;
66
- transition: transform 0.2s, box-shadow 0.2s;
67
- }
68
-
69
- .api-card:hover {
70
- transform: translateY(-2px);
71
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
72
- }
73
-
74
- .api-card-title {
75
- font-size: 1.2em;
76
- font-weight: bold;
77
- color: #333;
78
- margin-bottom: 15px;
79
- display: flex;
80
- align-items: center;
81
- gap: 8px;
82
- }
83
-
84
- .api-list {
85
- list-style: none;
86
- }
87
-
88
- .api-list li {
89
- margin-bottom: 10px;
90
- }
91
-
92
- .api-list a {
93
- color: #667eea;
94
- text-decoration: none;
95
- padding: 8px 12px;
96
- background: white;
97
- border-radius: 6px;
98
- display: block;
99
- transition: background 0.2s, color 0.2s;
100
- font-size: 0.95em;
101
- }
102
-
103
- .api-list a:hover {
104
- background: #667eea;
105
- color: white;
106
- }
107
-
108
- .endpoint {
109
- font-family: 'Courier New', monospace;
110
- font-size: 0.85em;
111
- color: #888;
112
- margin-top: 4px;
113
- word-break: break-all;
114
- }
115
-
116
- @media (max-width: 768px) {
117
- .container {
118
- padding: 20px;
119
- }
120
-
121
- h1 {
122
- font-size: 2em;
123
- }
124
-
125
- .api-grid {
126
- grid-template-columns: 1fr;
127
- }
128
- }
129
- </style>
130
- </head>
131
- <body>
132
- <div class="container">
133
- <h1>🎵 QQ 音乐 API</h1>
134
- <p class="subtitle">
135
- 当你看到这个页面时,这个服务已经成功跑起来了~<br>
136
- <a href="https://rain120.github.io/qq-music-api/" target="_blank">📖 查看完整文档</a>
137
- </p>
138
-
139
- <div class="api-grid">
140
- <div class="api-card">
141
- <div class="api-card-title">🔍 搜索相关</div>
142
- <ul class="api-list">
143
- <li>
144
- <a href="/getHotkey" target="_blank">
145
- 搜索热词
146
- <div class="endpoint">GET /getHotkey</div>
147
- </a>
148
- </li>
149
- <li>
150
- <a href="/getSearchByKey?key=周杰伦" target="_blank">
151
- 搜索歌曲
152
- <div class="endpoint">GET /getSearchByKey?key=xxx</div>
153
- </a>
154
- </li>
155
- <li>
156
- <a href="/getSmartbox?key=周杰伦" target="_blank">
157
- 智能搜索
158
- <div class="endpoint">GET /getSmartbox?key=xxx</div>
159
- </a>
160
- </li>
161
- </ul>
162
- </div>
163
-
164
- <div class="api-card">
165
- <div class="api-card-title">📋 歌单相关</div>
166
- <ul class="api-list">
167
- <li>
168
- <a href="/getSongListCategories" target="_blank">
169
- 歌单分类
170
- <div class="endpoint">GET /getSongListCategories</div>
171
- </a>
172
- </li>
173
- <li>
174
- <a href="/getSongLists?categoryId=10000000" target="_blank">
175
- 歌单列表
176
- <div class="endpoint">GET /getSongLists</div>
177
- </a>
178
- </li>
179
- <li>
180
- <a href="/getSongListDetail?disstid=7707261125" target="_blank">
181
- 歌单详情
182
- <div class="endpoint">GET /getSongListDetail?disstid=xxx</div>
183
- </a>
184
- </li>
185
- <li>
186
- <a href="/getRecommend" target="_blank">
187
- 推荐歌单
188
- <div class="endpoint">GET /getRecommend</div>
189
- </a>
190
- </li>
191
- </ul>
192
- </div>
193
-
194
- <div class="api-card">
195
- <div class="api-card-title">🎵 歌曲相关</div>
196
- <ul class="api-list">
197
- <li>
198
- <a href="/getSongInfo?songmid=0039MnYb0qxYhV" target="_blank">
199
- 歌曲信息
200
- <div class="endpoint">GET /getSongInfo?songmid=xxx</div>
201
- </a>
202
- </li>
203
- <li>
204
- <a href="/getLyric?songmid=0039MnYb0qxYhV" target="_blank">
205
- 歌曲歌词
206
- <div class="endpoint">GET /getLyric?songmid=xxx</div>
207
- </a>
208
- </li>
209
- <li>
210
- <a href="/getMusicPlay?songmid=0039MnYb0qxYhV" target="_blank">
211
- 歌曲播放链接
212
- <div class="endpoint">GET /getMusicPlay?songmid=xxx</div>
213
- </a>
214
- </li>
215
- <li>
216
- <a href="/downloadQQMusic" target="_blank">
217
- 下载 QQ 音乐
218
- <div class="endpoint">GET /downloadQQMusic</div>
219
- </a>
220
- </li>
221
- </ul>
222
- </div>
223
-
224
- <div class="api-card">
225
- <div class="api-card-title">🎤 歌手相关</div>
226
- <ul class="api-list">
227
- <li>
228
- <a href="/getSingerList" target="_blank">
229
- 歌手列表
230
- <div class="endpoint">GET /getSingerList</div>
231
- </a>
232
- </li>
233
- <li>
234
- <a href="/getSimilarSinger?singermid=0025NhlN2yWrP4" target="_blank">
235
- 相似歌手
236
- <div class="endpoint">GET /getSimilarSinger?singermid=xxx</div>
237
- </a>
238
- </li>
239
- <li>
240
- <a href="/getSingerAlbum?singermid=0025NhlN2yWrP4" target="_blank">
241
- 歌手专辑
242
- <div class="endpoint">GET /getSingerAlbum?singermid=xxx</div>
243
- </a>
244
- </li>
245
- <li>
246
- <a href="/getSingerHotsong?singermid=0025NhlN2yWrP4" target="_blank">
247
- 歌手热门歌曲
248
- <div class="endpoint">GET /getSingerHotsong?singermid=xxx</div>
249
- </a>
250
- </li>
251
- <li>
252
- <a href="/getSingerMv?singermid=0025NhlN2yWrP4" target="_blank">
253
- 歌手 MV
254
- <div class="endpoint">GET /getSingerMv?singermid=xxx</div>
255
- </a>
256
- </li>
257
- <li>
258
- <a href="/getSingerDesc?singermid=0025NhlN2yWrP4" target="_blank">
259
- 歌手描述
260
- <div class="endpoint">GET /getSingerDesc?singermid=xxx</div>
261
- </a>
262
- </li>
263
- <li>
264
- <a href="/getSingerStarNum?singermid=0025NhlN2yWrP4" target="_blank">
265
- 歌手热度
266
- <div class="endpoint">GET /getSingerStarNum?singermid=xxx</div>
267
- </a>
268
- </li>
269
- </ul>
270
- </div>
271
-
272
- <div class="api-card">
273
- <div class="api-card-title">🎬 MV 相关</div>
274
- <ul class="api-list">
275
- <li>
276
- <a href="/getMv?area_id=15&version_id=7" target="_blank">
277
- MV 列表
278
- <div class="endpoint">GET /getMv?area_id=15&version_id=7</div>
279
- </a>
280
- </li>
281
- <li>
282
- <a href="/getMvByTag" target="_blank">
283
- 按标签获取 MV
284
- <div class="endpoint">GET /getMvByTag</div>
285
- </a>
286
- </li>
287
- <li>
288
- <a href="/getMvPlay?vid=z0032x3k8x3" target="_blank">
289
- MV 播放链接
290
- <div class="endpoint">GET /getMvPlay?vid=xxx</div>
291
- </a>
292
- </li>
293
- </ul>
294
- </div>
295
-
296
- <div class="api-card">
297
- <div class="api-card-title">📊 排行榜相关</div>
298
- <ul class="api-list">
299
- <li>
300
- <a href="/getTopLists" target="_blank">
301
- 排行榜列表
302
- <div class="endpoint">GET /getTopLists</div>
303
- </a>
304
- </li>
305
- <li>
306
- <a href="/getRanks" target="_blank">
307
- 排行榜详情
308
- <div class="endpoint">GET /getRanks</div>
309
- </a>
310
- </li>
311
- </ul>
312
- </div>
313
-
314
- <div class="api-card">
315
- <div class="api-card-title">💿 专辑相关</div>
316
- <ul class="api-list">
317
- <li>
318
- <a href="/getNewDisks" target="_blank">
319
- 最新专辑
320
- <div class="endpoint">GET /getNewDisks</div>
321
- </a>
322
- </li>
323
- <li>
324
- <a href="/getAlbumInfo?albummid=000MkMni19ClKG" target="_blank">
325
- 专辑信息
326
- <div class="endpoint">GET /getAlbumInfo?albummid=xxx</div>
327
- </a>
328
- </li>
329
- <li>
330
- <a href="/getDigitalAlbumLists" target="_blank">
331
- 数字专辑列表
332
- <div class="endpoint">GET /getDigitalAlbumLists</div>
333
- </a>
334
- </li>
335
- </ul>
336
- </div>
337
-
338
- <div class="api-card">
339
- <div class="api-card-title">📻 电台相关</div>
340
- <ul class="api-list">
341
- <li>
342
- <a href="/getRadioLists" target="_blank">
343
- 电台列表
344
- <div class="endpoint">GET /getRadioLists</div>
345
- </a>
346
- </li>
347
- </ul>
348
- </div>
349
-
350
- <div class="api-card">
351
- <div class="api-card-title">💬 评论相关</div>
352
- <ul class="api-list">
353
- <li>
354
- <a href="/getComments?id=102065750" target="_blank">
355
- 歌曲评论
356
- <div class="endpoint">GET /getComments?id=xxx</div>
357
- </a>
358
- </li>
359
- </ul>
360
- </div>
361
-
362
- <div class="api-card">
363
- <div class="api-card-title">👤 用户相关</div>
364
- <ul class="api-list">
365
- <li>
366
- <a href="/user/getCookie" target="_blank">
367
- 获取 Cookie
368
- <div class="endpoint">GET /user/getCookie</div>
369
- </a>
370
- </li>
371
- <li>
372
- <a href="/user/setCookie" target="_blank">
373
- 设置 Cookie
374
- <div class="endpoint">GET /user/setCookie</div>
375
- </a>
376
- </li>
377
- <li>
378
- <a href="/user/getUserPlaylists?uin=123456789" target="_blank" title="需要配置 Cookie 才能正常工作">
379
- 用户歌单 ⚠️
380
- <div class="endpoint">GET /user/getUserPlaylists?uin=xxx</div>
381
- </a>
382
- </li>
383
- <li>
384
- <a href="/user/getUserAvatar?uin=123456789" target="_blank">
385
- 用户头像
386
- <div class="endpoint">GET /user/getUserAvatar?uin=xxx&size=140</div>
387
- </a>
388
- </li>
389
- <li>
390
- <a href="/getQQLoginQr" target="_blank">
391
- QQ 登录二维码
392
- <div class="endpoint">GET /getQQLoginQr</div>
393
- </a>
394
- </li>
395
- <li>
396
- <a href="/checkQQLoginQr" target="_blank">
397
- 检查登录状态
398
- <div class="endpoint">POST /checkQQLoginQr</div>
399
- </a>
400
- </li>
401
- </ul>
402
- </div>
403
-
404
- <div class="api-card">
405
- <div class="api-card-title">🎫 票务相关</div>
406
- <ul class="api-list">
407
- <li>
408
- <a href="/getTicketInfo" target="_blank">
409
- 票务信息
410
- <div class="endpoint">GET /getTicketInfo</div>
411
- </a>
412
- </li>
413
- </ul>
414
- </div>
415
-
416
- <div class="api-card">
417
- <div class="api-card-title">🖼️ 图片相关</div>
418
- <ul class="api-list">
419
- <li>
420
- <a href="/getImageUrl" target="_blank">
421
- 图片 URL
422
- <div class="endpoint">GET /getImageUrl</div>
423
- </a>
424
- </li>
425
- </ul>
426
- </div>
427
- </div>
428
- </div>
429
- </body>
430
- </html>
@@ -1,60 +0,0 @@
1
- import { KoaContext, Controller } from '../types';
2
- import { UCommon } from '../../module';
3
-
4
- const controller: Controller = async (ctx, next) => {
5
- const { songs } = ctx.request.body || {};
6
-
7
- const params = Object.assign({
8
- format: 'json',
9
- inCharset: 'utf8',
10
- outCharset: 'utf-8',
11
- notice: 0,
12
- platform: 'yqq.json',
13
- needNewCode: 0
14
- });
15
-
16
- const props = {
17
- method: 'get',
18
- option: {},
19
- params
20
- };
21
-
22
- const data = await Promise.all(
23
- (songs || []).map(async (song: any[]) => {
24
- const [song_mid, song_id = ''] = song;
25
- return await UCommon({
26
- ...props,
27
- params: {
28
- ...params,
29
- data: {
30
- comm: {
31
- ct: 24,
32
- cv: 0
33
- },
34
- songinfo: {
35
- method: 'get_song_detail_yqq',
36
- param: {
37
- song_type: 0,
38
- song_mid,
39
- song_id
40
- },
41
- module: 'music.pf_song_detail_svr'
42
- }
43
- }
44
- }
45
- }).then(res => res.data);
46
- })
47
- );
48
-
49
- Object.assign(ctx, {
50
- status: 200,
51
- body: {
52
- response: {
53
- code: 0,
54
- data
55
- }
56
- }
57
- });
58
- };
59
-
60
- export default controller;
@@ -1,46 +0,0 @@
1
- import { KoaContext, Controller } from '../types';
2
- import { songLists } from '../../module';
3
-
4
- const controller: Controller = async (ctx, next) => {
5
- const { limit: ein = 19, page: sin = 0, sortId = 5, categoryIds = [10000000] } = ctx.request.body || {};
6
-
7
- const params = {
8
- sortId,
9
- sin,
10
- ein
11
- };
12
-
13
- const props = {
14
- method: 'get',
15
- option: {},
16
- params
17
- };
18
-
19
- const data = await Promise.all(
20
- categoryIds.map(
21
- async (categoryId: number) =>
22
- await songLists({
23
- ...props,
24
- params: {
25
- ...params,
26
- categoryId
27
- }
28
- }).then(res => {
29
- if (res.body.response && +res.body.response.code === 0) {
30
- return res.body.response.data;
31
- } else {
32
- return res.body.response;
33
- }
34
- })
35
- )
36
- );
37
-
38
- Object.assign(ctx, {
39
- body: {
40
- status: 200,
41
- data
42
- }
43
- });
44
- };
45
-
46
- export default controller;
@@ -1,19 +0,0 @@
1
- import { KoaContext, Controller } from '../types';
2
- import { checkQQLoginQr } from '../../module';
3
-
4
- const controller: Controller = async (ctx, next) => {
5
- const { ptqrtoken, qrsig } = ctx.query.ptqrtoken ? ctx.query : ctx.request.body || {};
6
-
7
- const params = { ptqrtoken, qrsig };
8
- const props = {
9
- method: 'get',
10
- option: {},
11
- params
12
- };
13
-
14
- const { status, body } = await checkQQLoginQr(props);
15
- ctx.status = status || 500;
16
- ctx.body = body;
17
- };
18
-
19
- export default controller;
@@ -1,38 +0,0 @@
1
- import { Context, Next } from 'koa';
2
-
3
- /*
4
- * @Author: Rainy [https://github.com/rain120]
5
- * @Date: 2021-01-23 15:41:41
6
- * @LastEditors: Rainy
7
- * @LastEditTime: 2021-06-19 22:22:31
8
- */
9
- export default {
10
- get: async (ctx: Context, next: Next) => {
11
- ctx.status = 200;
12
- ctx.body = {
13
- data: {
14
- code: 200,
15
- cookie: (global.userInfo as any).cookie,
16
- cookieList: (global.userInfo as any).cookieList,
17
- cookieObject: (global.userInfo as any).cookieObject
18
- }
19
- };
20
-
21
- await next();
22
- },
23
- set: async (ctx: Context, next: Next) => {
24
- (ctx.request as any).cookies = global.userInfo.cookie;
25
- ctx.request.header['Access-Control-Allow-Origin'] = 'https://y.qq.com';
26
- ctx.request.header['Access-Control-Allow-Methods'] = 'GET,PUT,POST,DELETE';
27
- ctx.request.header['Access-Control-Allow-Headers'] = 'Content-Type';
28
- (ctx.request.header as any)['Access-Control-Allow-Credentials'] = true;
29
- ctx.body = {
30
- data: {
31
- code: 200,
32
- message: '操作成功'
33
- }
34
- };
35
-
36
- await next();
37
- }
38
- };
@@ -1,31 +0,0 @@
1
- import { KoaContext, Controller } from '../types';
2
- import { getAlbumInfo } from '../../module';
3
-
4
- const controller: Controller = async (ctx, next) => {
5
- const { albummid } = ctx.query;
6
-
7
- const props = {
8
- method: 'get',
9
- params: {
10
- albummid
11
- },
12
- option: {}
13
- };
14
-
15
- if (albummid) {
16
- const { status, body } = await getAlbumInfo(props);
17
- Object.assign(ctx, {
18
- status,
19
- body
20
- });
21
- } else {
22
- ctx.status = 400;
23
- ctx.body = {
24
- data: {
25
- message: 'no albummid'
26
- }
27
- };
28
- }
29
- };
30
-
31
- export default controller;
@@ -1,51 +0,0 @@
1
- import { KoaContext, Controller } from '../types';
2
- import { getComments } from '../../module';
3
-
4
- const controller: Controller = async (ctx, next) => {
5
- const {
6
- id,
7
- pagesize = 25,
8
- pagenum = 0,
9
- cid = 205360772,
10
- cmd = 8,
11
- reqtype = 2,
12
- biztype = 1,
13
- rootcommentid = !pagenum && ''
14
- } = ctx.query;
15
-
16
- const checkrootcommentid = !pagenum ? true : !!rootcommentid;
17
-
18
- const params = Object.assign({
19
- cid,
20
- reqtype,
21
- biztype,
22
- topid: id,
23
- cmd,
24
- pagenum,
25
- pagesize,
26
- lasthotcommentid: rootcommentid
27
- });
28
-
29
- const props = {
30
- method: 'get',
31
- params,
32
- option: {}
33
- };
34
-
35
- if (id && checkrootcommentid) {
36
- const { status, body } = await getComments(props);
37
- Object.assign(ctx, {
38
- status,
39
- body
40
- });
41
- } else {
42
- ctx.status = 400;
43
- ctx.body = {
44
- data: {
45
- message: 'Don\'t have id or rootcommentid'
46
- }
47
- };
48
- }
49
- };
50
-
51
- export default controller;
@@ -1,18 +0,0 @@
1
- import { KoaContext, Controller } from '../types';
2
- import { getDigitalAlbumLists } from '../../module';
3
-
4
- const controller: Controller = async (ctx, next) => {
5
- const props = {
6
- method: 'get',
7
- params: {},
8
- option: {}
9
- };
10
-
11
- const { status, body } = await getDigitalAlbumLists(props);
12
- Object.assign(ctx, {
13
- status,
14
- body
15
- });
16
- };
17
-
18
- export default controller;