Merge branch 'main' into dependabot/npm_and_yarn/types/node-24.6.0

This commit is contained in:
ElyPrism 2025-10-01 21:54:54 +08:00 committed by GitHub
commit 22e47582c4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 156 additions and 41 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@neteaseapireborn/api", "name": "@neteaseapireborn/api",
"version": "4.29.6", "version": "4.29.7",
"description": "为停更的网易云音乐 NodeJs API 提供持续的维护!", "description": "为停更的网易云音乐 NodeJs API 提供持续的维护!",
"scripts": { "scripts": {
"start": "node app.js", "start": "node app.js",

60
pnpm-lock.yaml generated
View File

@ -394,10 +394,6 @@ packages:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
async-generator-function@1.0.0:
resolution: {integrity: sha512-+NAXNqgCrB95ya4Sr66i1CL2hqLVckAk7xwRYWdcm39/ELQ6YNn1aw5r0bdQtqNZgQpEWzc5yc/igXc7aL5SLA==}
engines: {node: '>= 0.4'}
asynckit@0.4.0: asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@ -1122,16 +1118,16 @@ packages:
functions-have-names@1.2.3: functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
generator-function@2.0.0: generator-function@2.0.1:
resolution: {integrity: sha512-xPypGGincdfyl/AiSGa7GjXLkvld9V7GjZlowup9SHIJnQnHLFiLODCd/DqKOp0PBagbHJ68r1KJI9Mut7m4sA==} resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
get-caller-file@2.0.5: get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*} engines: {node: 6.* || 8.* || >= 10.*}
get-intrinsic@1.3.1: get-intrinsic@1.3.0:
resolution: {integrity: sha512-fk1ZVEeOX9hVZ6QzoBNEC55+Ucqg4sTVwrVuigZhuRPESVFpMyXnd3sbXvPOwp7Y9riVyANiqhEuRF0G1aVSeQ==} resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
get-proto@1.0.1: get-proto@1.0.1:
@ -1372,8 +1368,8 @@ packages:
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
is-generator-function@1.1.0: is-generator-function@1.1.2:
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
is-glob@4.0.3: is-glob@4.0.3:
@ -2812,7 +2808,7 @@ snapshots:
define-properties: 1.2.1 define-properties: 1.2.1
es-abstract: 1.24.0 es-abstract: 1.24.0
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
is-array-buffer: 3.0.5 is-array-buffer: 3.0.5
ast-types@0.13.4: ast-types@0.13.4:
@ -2823,8 +2819,6 @@ snapshots:
async-function@1.0.0: {} async-function@1.0.0: {}
async-generator-function@1.0.0: {}
asynckit@0.4.0: {} asynckit@0.4.0: {}
at-least-node@1.0.0: {} at-least-node@1.0.0: {}
@ -2914,13 +2908,13 @@ snapshots:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1 es-define-property: 1.0.1
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
set-function-length: 1.2.2 set-function-length: 1.2.2
call-bound@1.0.4: call-bound@1.0.4:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
call-matcher@1.1.0: call-matcher@1.1.0:
dependencies: dependencies:
@ -3235,7 +3229,7 @@ snapshots:
es-set-tostringtag: 2.1.0 es-set-tostringtag: 2.1.0
es-to-primitive: 1.3.0 es-to-primitive: 1.3.0
function.prototype.name: 1.1.8 function.prototype.name: 1.1.8
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
get-proto: 1.0.1 get-proto: 1.0.1
get-symbol-description: 1.1.0 get-symbol-description: 1.1.0
globalthis: 1.0.4 globalthis: 1.0.4
@ -3287,7 +3281,7 @@ snapshots:
es-set-tostringtag@2.1.0: es-set-tostringtag@2.1.0:
dependencies: dependencies:
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
has-tostringtag: 1.0.2 has-tostringtag: 1.0.2
hasown: 2.0.2 hasown: 2.0.2
@ -3721,20 +3715,17 @@ snapshots:
functions-have-names@1.2.3: {} functions-have-names@1.2.3: {}
generator-function@2.0.0: {} generator-function@2.0.1: {}
get-caller-file@2.0.5: {} get-caller-file@2.0.5: {}
get-intrinsic@1.3.1: get-intrinsic@1.3.0:
dependencies: dependencies:
async-function: 1.0.0
async-generator-function: 1.0.0
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1 es-define-property: 1.0.1
es-errors: 1.3.0 es-errors: 1.3.0
es-object-atoms: 1.1.1 es-object-atoms: 1.1.1
function-bind: 1.1.2 function-bind: 1.1.2
generator-function: 2.0.0
get-proto: 1.0.1 get-proto: 1.0.1
gopd: 1.2.0 gopd: 1.2.0
has-symbols: 1.1.0 has-symbols: 1.1.0
@ -3752,7 +3743,7 @@ snapshots:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
get-uri@6.0.5: get-uri@6.0.5:
dependencies: dependencies:
@ -3936,7 +3927,7 @@ snapshots:
dependencies: dependencies:
call-bind: 1.0.8 call-bind: 1.0.8
call-bound: 1.0.4 call-bound: 1.0.4
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
is-async-function@2.1.1: is-async-function@2.1.1:
dependencies: dependencies:
@ -3974,7 +3965,7 @@ snapshots:
is-data-view@1.0.2: is-data-view@1.0.2:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
is-typed-array: 1.1.15 is-typed-array: 1.1.15
is-date-object@1.1.0: is-date-object@1.1.0:
@ -3992,9 +3983,10 @@ snapshots:
is-fullwidth-code-point@4.0.0: {} is-fullwidth-code-point@4.0.0: {}
is-generator-function@1.1.0: is-generator-function@1.1.2:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
generator-function: 2.0.1
get-proto: 1.0.1 get-proto: 1.0.1
has-tostringtag: 1.0.2 has-tostringtag: 1.0.2
safe-regex-test: 1.1.0 safe-regex-test: 1.1.0
@ -4059,7 +4051,7 @@ snapshots:
is-weakset@2.0.4: is-weakset@2.0.4:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
isarray@1.0.0: {} isarray@1.0.0: {}
@ -4348,7 +4340,7 @@ snapshots:
own-keys@1.0.1: own-keys@1.0.1:
dependencies: dependencies:
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
object-keys: 1.1.1 object-keys: 1.1.1
safe-push-apply: 1.0.0 safe-push-apply: 1.0.0
@ -4673,7 +4665,7 @@ snapshots:
es-abstract: 1.24.0 es-abstract: 1.24.0
es-errors: 1.3.0 es-errors: 1.3.0
es-object-atoms: 1.1.1 es-object-atoms: 1.1.1
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
get-proto: 1.0.1 get-proto: 1.0.1
which-builtin-type: 1.2.1 which-builtin-type: 1.2.1
@ -4725,7 +4717,7 @@ snapshots:
dependencies: dependencies:
call-bind: 1.0.8 call-bind: 1.0.8
call-bound: 1.0.4 call-bound: 1.0.4
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
has-symbols: 1.1.0 has-symbols: 1.1.0
isarray: 2.0.5 isarray: 2.0.5
@ -4792,7 +4784,7 @@ snapshots:
define-data-property: 1.1.4 define-data-property: 1.1.4
es-errors: 1.3.0 es-errors: 1.3.0
function-bind: 1.1.2 function-bind: 1.1.2
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
gopd: 1.2.0 gopd: 1.2.0
has-property-descriptors: 1.0.2 has-property-descriptors: 1.0.2
@ -4826,14 +4818,14 @@ snapshots:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
object-inspect: 1.13.4 object-inspect: 1.13.4
side-channel-weakmap@1.0.2: side-channel-weakmap@1.0.2:
dependencies: dependencies:
call-bound: 1.0.4 call-bound: 1.0.4
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.3.1 get-intrinsic: 1.3.0
object-inspect: 1.13.4 object-inspect: 1.13.4
side-channel-map: 1.0.1 side-channel-map: 1.0.1
@ -5190,7 +5182,7 @@ snapshots:
is-async-function: 2.1.1 is-async-function: 2.1.1
is-date-object: 1.1.0 is-date-object: 1.1.0
is-finalizationregistry: 1.1.1 is-finalizationregistry: 1.1.1
is-generator-function: 1.1.0 is-generator-function: 1.1.2
is-regex: 1.2.1 is-regex: 1.2.1
is-weakref: 1.1.1 is-weakref: 1.1.1
isarray: 2.0.5 isarray: 2.0.5

View File

@ -248,9 +248,9 @@ $ sudo docker run -d -p 3000:3000 netease-music-api
!> ~~因网易增加了网易云盾验证,密码登录暂时不要使用,尽量使用短信验证码登录和二维码登录,否则调用某些接口会触发需要验证的错误~~ !> ~~因网易增加了网易云盾验证,密码登录暂时不要使用,尽量使用短信验证码登录和二维码登录,否则调用某些接口会触发需要验证的错误~~
!> ~~二开作者注: 现在网易云云盾验证再次升级, 导致现在短信验证码也没法用了~~ !> ~~二开作者再注: 现在二维码登录也无法使用了, 网易云官方最近查的太严了, 现在尝试调用会提示环境异常, 如果各位有绕过的方法请一定开`Pull Request`~~
!> 二开作者再注: 现在二维码登录也无法使用了, 网易云官方最近查的太严了, 现在尝试调用会提示环境异常, 如果各位有绕过的方法请一定开`Pull Request` !> 二开作者注: 二维码登录现在是修复了, 但是密码登录和短信登录还是不行, 如果各位有绕过的方法请一定开`Pull Request`
#### 1. 手机登录 #### 1. 手机登录
@ -1364,7 +1364,7 @@ tags: 歌单标签
说明 : 调用此接口 , 传入类型和歌单 id 可收藏歌单或者取消收藏歌单 说明 : 调用此接口 , 传入类型和歌单 id 可收藏歌单或者取消收藏歌单
!> 警告: 在`v4.25.0`版本后, 在网易云登陆后请求不要带上`cookie`字段, 会导致请求不合法 !> 警告: 在`v4.29.7`版本后, 在网易云登陆后请求要带上`timestamp`字段, 否则会导致请求不合法
**必选参数 :** **必选参数 :**
@ -1395,7 +1395,7 @@ tags: 歌单标签
说明 : 调用此接口 , 可以添加歌曲到歌单或者从歌单删除某首歌曲 ( 需要登录 ) 说明 : 调用此接口 , 可以添加歌曲到歌单或者从歌单删除某首歌曲 ( 需要登录 )
!> 警告: 在`v4.25.0`版本后, 在网易云登陆后请求不要带上`cookie`字段, 会导致请求不合法 !> 警告: 在`v4.29.7`版本后, 在网易云登陆后请求要带上`timestamp`字段, 否则会导致请求不合法
**必选参数 :** **必选参数 :**

View File

@ -235,9 +235,9 @@
</a> </a>
</li> </li>
<li class="feature-item"> <li class="feature-item">
<a href="./song/url/unblock?id=1969519579"> <a href="./unblock_test.html">
<i class="mdi mdi-lock-open"></i> <i class="mdi mdi-lock-open"></i>
歌曲解灰 解灰测试
</a> </a>
</li> </li>
<li class="feature-item"> <li class="feature-item">

123
public/unblock_test.html Normal file
View File

@ -0,0 +1,123 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>音乐解灰测试</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 20px auto;
padding: 0 20px;
}
.container {
background-color: #f5f5f5;
padding: 20px;
border-radius: 8px;
}
.form-group {
margin-bottom: 15px;
}
.source-options {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 15px;
}
.source-option {
display: flex;
align-items: center;
gap: 5px;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
#result {
margin-top: 20px;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
white-space: pre-wrap;
}
</style>
</head>
<body>
<div class="container">
<h1>音乐解灰测试</h1>
<div class="form-group">
<label for="songId">音乐 ID</label>
<input type="number" id="songId" placeholder="请输入音乐ID" required>
</div>
<div class="form-group">
<p>选择音源:</p>
<div class="source-options">
<div class="source-option">
<input type="checkbox" id="pyncmd" value="pyncmd">
<label for="pyncmd">pyncmd</label>
</div>
<div class="source-option">
<input type="checkbox" id="kuwo" value="kuwo">
<label for="kuwo">kuwo</label>
</div>
<div class="source-option">
<input type="checkbox" id="bodian" value="bodian">
<label for="bodian">bodian</label>
</div>
<div class="source-option">
<input type="checkbox" id="qq" value="qq">
<label for="qq">qq</label>
</div>
<div class="source-option">
<input type="checkbox" id="kugou" value="kugou">
<label for="kugou">kugou</label>
</div>
<div class="source-option">
<input type="checkbox" id="migu" value="migu">
<label for="migu">migu</label>
</div>
</div>
</div>
<button onclick="testSong()">开始测试</button>
<div id="result"></div>
</div>
<script>
async function testSong() {
const songId = document.getElementById('songId').value;
if (!songId) {
alert('请输入音乐ID');
return;
}
const sources = ['pyncmd', 'kuwo', 'bodian', 'qq', 'kugou', 'migu']
.filter(source => document.getElementById(source).checked)
.join(',');
if (!sources) {
alert('请至少选择一个音源');
return;
}
const resultDiv = document.getElementById('result');
resultDiv.textContent = '正在请求...';
try {
const response = await fetch(`/song/url/match?id=${songId}&source=${sources}`);
const data = await response.json();
resultDiv.textContent = JSON.stringify(data, null, 2);
} catch (error) {
resultDiv.textContent = `请求失败: ${error.message}`;
}
}
</script>
</body>
</html>