@sansenjian/qq-music-api 1.0.6 → 2.0.0

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 (94) hide show
  1. package/.babelrc +2 -2
  2. package/.dockerignore +5 -5
  3. package/.editorconfig +31 -31
  4. package/.eslintrc.json +21 -17
  5. package/.github/FUNDING.yml +12 -12
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
  7. package/.github/ISSUE_TEMPLATE/custom.md +24 -24
  8. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
  9. package/.github/workflows/publish.yml +26 -0
  10. package/.husky/commit-msg +1 -0
  11. package/.husky/pre-commit +1 -0
  12. package/.prettierignore +1 -1
  13. package/.prettierrc +9 -9
  14. package/CHANGELOG.md +70 -70
  15. package/Dockerfile +18 -18
  16. package/LICENSE +21 -21
  17. package/README.md +218 -177
  18. package/app.js +75 -75
  19. package/commitlint.config.js +20 -20
  20. package/config/user-info.js +42 -42
  21. package/index.js +1 -1
  22. package/middlewares/koa-cors.js +97 -97
  23. package/module/apis/UCommon/UCommon.js +6 -6
  24. package/module/apis/album/getAlbumInfo.js +33 -33
  25. package/module/apis/comments/getComments.js +35 -35
  26. package/module/apis/digitalAlbum/getDigitalAlbumLists.js +34 -34
  27. package/module/apis/downloadQQMusic.js +41 -41
  28. package/module/apis/music/getLyric.js +42 -41
  29. package/module/apis/mv/getMvByTag.js +35 -35
  30. package/module/apis/radio/getRadioLists.js +38 -38
  31. package/module/apis/rank/getTopLists.js +44 -44
  32. package/module/apis/search/getHotKey.js +35 -35
  33. package/module/apis/search/getSearchByKey.js +45 -45
  34. package/module/apis/search/getSmartbox.js +34 -34
  35. package/module/apis/singers/getSimilarSinger.js +36 -36
  36. package/module/apis/singers/getSingerDesc.js +38 -38
  37. package/module/apis/singers/getSingerMv.js +35 -35
  38. package/module/apis/singers/getSingerStarNum.js +36 -36
  39. package/module/apis/songLists/songListCategories.js +33 -33
  40. package/module/apis/songLists/songListDetail.js +38 -38
  41. package/module/apis/songLists/songLists.js +41 -41
  42. package/module/apis/u_common.js +17 -16
  43. package/module/apis/user/checkQQLoginQr.js +125 -86
  44. package/module/apis/user/getQQLoginQr.js +17 -11
  45. package/module/apis/y_common.js +27 -14
  46. package/module/config.js +31 -31
  47. package/module/index.js +82 -82
  48. package/package.json +72 -83
  49. package/public/index.html +47 -47
  50. package/routers/context/batchGetSongInfo.js +59 -59
  51. package/routers/context/batchGetSongLists.js +50 -50
  52. package/routers/context/checkQQLoginQr.js +17 -15
  53. package/routers/context/cookies.js +36 -36
  54. package/routers/context/getAlbumInfo.js +27 -27
  55. package/routers/context/getComments.js +51 -51
  56. package/routers/context/getDigitalAlbumLists.js +14 -14
  57. package/routers/context/getDownloadQQMusic.js +14 -14
  58. package/routers/context/getHotkey.js +14 -14
  59. package/routers/context/getImageUrl.js +34 -34
  60. package/routers/context/getLyric.js +26 -26
  61. package/routers/context/getMusicPlay.js +116 -112
  62. package/routers/context/getMv.js +56 -56
  63. package/routers/context/getMvByTag.js +15 -15
  64. package/routers/context/getMvPlay.js +128 -118
  65. package/routers/context/getNewDisks.js +50 -51
  66. package/routers/context/getQQLoginQr.js +12 -12
  67. package/routers/context/getRadioLists.js +14 -14
  68. package/routers/context/getRanks.js +90 -86
  69. package/routers/context/getRecommend.js +86 -86
  70. package/routers/context/getSearchByKey.js +32 -32
  71. package/routers/context/getSimilarSinger.js +25 -25
  72. package/routers/context/getSingerAlbum.js +52 -52
  73. package/routers/context/getSingerDesc.js +25 -25
  74. package/routers/context/getSingerHotsong.js +52 -52
  75. package/routers/context/getSingerList.js +51 -52
  76. package/routers/context/getSingerMv.js +32 -32
  77. package/routers/context/getSingerStarNum.js +24 -24
  78. package/routers/context/getSmartbox.js +24 -24
  79. package/routers/context/getSongInfo.js +49 -49
  80. package/routers/context/getSongListCategories.js +22 -22
  81. package/routers/context/getSongListDetail.js +25 -25
  82. package/routers/context/getSongLists.js +32 -32
  83. package/routers/context/getTicketInfo.js +45 -45
  84. package/routers/context/getTopLists.js +15 -15
  85. package/routers/context/index.js +74 -74
  86. package/routers/router.js +116 -112
  87. package/scripts/build-images.js +36 -36
  88. package/scripts/commit-push.sh +103 -103
  89. package/util/colors.js +16 -16
  90. package/util/cookie.js +22 -22
  91. package/util/loginUtils.js +28 -23
  92. package/util/lyricParse.js +64 -64
  93. package/util/request.js +57 -57
  94. package/vercel.json +15 -15
