docs(playlistSubscribe): 更新该内容文档

This commit is contained in:
ImFurina 2025-10-01 21:53:05 +08:00
parent 6a1b7d987c
commit ed3959f545
5 changed files with 156 additions and 41 deletions

View File

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

60
pnpm-lock.yaml generated
View File

@ -394,10 +394,6 @@ packages:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
async-generator-function@1.0.0:
resolution: {integrity: sha512-+NAXNqgCrB95ya4Sr66i1CL2hqLVckAk7xwRYWdcm39/ELQ6YNn1aw5r0bdQtqNZgQpEWzc5yc/igXc7aL5SLA==}
engines: {node: '>= 0.4'}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@ -1122,16 +1118,16 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
generator-function@2.0.0:
resolution: {integrity: sha512-xPypGGincdfyl/AiSGa7GjXLkvld9V7GjZlowup9SHIJnQnHLFiLODCd/DqKOp0PBagbHJ68r1KJI9Mut7m4sA==}
generator-function@2.0.1:
resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
engines: {node: '>= 0.4'}
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
get-intrinsic@1.3.1:
resolution: {integrity: sha512-fk1ZVEeOX9hVZ6QzoBNEC55+Ucqg4sTVwrVuigZhuRPESVFpMyXnd3sbXvPOwp7Y9riVyANiqhEuRF0G1aVSeQ==}
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
@ -1372,8 +1368,8 @@ packages:
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
engines: {node: '>=12'}
is-generator-function@1.1.0:
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
is-generator-function@1.1.2:
resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'}
is-glob@4.0.3:
@ -2807,7 +2803,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.24.0
es-errors: 1.3.0
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
ast-types@0.13.4:
@ -2818,8 +2814,6 @@ snapshots:
async-function@1.0.0: {}
async-generator-function@1.0.0: {}
asynckit@0.4.0: {}
at-least-node@1.0.0: {}
@ -2909,13 +2903,13 @@ snapshots:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
set-function-length: 1.2.2
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
call-matcher@1.1.0:
dependencies:
@ -3230,7 +3224,7 @@ snapshots:
es-set-tostringtag: 2.1.0
es-to-primitive: 1.3.0
function.prototype.name: 1.1.8
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
get-proto: 1.0.1
get-symbol-description: 1.1.0
globalthis: 1.0.4
@ -3282,7 +3276,7 @@ snapshots:
es-set-tostringtag@2.1.0:
dependencies:
es-errors: 1.3.0
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
hasown: 2.0.2
@ -3716,20 +3710,17 @@ snapshots:
functions-have-names@1.2.3: {}
generator-function@2.0.0: {}
generator-function@2.0.1: {}
get-caller-file@2.0.5: {}
get-intrinsic@1.3.1:
get-intrinsic@1.3.0:
dependencies:
async-function: 1.0.0
async-generator-function: 1.0.0
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
function-bind: 1.1.2
generator-function: 2.0.0
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
@ -3747,7 +3738,7 @@ snapshots:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
get-uri@6.0.5:
dependencies:
@ -3931,7 +3922,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.4
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
is-async-function@2.1.1:
dependencies:
@ -3969,7 +3960,7 @@ snapshots:
is-data-view@1.0.2:
dependencies:
call-bound: 1.0.4
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
is-typed-array: 1.1.15
is-date-object@1.1.0:
@ -3987,9 +3978,10 @@ snapshots:
is-fullwidth-code-point@4.0.0: {}
is-generator-function@1.1.0:
is-generator-function@1.1.2:
dependencies:
call-bound: 1.0.4
generator-function: 2.0.1
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
@ -4054,7 +4046,7 @@ snapshots:
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.4
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
isarray@1.0.0: {}
@ -4343,7 +4335,7 @@ snapshots:
own-keys@1.0.1:
dependencies:
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
object-keys: 1.1.1
safe-push-apply: 1.0.0
@ -4668,7 +4660,7 @@ snapshots:
es-abstract: 1.24.0
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
get-proto: 1.0.1
which-builtin-type: 1.2.1
@ -4720,7 +4712,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.4
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
has-symbols: 1.1.0
isarray: 2.0.5
@ -4787,7 +4779,7 @@ snapshots:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
gopd: 1.2.0
has-property-descriptors: 1.0.2
@ -4821,14 +4813,14 @@ snapshots:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.1
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-map: 1.0.1
@ -5183,7 +5175,7 @@ snapshots:
is-async-function: 2.1.1
is-date-object: 1.1.0
is-finalizationregistry: 1.1.1
is-generator-function: 1.1.0
is-generator-function: 1.1.2
is-regex: 1.2.1
is-weakref: 1.1.1
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. 手机登录
@ -1364,7 +1364,7 @@ tags: 歌单标签
说明 : 调用此接口 , 传入类型和歌单 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>
</li>
<li class="feature-item">
<a href="./song/url/unblock?id=1969519579">
<a href="./unblock_test.html">
<i class="mdi mdi-lock-open"></i>
歌曲解灰
解灰测试
</a>
</li>
<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>