diff --git a/.github/workflows/Build_Image.yml b/.github/workflows/Build_Image.yml index 79ab598..8e4a572 100644 --- a/.github/workflows/Build_Image.yml +++ b/.github/workflows/Build_Image.yml @@ -2,7 +2,7 @@ name: Publish Docker image on: push: - branches: [main, master] + branches: [main] tags: ['v*'] workflow_dispatch: diff --git a/.github/workflows/npm.yml b/.github/workflows/npm.yml index fdf8029..bd33d6f 100644 --- a/.github/workflows/npm.yml +++ b/.github/workflows/npm.yml @@ -2,11 +2,6 @@ name: Release on: - push: - branches: - - main - tags: - - 'v*.*.*' workflow_dispatch: jobs: diff --git a/README.MD b/README.MD index f55f778..91ba28b 100644 --- a/README.MD +++ b/README.MD @@ -6,6 +6,15 @@ 本项目为网易云音乐第三方 Node.js API,基于停更的原版 API 持续维护,支持丰富的音乐相关接口,适合自建服务、二次开发和多平台部署(如果原版诈尸, 我会及时同步 or 归档)。 +> [!IMPORTANT] +> +> ## 注意 +> +> - 本项目是一个高度去中心化的第三方 API,其维护都由社区志愿者使用`Pull Request`完成。 +> - 使用本项目时请务必遵守相关法律法规,遵守`MIT`协议, 尊重网易云音乐的服务条款。 +> - 原作者项目 [Binaryify/NeteaseCloudMusicApi](https://github.com/binaryify/NeteaseCloudMusicApi) 并非完全停止维护, 你可以在 [NeteaseCloudMusicApi 的 NPMJS 页面](https://www.npmjs.com/package/NeteaseCloudMusicApi) 查看最新版本信息。 +> - 感谢尊重和理解! + ## 快速开始 ### 环境要求 diff --git a/package.json b/package.json index 26b5b12..2e2778a 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "express": "^5.2.1", "express-fileupload": "^1.5.2", "md5": "^2.3.0", - "music-metadata": "^11.10.3", + "music-metadata": "^11.10.4", "node-forge": "^1.3.3", "pac-proxy-agent": "^7.2.0", "qrcode": "^1.5.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 604598d..7173da9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: ^2.3.0 version: 2.3.0 music-metadata: - specifier: ^11.10.3 - version: 11.10.3 + specifier: ^11.10.4 + version: 11.10.4 node-forge: specifier: ^1.3.3 version: 1.3.3 @@ -144,14 +144,11 @@ packages: resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} engines: {node: '>=6.9.0'} - '@borewit/text-codec@0.1.1': - resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} + '@borewit/text-codec@0.2.1': + resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} - '@borewit/text-codec@0.2.0': - resolution: {integrity: sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==} - - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -527,8 +524,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + basic-ftp@5.1.0: + resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==} engines: {node: '>=10.0.0'} binary-extensions@2.3.0: @@ -1049,8 +1046,8 @@ packages: espurify@1.8.1: resolution: {integrity: sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==} - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1744,8 +1741,8 @@ packages: multistream@4.1.0: resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} - music-metadata@11.10.3: - resolution: {integrity: sha512-j0g/x4cNNZW6I5gdcPAY+GFkJY9WHTpkFDMBJKQLxJQyvSfQbXm57fTE3haGFFuOzCgtsTd4Plwc49Sn9RacDQ==} + music-metadata@11.10.4: + resolution: {integrity: sha512-W8ByTxUk3p2PHycZraD+XVOzho5zONRqP9XVDwK4kTDGwfDrAmsNXMxNgSii8bI/GDC86mtk5kwGh1Lv/imNlA==} engines: {node: '>=18'} nano-spawn@2.0.0: @@ -2009,8 +2006,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} prettier@3.6.2: @@ -2050,8 +2047,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + qs@6.14.1: + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -2409,8 +2406,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@6.1.1: - resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} touch@3.1.1: @@ -2424,8 +2421,8 @@ packages: resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} engines: {node: '>= 0.4'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2671,11 +2668,9 @@ snapshots: '@babel/helper-validator-identifier': 7.28.5 to-fast-properties: 2.0.0 - '@borewit/text-codec@0.1.1': {} + '@borewit/text-codec@0.2.1': {} - '@borewit/text-codec@0.2.0': {} - - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.0)': dependencies: eslint: 9.39.0 eslint-visitor-keys: 3.4.3 @@ -2787,7 +2782,7 @@ snapshots: '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 - token-types: 6.1.1 + token-types: 6.1.2 transitivePeerDependencies: - supports-color @@ -2863,7 +2858,7 @@ snapshots: graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2923,7 +2918,7 @@ snapshots: '@typescript-eslint/utils': 8.46.2(eslint@9.39.0)(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.0 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2943,7 +2938,7 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2959,14 +2954,14 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/utils@8.46.2(eslint@9.39.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.0) '@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) @@ -3111,7 +3106,7 @@ snapshots: base64-js@1.5.1: {} - basic-ftp@5.0.5: {} + basic-ftp@5.1.0: {} binary-extensions@2.3.0: {} @@ -3131,7 +3126,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.14.0 + qs: 6.14.1 raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 @@ -3146,7 +3141,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.1 on-finished: 2.4.1 - qs: 6.14.0 + qs: 6.14.1 raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: @@ -3671,7 +3666,7 @@ snapshots: dependencies: eslint: 9.39.0 prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 + prettier-linter-helpers: 1.0.1 synckit: 0.11.11 optionalDependencies: eslint-config-prettier: 10.1.8(eslint@9.39.0) @@ -3687,7 +3682,7 @@ snapshots: eslint@9.39.0: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 @@ -3707,7 +3702,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -3786,7 +3781,7 @@ snapshots: dependencies: core-js: 2.6.12 - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -3838,7 +3833,7 @@ snapshots: parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.14.0 + qs: 6.14.1 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.19.2 @@ -3873,7 +3868,7 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.14.0 + qs: 6.14.1 range-parser: 1.2.1 router: 2.2.0 send: 1.2.1 @@ -3920,7 +3915,7 @@ snapshots: dependencies: '@tokenizer/inflate': 0.4.1 strtok3: 10.3.4 - token-types: 6.1.1 + token-types: 6.1.2 uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color @@ -4060,7 +4055,7 @@ snapshots: get-uri@6.0.5: dependencies: - basic-ftp: 5.0.5 + basic-ftp: 5.1.0 data-uri-to-buffer: 6.0.2 debug: 4.4.3 transitivePeerDependencies: @@ -4556,16 +4551,16 @@ snapshots: once: 1.4.0 readable-stream: 3.6.2 - music-metadata@11.10.3: + music-metadata@11.10.4: dependencies: - '@borewit/text-codec': 0.2.0 + '@borewit/text-codec': 0.2.1 '@tokenizer/token': 0.3.0 content-type: 1.0.5 debug: 4.4.3 file-type: 21.2.0 media-typer: 1.1.0 strtok3: 10.3.4 - token-types: 6.1.1 + token-types: 6.1.2 uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color @@ -4897,7 +4892,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 @@ -4931,7 +4926,7 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 - qs@6.14.0: + qs@6.14.1: dependencies: side-channel: 1.1.0 @@ -5386,9 +5381,9 @@ snapshots: toidentifier@1.0.1: {} - token-types@6.1.1: + token-types@6.1.2: dependencies: - '@borewit/text-codec': 0.1.1 + '@borewit/text-codec': 0.2.1 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -5402,7 +5397,7 @@ snapshots: typedarray.prototype.slice: 1.0.5 which-typed-array: 1.1.19 - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 diff --git a/public/eapi_decrypt.html b/public/eapi_decrypt.html index 8675fd6..ace7e41 100644 --- a/public/eapi_decrypt.html +++ b/public/eapi_decrypt.html @@ -8,6 +8,19 @@ + +