package/README.md CHANGED
@@ -1,177 +1,218 @@
1
- <h1 align="center">QQ Music API</h1>
2
-
3
- <div align="center">
4
-
5
- <img src='music.png' />
6
-
7
- ![GitHub watchers](https://img.shields.io/github/watchers/rain120/qq-music-api?style=social) ![GitHub stars](https://img.shields.io/github/stars/rain120/qq-music-api?style=social) ![GitHub forks](https://img.shields.io/github/forks/rain120/qq-music-api?style=social)
8
- <br />
9
- ![node](https://img.shields.io/node/v/koa?style=flat-square)
10
- <br />
11
- ![GitHub repo size](https://img.shields.io/github/repo-size/rain120/qq-music-api?style=flat-square) ![GitHub package.json version](https://img.shields.io/github/package-json/v/rain120/qq-music-api?style=flat-square) ![GitHub](https://img.shields.io/github/license/rain120/qq-music-api?style=flat-square) ![GitHub open issues](https://img.shields.io/github/issues/rain120/qq-music-api?style=flat-square) ![GitHub closed issues](https://img.shields.io/github/issues-closed/rain120/qq-music-api) ![GitHub last commit](https://img.shields.io/github/last-commit/rain120/qq-music-api?style=flat-square) ![GitHub top language](https://img.shields.io/github/languages/top/rain120/qq-music-api?style=flat-square)
12
-
13
- </div>
14
-
15
- > QQ音乐API koa2 ē‰ˆęœ¬, é€ščæ‡Webē½‘é”µē‰ˆčÆ·ę±‚QQéŸ³ä¹ęŽ„å£ę•°ę®, ęœ‰é—®é¢˜čÆ·ę [issue](https://github.com/Rain120/qq-music-api/issues)
16
-
17
- > å½“å‰ä»£ē ä»…ä¾›å­¦ä¹ ļ¼ŒäøåÆåšå•†äøšē”Øé€”
18
-
19
- ### APIē»“ęž„å›¾
20
-
21
- > ē›®å‰ęš‚ę—¶ę²”ęœ‰ę—¶é—“åšē™»å½•ęØ”å—ēš„ęŽ„å£ļ¼Œę¬¢čæŽå„ä½å¤§ä½¬ē»™ęˆ‘`PR`, é˜æé‡Œå˜Žå¤š
22
-
23
- ![qq-music](./screenshot/qq-music.png)
24
-
25
- ### ēŽÆå¢ƒč¦ę±‚
26
-
27
- > å› äøŗęœ¬é”¹ē›®é‡‡ē”Øēš„ę˜Æ`koa2`, ę‰€ä»„čÆ·ē”®äæä½ ēš„`node`ē‰ˆęœ¬ę˜Æ7.6.0+
28
-
29
- ```
30
- node -v
31
- ```
32
- ### šŸ“¦ 安装
33
-
34
- ```
35
- git clone git@github.com:Rain120/qq-music-api.git
36
- cd qq-music-api
37
- npm install
38
- ```
39
-
40
- ### šŸ”Øé”¹ē›®åÆåŠØ
41
- ```
42
- // npm i -g nodemon
43
- npm run start
44
-
45
- // or don't install nodemon
46
- node app.js
47
- ```
48
- é”¹ē›®ē›‘å¬ē«Æå£ę˜Æ`3200`
49
-
50
- ### 🐳 Docker
51
-
52
- ```sh
53
- # local local build
54
- npm run build:local-images
55
-
56
- # local remote build
57
- npm run build:remote-images
58
-
59
- # build images
60
- npm run build:images
61
-
62
- # local run
63
- npm run run:images
64
-
65
- # remote run
66
- docker pull qq-music-api
67
- ```
68
-
69
- ### åŠŸčƒ½ē‰¹ę€§
70
-
71
- - [x] čŽ·å–ę­Œę›²ę’­ę”¾é“¾ęŽ„ **2021-01-24**
72
-
73
- - [x] ę”ÆęŒč‡Ŗå®šä¹‰č®¾ē½® `cookie` **2021-01-23**
74
-
75
- - [x] čŽ·å–ę­Œę›² + 专辑图片 **2020-05-24**
76
-
77
- - [x] čŽ·å–ę­Œę‰‹ēƒ­é—Øę­Œę›² **2020-07-04**
78
-
79
- - [x] čŽ·å–QQéŸ³ä¹äŗ§å“ēš„äø‹č½½åœ°å€
80
-
81
- - [x] čŽ·å–ę­Œå•åˆ†ē±»
82
-
83
- - [x] čŽ·å–ę­Œå•åˆ—č”Ø
84
-
85
- - [x] čŽ·å–ę­Œå•čÆ¦ęƒ…
86
-
87
- - [x] čŽ·å–MV标签
88
-
89
- - [x] čŽ·å–MV播放俔息
90
-
91
- - [x] čŽ·å–ę­Œę‰‹MV
92
-
93
- - [x] čŽ·å–ē›øä¼¼ę­Œę‰‹
94
-
95
- - [x] čŽ·å–ę­Œę‰‹äæ”ęÆ
96
-
97
- - [x] čŽ·å–ę­Œę‰‹č¢«å…³ę³Øę•°é‡äæ”ęÆ
98
-
99
- - [x] čŽ·å–ē”µå°åˆ—č”Ø
100
-
101
- - [x] čŽ·å–äø“č¾‘
102
-
103
- - [x] čŽ·å–ę•°å­—äø“č¾‘
104
-
105
- - [x] čŽ·å–ę­Œę›²ę­ŒčÆ
106
-
107
- - [x] čŽ·å–MV
108
-
109
- - [x] čŽ·å–ę–°ē¢Ÿäæ”ęÆ
110
-
111
- - [x] čŽ·å–ę­Œę‰‹äø“č¾‘
112
-
113
- - [x] ~~čŽ·å–ę­Œę›²VKey~~ **2021-01-24**
114
-
115
- - [x] čŽ·å–ęœē“¢ēƒ­čÆ
116
-
117
- - [x] čŽ·å–å…³é”®å­—ęœē“¢ęē¤ŗ
118
-
119
- - [x] čŽ·å–ęœē“¢ē»“ęžœ
120
-
121
- - [x] čŽ·å–é¦–é”µęŽØč
122
-
123
- - [x] čŽ·å–ęŽ’č”Œę¦œå•åˆ—č”Ø
124
-
125
- - [x] čŽ·å–ęŽ’č”Œę¦œå•čÆ¦ęƒ…
126
-
127
- - [x] čŽ·å–čÆ„č®ŗäæ”ęÆ(cmdä»£č”Øēš„ę„ę€ę²”å¤Ŗå¼„ę˜Žē™½)
128
-
129
- - [x] čŽ·å–ē„ØåŠ”äæ”ęÆ
130
-
131
- - [x] čŽ·å–ę­Œå•čÆ¦ęƒ…
132
-
133
- - [x] čŽ·å–ę­Œę‰‹åˆ—č”Ø
134
-
135
- ### 使用文攣
136
-
137
- 使用`apis`详见[文攣](https://rain120.github.io/qq-music-api/#/)
138
-
139
- ### å…³äŗŽé”¹ē›®
140
-
141
- **ēµę„Ÿę„č‡Ŗ**
142
-
143
- [Binaryify/NeteaseCloudMusicApi](https://github.com/Binaryify/NeteaseCloudMusicApi)
144
-
145
- [Vue2.0å¼€å‘ä¼äøšēŗ§ē§»åŠØē«ÆéŸ³ä¹Web App](https://coding.imooc.com/class/107.html)
146
-
147
- **å‚č€ƒå†…å®¹**
148
-
149
- [Koa 2](https://koa.bootcss.com/)
150
-
151
- [Axios](https://github.com/axios/axios)
152
-
153
- [é˜®äø€å³°č€åøˆ - HTTP Referer 教程](http://www.ruanyifeng.com/blog/2019/06/http-referer.html)
154
-
155
- ### é”¹ē›®äøč¶³
156
-
157
- 1. å› äøŗęœ¬äŗŗę²”å†™čæ‡`unit test`, ę‰€ä»„ęœ¬é”¹ē›®å°šęœŖę·»åŠ `unit test`, ē­‰ęœ‰ę—¶é—“å†ę·»åŠ ;
158
-
159
- 2. ē™»å½•čŽ·å–äøŖäŗŗäæ”ęÆē­‰ęŽ„å£éƒ½ę²”åš
160
-
161
- #### šŸ¤ 蓔献 ![PR](https://img.shields.io/badge/PRs-Welcome-orange?style=flat-square&logo=appveyor)
162
-
163
- We welcome all contributions. You can submit any ideas as [pull requests](https://github.com/Rain120/qq-music-api/pulls) or as a GitHub [issue](https://github.com/Rain120/qq-music-api/issues).
164
-
165
- #### šŸ‘Øā€šŸ­ ä½œč€…
166
-
167
- > Front-End development engineer, technology stack: React + Typescript + Mobx, also used Vue + Vuex for a while
168
-
169
- - [Github](https://github.com/Rain120)
170
- - [ēŸ„ä¹Ž](https://www.zhihu.com/people/yan-yang-nian-hua-120/activities)
171
- - [ꎘ金](https://juejin.im/user/57c616496be3ff00584f54db)
172
-
173
- #### šŸ“ License
174
-
175
- [MIT](https://github.com/Rain120/qq-music-api/blob/master/LICENSE)
176
-
177
- Copyright Ā© 2019-present [Rain120](https://github.com/Rain120).
1
+ <h1 align="center">QQ Music API</h1>
2
+
3
+ <div align="center">
4
+
5
+ <img src='music.png' />
6
+
7
+ ![GitHub watchers](https://img.shields.io/github/watchers/sansenjian/qq-music-api?style=social) ![GitHub stars](https://img.shields.io/github/stars/sansenjian/qq-music-api?style=social) ![GitHub forks](https://img.shields.io/github/forks/sansenjian/qq-music-api?style=social)
8
+ <br />
9
+ ![node](https://img.shields.io/badge/node-%3E%3D18.0.0-green?style=flat-square)
10
+ <br />
11
+ ![GitHub repo size](https://img.shields.io/github/repo-size/sansenjian/qq-music-api?style=flat-square) ![GitHub package.json version](https://img.shields.io/github/package-json/v/sansenjian/qq-music-api?style=flat-square) ![GitHub](https://img.shields.io/github/license/sansenjian/qq-music-api?style=flat-square) ![GitHub open issues](https://img.shields.io/github/issues/sansenjian/qq-music-api?style=flat-square) ![GitHub closed issues](https://img.shields.io/github/issues-closed/sansenjian/qq-music-api) ![GitHub last commit](https://img.shields.io/github/last-commit/sansenjian/qq-music-api?style=flat-square) ![GitHub top language](https://img.shields.io/github/languages/top/sansenjian/qq-music-api?style=flat-square)
12
+
13
+ </div>
14
+
15
+ > šŸ“ ęœ¬é”¹ē›® Fork 自 [Rain120/qq-music-api](https://github.com/Rain120/qq-music-api)ļ¼ŒåŽŸé”¹ē›®å·²åœę­¢ē»“ęŠ¤ļ¼Œę­¤ē‰ˆęœ¬ęŒē»­ę›“ę–°äø­
16
+
17
+ > QQ音乐API koa2 ē‰ˆęœ¬, é€ščæ‡Webē½‘é”µē‰ˆčÆ·ę±‚QQéŸ³ä¹ęŽ„å£ę•°ę®, ęœ‰é—®é¢˜čÆ·ę [issue](https://github.com/sansenjian/qq-music-api/issues)
18
+
19
+ > å½“å‰ä»£ē ä»…ä¾›å­¦ä¹ ļ¼ŒäøåÆåšå•†äøšē”Øé€”
20
+
21
+ ### APIē»“ęž„å›¾
22
+
23
+ > ē›®å‰ęš‚ę—¶ę²”ęœ‰ę—¶é—“åšē™»å½•ęØ”å—ēš„ęŽ„å£ļ¼Œę¬¢čæŽå„ä½å¤§ä½¬ē»™ęˆ‘`PR`, é˜æé‡Œå˜Žå¤š
24
+
25
+ ![qq-music](./screenshot/qq-music.png)
26
+
27
+ ### ēŽÆå¢ƒč¦ę±‚
28
+
29
+ > ęœ¬é”¹ē›®é‡‡ē”Ø `koa2`ļ¼Œéœ€č¦ Node.js 18.0.0+
30
+
31
+ ```
32
+ node -v
33
+ ```
34
+
35
+ ### šŸ“¦ 安装
36
+
37
+ **ę–¹å¼äø€ļ¼šå…‹éš†ä»“åŗ“**
38
+ ```
39
+ git clone git@github.com:sansenjian/qq-music-api.git
40
+ cd qq-music-api
41
+ npm install
42
+ ```
43
+
44
+ **ę–¹å¼äŗŒļ¼šNPM 安装**
45
+ ```
46
+ npm install @sansenjian/qq-music-api
47
+ ```
48
+
49
+ åœØé”¹ē›®äø­ä½æē”Øļ¼š
50
+ ```javascript
51
+ // 启动 API ęœåŠ”
52
+ const { spawn } = require('child_process');
53
+ const path = require('path');
54
+
55
+ const qqMusicPath = path.join(__dirname, 'node_modules', '@sansenjian/qq-music-api', 'app.js');
56
+ spawn('node', [qqMusicPath], {
57
+ env: { ...process.env, PORT: '3200' },
58
+ stdio: 'inherit'
59
+ });
60
+ ```
61
+
62
+ ### šŸ”Ø é”¹ē›®åÆåŠØ
63
+ ```
64
+ // npm i -g nodemon
65
+ npm run start
66
+
67
+ // or don't install nodemon
68
+ node app.js
69
+ ```
70
+ é”¹ē›®ē›‘å¬ē«Æå£ę˜Æ `3200`
71
+
72
+ ### šŸ“‹ ä¾čµ–ę›“ę–° (2026-03)
73
+
74
+ ęœ¬é”¹ē›®å·²å®Œęˆä¾čµ–ēŽ°ä»£åŒ–å‡ēŗ§ļ¼Œäø»č¦å˜ę›“å¦‚äø‹ļ¼š
75
+
76
+ **ē”Ÿäŗ§ä¾čµ–**
77
+ | ä¾čµ– | ē‰ˆęœ¬ | čÆ“ę˜Ž |
78
+ |-----|------|-----|
79
+ | axios | ^1.6.0 | äæ®å¤å®‰å…Øę¼ę“ž CVE-2021-3749 |
80
+ | koa | ^2.15.0 | ꔆꞶꛓꖰ |
81
+ | koa-bodyparser | ^4.4.0 | č§£ęžå™Øę›“ę–° |
82
+ | @koa/router | ^12.0.0 | 替代 koa-router |
83
+ | koa-static | ^5.0.0 | é™ę€ę–‡ä»¶ęœåŠ” |
84
+ | dayjs | ^1.11.10 | 替代 moment.js (ę›“č½»é‡) |
85
+
86
+ **å¼€å‘ä¾čµ–**
87
+ | ä¾čµ– | ē‰ˆęœ¬ | čÆ“ę˜Ž |
88
+ |-----|------|-----|
89
+ | eslint | ^8.56.0 | ä»£ē ę£€ęŸ„ |
90
+ | eslint-config-standard | ^17.0.0 | ę ‡å‡†é…ē½® |
91
+ | prettier | ^3.0.0 | ä»£ē ę ¼å¼åŒ– |
92
+ | husky | ^9.0.0 | Git 钩子 |
93
+ | lint-staged | ^15.0.0 | ęš‚å­˜åŒŗę£€ęŸ„ |
94
+ | @commitlint/* | ^18.0.0 | ęäŗ¤äæ”ęÆč§„čŒƒ |
95
+ | @babel/* | ^7.23.0 | 编译巄具 |
96
+ | nodemon | ^3.0.0 | å¼€å‘ēƒ­é‡č½½ |
97
+
98
+ **å·²ē§»é™¤ēš„ä¾čµ–**
99
+ - `colors` - å­˜åœØå®‰å…Øé—®é¢˜ļ¼Œå·²ē”Ø chalk 替代
100
+ - `moment` - 已用 dayjs 替代
101
+ - `lodash.get` - å·²ē”ØåŽŸē”ŸåÆé€‰é“¾ `?.` 替代
102
+ - `eslint-plugin-node` - 已用 eslint-plugin-n 替代
103
+ - `eslint-plugin-standard` - å·²é›†ęˆåˆ° eslint-config-standard
104
+
105
+ ### åŠŸčƒ½ē‰¹ę€§
106
+
107
+ - [x] čŽ·å–ę­Œę›²ę’­ę”¾é“¾ęŽ„ **2021-01-24**
108
+
109
+ - [x] ę”ÆęŒč‡Ŗå®šä¹‰č®¾ē½® `cookie` **2021-01-23**
110
+
111
+ - [x] čŽ·å–ę­Œę›² + 专辑图片 **2020-05-24**
112
+
113
+ - [x] čŽ·å–ę­Œę‰‹ēƒ­é—Øę­Œę›² **2020-07-04**
114
+
115
+ - [x] čŽ·å–QQéŸ³ä¹äŗ§å“ēš„äø‹č½½åœ°å€
116
+
117
+ - [x] čŽ·å–ę­Œå•åˆ†ē±»
118
+
119
+ - [x] čŽ·å–ę­Œå•åˆ—č”Ø
120
+
121
+ - [x] čŽ·å–ę­Œå•čÆ¦ęƒ…
122
+
123
+ - [x] čŽ·å–MV标签
124
+
125
+ - [x] čŽ·å–MV播放俔息
126
+
127
+ - [x] čŽ·å–ę­Œę‰‹MV
128
+
129
+ - [x] čŽ·å–ē›øä¼¼ę­Œę‰‹
130
+
131
+ - [x] čŽ·å–ę­Œę‰‹äæ”ęÆ
132
+
133
+ - [x] čŽ·å–ę­Œę‰‹č¢«å…³ę³Øę•°é‡äæ”ęÆ
134
+
135
+ - [x] čŽ·å–ē”µå°åˆ—č”Ø
136
+
137
+ - [x] čŽ·å–äø“č¾‘
138
+
139
+ - [x] čŽ·å–ę•°å­—äø“č¾‘
140
+
141
+ - [x] čŽ·å–ę­Œę›²ę­ŒčÆ
142
+
143
+ - [x] čŽ·å–MV
144
+
145
+ - [x] čŽ·å–ę–°ē¢Ÿäæ”ęÆ
146
+
147
+ - [x] čŽ·å–ę­Œę‰‹äø“č¾‘
148
+
149
+ - [x] ~~čŽ·å–ę­Œę›²VKey~~ **2021-01-24**
150
+
151
+ - [x] čŽ·å–ęœē“¢ēƒ­čÆ
152
+
153
+ - [x] čŽ·å–å…³é”®å­—ęœē“¢ęē¤ŗ
154
+
155
+ - [x] čŽ·å–ęœē“¢ē»“ęžœ
156
+
157
+ - [x] čŽ·å–é¦–é”µęŽØč
158
+
159
+ - [x] čŽ·å–ęŽ’č”Œę¦œå•åˆ—č”Ø
160
+
161
+ - [x] čŽ·å–ęŽ’č”Œę¦œå•čÆ¦ęƒ…
162
+
163
+ - [x] čŽ·å–čÆ„č®ŗäæ”ęÆ(cmdä»£č”Øēš„ę„ę€ę²”å¤Ŗå¼„ę˜Žē™½)
164
+
165
+ - [x] čŽ·å–ē„ØåŠ”äæ”ęÆ
166
+
167
+ - [x] čŽ·å–ę­Œå•čÆ¦ęƒ…
168
+
169
+ - [x] čŽ·å–ę­Œę‰‹åˆ—č”Ø
170
+
171
+ ### 使用文攣
172
+
173
+ 使用`apis`详见[文攣](https://rain120.github.io/qq-music-api/#/)
174
+
175
+ ### å…³äŗŽé”¹ē›®
176
+
177
+ **ēµę„Ÿę„č‡Ŗ**
178
+
179
+ [Binaryify/NeteaseCloudMusicApi](https://github.com/Binaryify/NeteaseCloudMusicApi)
180
+
181
+ [Vue2.0å¼€å‘ä¼äøšēŗ§ē§»åŠØē«ÆéŸ³ä¹Web App](https://coding.imooc.com/class/107.html)
182
+
183
+ **å‚č€ƒå†…å®¹**
184
+
185
+ [Koa 2](https://koa.bootcss.com/)
186
+
187
+ [Axios](https://github.com/axios/axios)
188
+
189
+ [é˜®äø€å³°č€åøˆ - HTTP Referer 教程](http://www.ruanyifeng.com/blog/2019/06/http-referer.html)
190
+
191
+ ### é”¹ē›®äøč¶³
192
+
193
+ 1. å› äøŗęœ¬äŗŗę²”å†™čæ‡`unit test`, ę‰€ä»„ęœ¬é”¹ē›®å°šęœŖę·»åŠ `unit test`, ē­‰ęœ‰ę—¶é—“å†ę·»åŠ ;
194
+
195
+ 2. ē™»å½•čŽ·å–äøŖäŗŗäæ”ęÆē­‰ęŽ„å£éƒ½ę²”åš
196
+
197
+ #### šŸ¤ 蓔献 ![PR](https://img.shields.io/badge/PRs-Welcome-orange?style=flat-square&logo=appveyor)
198
+
199
+ We welcome all contributions. You can submit any ideas as [pull requests](https://github.com/sansenjian/qq-music-api/pulls) or as a GitHub [issue](https://github.com/sansenjian/qq-music-api/issues).
200
+
201
+ #### šŸ‘Øā€šŸ­ ē»“ęŠ¤č€…
202
+
203
+ - [GitHub](https://github.com/sansenjian)
204
+
205
+ #### šŸ™ åŽŸä½œč€…
206
+
207
+ ęœ¬é”¹ē›®åŸŗäŗŽ [Rain120](https://github.com/Rain120) ēš„å¼€ęŗé”¹ē›®ļ¼Œę„Ÿč°¢åŽŸä½œč€…ēš„č“”ēŒ®ļ¼
208
+
209
+ - [GitHub](https://github.com/Rain120)
210
+ - [ēŸ„ä¹Ž](https://www.zhihu.com/people/yan-yang-nian-hua-120/activities)
211
+ - [ꎘ金](https://juejin.im/user/57c616496be3ff00584f54db)
212
+
213
+ #### šŸ“ License
214
+
215
+ [MIT](https://github.com/sansenjian/qq-music-api/blob/master/LICENSE)
216
+
217
+ Copyright Ā© 2019-present [Rain120](https://github.com/Rain120).
218
+ Fork maintained by [sansenjian](https://github.com/sansenjian).
package/app.js CHANGED
@@ -1,75 +1,75 @@
1
- require('@babel/register');
2
- const Koa = require('koa');
3
- const app = new Koa();
4
- const bodyParser = require('koa-bodyparser');
5
- const path = require('path');
6
- const static = require('koa-static');
7
- const exec = require('child_process').exec;
8
- const chalk = require('chalk');
9
-
10
- const cors = require('./middlewares/koa-cors');
11
- const router = require('./routers/router');
12
- const cookie = require('./util/cookie');
13
- require('./util/colors');
14
- const userInfo = require('./config/user-info');
15
- const package = require('./package.json');
16
- global.userInfo = Object.assign({}, userInfo);
17
-
18
- console.log(chalk.green('\nšŸ„³šŸŽ‰ We had supported config the user cookies. \n'));
19
-
20
- if (!(global.userInfo.loginUin || global.userInfo.uin)) {
21
- console.log(chalk.yellow(`šŸ˜” The configuration ${chalk.red('loginUin')} or your ${chalk.red('cookie')} in file ${chalk.green('config/user-info')} has not configured. \n`));
22
- }
23
-
24
- if (!global.userInfo.cookie) {
25
- console.log(chalk.yellow(`šŸ˜” The configuration ${chalk.red('cookie')} in file ${chalk.green('config/user-info')} has not configured. \n`));
26
- }
27
-
28
- exec('npm info QQ-Music-API version', (err, stdout, stderr) => {
29
- if(!err){
30
- let version = stdout.trim();
31
- if(package.version < version){
32
- console.log(`Current Version: ${version}, Current Version: ${package.version}, Please update it.`.prompt);
33
- }
34
- }
35
- });
36
-
37
- app.use(bodyParser());
38
- app.use(cookie());
39
- app.use(static(
40
- path.join(__dirname, 'public')
41
- ));
42
-
43
- // logger
44
- app.use(async (ctx, next) => {
45
- await next();
46
- const rt = ctx.response.get('X-Response-Time');
47
- console.log(`${ctx.method} ${ctx.url} - ${rt}`.prompt);
48
- });
49
-
50
- // cors
51
- app.use(cors({
52
- origin: (ctx) => ctx.request.header.origin,
53
- exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
54
- maxAge: 5,
55
- credentials: true,
56
- allowMethods: ['GET', 'POST', 'DELETE'],
57
- allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
58
- }));
59
-
60
- // x-response-time
61
- app.use(async (ctx, next) => {
62
- const start = Date.now();
63
- await next();
64
- const ms = Date.now() - start;
65
- ctx.set('X-Response-Time', `${ms}ms`);
66
- });
67
-
68
- app.use(router.routes())
69
- .use(router.allowedMethods());
70
-
71
- const PORT = process.env.PORT || 3200;
72
-
73
- app.listen(PORT, () => {
74
- console.log(`server running @ http://localhost:${PORT}`.prompt);
75
- });
1
+ require('@babel/register');
2
+ const Koa = require('koa');
3
+ const app = new Koa();
4
+ const bodyParser = require('koa-bodyparser');
5
+ const path = require('path');
6
+ const static = require('koa-static');
7
+ const exec = require('child_process').exec;
8
+ const chalk = require('chalk');
9
+
10
+ const cors = require('./middlewares/koa-cors');
11
+ const router = require('./routers/router');
12
+ const cookie = require('./util/cookie');
13
+ const colors = require('./util/colors');
14
+ const userInfo = require('./config/user-info');
15
+ const package = require('./package.json');
16
+ global.userInfo = Object.assign({}, userInfo);
17
+
18
+ console.log(chalk.green('\nšŸ„³šŸŽ‰ We had supported config the user cookies. \n'));
19
+
20
+ if (!(global.userInfo.loginUin || global.userInfo.uin)) {
21
+ console.log(chalk.yellow(`šŸ˜” The configuration ${chalk.red('loginUin')} or your ${chalk.red('cookie')} in file ${chalk.green('config/user-info')} has not configured. \n`));
22
+ }
23
+
24
+ if (!global.userInfo.cookie) {
25
+ console.log(chalk.yellow(`šŸ˜” The configuration ${chalk.red('cookie')} in file ${chalk.green('config/user-info')} has not configured. \n`));
26
+ }
27
+
28
+ exec('npm info QQ-Music-API version', (err, stdout, stderr) => {
29
+ if(!err){
30
+ let version = stdout.trim();
31
+ if(package.version < version){
32
+ console.log(colors.prompt(`Current Version: ${version}, Current Version: ${package.version}, Please update it.`));
33
+ }
34
+ }
35
+ });
36
+
37
+ app.use(bodyParser());
38
+ app.use(cookie());
39
+ app.use(static(
40
+ path.join(__dirname, 'public')
41
+ ));
42
+
43
+ // logger
44
+ app.use(async (ctx, next) => {
45
+ await next();
46
+ const rt = ctx.response.get('X-Response-Time');
47
+ console.log(colors.prompt(`${ctx.method} ${ctx.url} - ${rt}`));
48
+ });
49
+
50
+ // cors
51
+ app.use(cors({
52
+ origin: (ctx) => ctx.request.header.origin,
53
+ exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
54
+ maxAge: 5,
55
+ credentials: true,
56
+ allowMethods: ['GET', 'POST', 'DELETE'],
57
+ allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
58
+ }));
59
+
60
+ // x-response-time
61
+ app.use(async (ctx, next) => {
62
+ const start = Date.now();
63
+ await next();
64
+ const ms = Date.now() - start;
65
+ ctx.set('X-Response-Time', `${ms}ms`);
66
+ });
67
+
68
+ app.use(router.routes())
69
+ .use(router.allowedMethods());
70
+
71
+ const PORT = process.env.PORT || 3200;
72
+
73
+ app.listen(PORT, () => {
74
+ console.log(colors.prompt(`server running @ http://localhost:${PORT}`));
75
+ });
@@ -1,20 +1,20 @@
1
- /*
2
- * @Author: Rainy
3
- * @Date: 2020-07-03 18:47:30
4
- * @LastEditors: Rainy
5
- * @LastEditTime: 2020-07-03 18:51:11
6
- */
7
-
8
- module.exports = {
9
- extends: ['@commitlint/config-conventional'],
10
- rules: {
11
- 'type-enum': [
12
- 2,
13
- 'always',
14
- ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert', 'config'],
15
- ],
16
- 'subject-full-stop': [0, 'never'],
17
- 'subject-case': [0, 'never'],
18
- 'header-max-length': [0, 'always', 150],
19
- },
20
- };
1
+ /*
2
+ * @Author: Rainy
3
+ * @Date: 2020-07-03 18:47:30
4
+ * @LastEditors: Rainy
5
+ * @LastEditTime: 2020-07-03 18:51:11
6
+ */
7
+
8
+ module.exports = {
9
+ extends: ['@commitlint/config-conventional'],
10
+ rules: {
11
+ 'type-enum': [
12
+ 2,
13
+ 'always',
14
+ ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert', 'config'],
15
+ ],
16
+ 'subject-full-stop': [0, 'never'],
17
+ 'subject-case': [0, 'never'],
18
+ 'header-max-length': [0, 'always', 150],
19
+ },
20
+ };