eapi 参数和返回内容解析

@@ -23,7 +36,7 @@

解密结果: -

{{ JSON.stringify(JSON.parse(result), null, 2) }}
+
{{ JSON.stringify(JSON.parse(result), null, 2) }}

@@ -39,7 +52,6 @@ - + \ No newline at end of file diff --git a/public/qrlogin-nocookie.html b/public/qrlogin-nocookie.html index 1d8e70d..f8f8014 100644 --- a/public/qrlogin-nocookie.html +++ b/public/qrlogin-nocookie.html @@ -24,7 +24,7 @@ }) const key = res.data.data.unikey const res2 = await axios({ - url: `/login/qr/create?key=${key}&qrimg=true×tamp=${Date.now()}`, + url: `/login/qr/create?key=${key}&platform=web&qrimg=true×tamp=${Date.now()}`, }) document.querySelector('#qrImg').src = res2.data.data.qrimg diff --git a/public/qrlogin.html b/public/qrlogin.html index bb02327..dc9c6ef 100644 --- a/public/qrlogin.html +++ b/public/qrlogin.html @@ -23,7 +23,7 @@ }) const key = res.data.data.unikey const res2 = await axios({ - url: `/login/qr/create?key=${key}&qrimg=true×tamp=${Date.now()}&ua=pc`, + url: `/login/qr/create?key=${key}&platform=web&qrimg=true×tamp=${Date.now()}&ua=pc`, }) document.querySelector('#qrImg').src = res2.data.data.qrimg