@sansenjian/qq-music-api 2.2.10 → 2.3.1
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.
- package/CHANGELOG.md +19 -1
- package/README.md +10 -11
- package/dist/app.js +0 -1
- package/dist/koaApp.js +5 -1
- package/dist/module/apis/downloadQQMusic.js +2 -1
- package/dist/module/apis/music/getMusicPlay.js +3 -2
- package/dist/package.json +20 -16
- package/dist/routers/context/getNewDisks.js +4 -0
- package/dist/routers/context/getRecommend.js +4 -0
- package/dist/routers/context/getTicketInfo.js +4 -0
- package/dist/util/cookieResolver.js +10 -4
- package/docs-dist/404.html +6 -6
- package/docs-dist/CHANGELOG-ARCHITECTURE.html +14 -14
- package/docs-dist/COOKIE_CONFIG_GUIDE.html +13 -13
- package/docs-dist/DEGRADE_EXAMPLES.html +109 -0
- package/docs-dist/FALLBACK_MODE_GUIDE.html +21 -21
- package/docs-dist/QUICK_START.html +62 -0
- package/docs-dist/README.html +17 -17
- package/docs-dist/TEST_USER_PLAYLISTS.html +14 -14
- package/docs-dist/USER_AVATAR_GUIDE.html +16 -16
- package/docs-dist/api/comments.html +12 -12
- package/docs-dist/api/index.html +10 -10
- package/docs-dist/api/music.html +15 -13
- package/docs-dist/api/other.html +13 -13
- package/docs-dist/api/playground.html +27 -0
- package/docs-dist/api/playlist.html +15 -15
- package/docs-dist/api/rank.html +12 -12
- package/docs-dist/api/search.html +13 -13
- package/docs-dist/api/singer.html +12 -12
- package/docs-dist/api/user.html +16 -16
- package/docs-dist/assets/{CHANGELOG-ARCHITECTURE.md.DV9Xr7ve.js → CHANGELOG-ARCHITECTURE.md.CYHmaBdY.js} +5 -5
- package/docs-dist/assets/CHANGELOG-ARCHITECTURE.md.CYHmaBdY.lean.js +1 -0
- package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.Nvywo7CW.js +13 -0
- package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.Nvywo7CW.lean.js +1 -0
- package/docs-dist/assets/DEGRADE_EXAMPLES.md.Cz2J-qwE.js +83 -0
- package/docs-dist/assets/DEGRADE_EXAMPLES.md.Cz2J-qwE.lean.js +1 -0
- package/docs-dist/assets/{FALLBACK_MODE_GUIDE.md.0wqXqYxw.js → FALLBACK_MODE_GUIDE.md.wKA9yqoI.js} +12 -12
- package/docs-dist/assets/FALLBACK_MODE_GUIDE.md.wKA9yqoI.lean.js +1 -0
- package/docs-dist/assets/QUICK_START.md.D5KfDgbs.js +36 -0
- package/docs-dist/assets/QUICK_START.md.D5KfDgbs.lean.js +1 -0
- package/docs-dist/assets/README.md.CHbArqA7.js +421 -0
- package/docs-dist/assets/README.md.CHbArqA7.lean.js +1 -0
- package/docs-dist/assets/TEST_USER_PLAYLISTS.md.BfBxYbaM.js +16 -0
- package/docs-dist/assets/TEST_USER_PLAYLISTS.md.BfBxYbaM.lean.js +1 -0
- package/docs-dist/assets/{USER_AVATAR_GUIDE.md.CGPI9GUj.js → USER_AVATAR_GUIDE.md.D5Rti1Gg.js} +7 -7
- package/docs-dist/assets/USER_AVATAR_GUIDE.md.D5Rti1Gg.lean.js +1 -0
- package/docs-dist/assets/{api_comments.md.CATvWhrg.js → api_comments.md.5nDhrWa8.js} +3 -3
- package/docs-dist/assets/api_comments.md.5nDhrWa8.lean.js +1 -0
- package/docs-dist/assets/api_index.md.DdG1WHkZ.js +1 -0
- package/docs-dist/assets/api_index.md.DdG1WHkZ.lean.js +1 -0
- package/docs-dist/assets/{api_music.md.D20_neZB.js → api_music.md.D66hq-_4.js} +6 -4
- package/docs-dist/assets/api_music.md.D66hq-_4.lean.js +1 -0
- package/docs-dist/assets/api_other.md.9KhspVEM.js +7 -0
- package/docs-dist/assets/api_other.md.9KhspVEM.lean.js +1 -0
- package/docs-dist/assets/api_playground.md.BZBvYMm2.js +11 -0
- package/docs-dist/assets/api_playground.md.BZBvYMm2.lean.js +11 -0
- package/docs-dist/assets/{api_playlist.md.CyLdLRR9.js → api_playlist.md.BQK32ZyE.js} +6 -6
- package/docs-dist/assets/api_playlist.md.BQK32ZyE.lean.js +1 -0
- package/docs-dist/assets/{api_rank.md.Z3xyYG_S.js → api_rank.md.z7YBwVgw.js} +3 -3
- package/docs-dist/assets/api_rank.md.z7YBwVgw.lean.js +1 -0
- package/docs-dist/assets/{api_search.md.D_lbFmYo.js → api_search.md.GfzIBRfc.js} +4 -4
- package/docs-dist/assets/api_search.md.GfzIBRfc.lean.js +1 -0
- package/docs-dist/assets/api_singer.md.BDR-_qDH.js +21 -0
- package/docs-dist/assets/api_singer.md.BDR-_qDH.lean.js +1 -0
- package/docs-dist/assets/{api_user.md.4WdmTXIB.js → api_user.md.Dx8BWGrb.js} +7 -7
- package/docs-dist/assets/api_user.md.Dx8BWGrb.lean.js +1 -0
- package/docs-dist/assets/app.CxuIZ1W7.js +1 -0
- package/docs-dist/assets/chunks/@localSearchIndexroot.ygoKgu27.js +1 -0
- package/docs-dist/assets/chunks/VPLocalSearchBox.BqgkAhNM.js +3 -0
- package/docs-dist/assets/chunks/framework.BUY3a635.js +4 -0
- package/docs-dist/assets/chunks/theme.C-Z3DN0r.js +2 -0
- package/docs-dist/assets/{guide_architecture.md.D_46khUI.js → guide_architecture.md.SHnKkzwb.js} +20 -20
- package/docs-dist/assets/guide_architecture.md.SHnKkzwb.lean.js +1 -0
- package/docs-dist/assets/guide_authentication.md.CZCKocgR.js +4 -0
- package/docs-dist/assets/guide_authentication.md.CZCKocgR.lean.js +1 -0
- package/docs-dist/assets/guide_index.md.CkJ-jjL0.js +1 -0
- package/docs-dist/assets/guide_index.md.CkJ-jjL0.lean.js +1 -0
- package/docs-dist/assets/guide_installation.md.D2TBzILh.js +7 -0
- package/docs-dist/assets/guide_installation.md.D2TBzILh.lean.js +1 -0
- package/docs-dist/assets/guide_quickstart.md.J7Sib8wg.js +13 -0
- package/docs-dist/assets/guide_quickstart.md.J7Sib8wg.lean.js +1 -0
- package/docs-dist/assets/index.md.ClwYf6Qc.js +1 -0
- package/docs-dist/assets/index.md.ClwYf6Qc.lean.js +1 -0
- package/docs-dist/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2 +0 -0
- package/docs-dist/assets/inter-italic-cyrillic.D7dRslh9.woff2 +0 -0
- package/docs-dist/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2 +0 -0
- package/docs-dist/assets/inter-italic-greek.DNcpQ8QC.woff2 +0 -0
- package/docs-dist/assets/inter-italic-latin-ext.DytegdRQ.woff2 +0 -0
- package/docs-dist/assets/inter-italic-latin.COaG5lWR.woff2 +0 -0
- package/docs-dist/assets/inter-italic-vietnamese.BI5UxJD-.woff2 +0 -0
- package/docs-dist/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2 +0 -0
- package/docs-dist/assets/inter-roman-cyrillic.CD0kT8R4.woff2 +0 -0
- package/docs-dist/assets/inter-roman-greek-ext.CFAEQ5Ow.woff2 +0 -0
- package/docs-dist/assets/inter-roman-greek.Dsf7YjP7.woff2 +0 -0
- package/docs-dist/assets/inter-roman-latin-ext.Dl_ayf4-.woff2 +0 -0
- package/docs-dist/assets/inter-roman-latin.Cy4MYw_J.woff2 +0 -0
- package/docs-dist/assets/inter-roman-vietnamese.CpqCnS2H.woff2 +0 -0
- package/docs-dist/assets/reference_response-format.md.BrGoGoPV.js +12 -0
- package/docs-dist/assets/reference_response-format.md.BrGoGoPV.lean.js +1 -0
- package/docs-dist/assets/style.D_YoXH3a.css +1 -0
- package/docs-dist/guide/architecture.html +29 -29
- package/docs-dist/guide/authentication.html +12 -12
- package/docs-dist/guide/index.html +10 -10
- package/docs-dist/guide/installation.html +13 -13
- package/docs-dist/guide/quickstart.html +15 -15
- package/docs-dist/hashmap.json +1 -1
- package/docs-dist/index.html +10 -10
- package/docs-dist/reference/response-format.html +13 -13
- package/docs-dist/version.json +3 -3
- package/package.json +20 -16
- package/public/index.html +966 -0
- package/public/playground-utils.js +150 -0
- package/dist/jest.config.js +0 -52
- package/dist/scripts/run-tests-with-flags.js +0 -139
- package/dist/types/api.js +0 -55
- package/docs-dist/assets/CHANGELOG-ARCHITECTURE.md.DV9Xr7ve.lean.js +0 -1
- package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.B2-aTdcH.js +0 -13
- package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.B2-aTdcH.lean.js +0 -1
- package/docs-dist/assets/FALLBACK_MODE_GUIDE.md.0wqXqYxw.lean.js +0 -1
- package/docs-dist/assets/README.md.DFCMeLFa.js +0 -421
- package/docs-dist/assets/README.md.DFCMeLFa.lean.js +0 -1
- package/docs-dist/assets/TEST_USER_PLAYLISTS.md.Bj0AVpHw.js +0 -16
- package/docs-dist/assets/TEST_USER_PLAYLISTS.md.Bj0AVpHw.lean.js +0 -1
- package/docs-dist/assets/USER_AVATAR_GUIDE.md.CGPI9GUj.lean.js +0 -1
- package/docs-dist/assets/api_comments.md.CATvWhrg.lean.js +0 -1
- package/docs-dist/assets/api_index.md.Dqx3qXyO.js +0 -1
- package/docs-dist/assets/api_index.md.Dqx3qXyO.lean.js +0 -1
- package/docs-dist/assets/api_music.md.D20_neZB.lean.js +0 -1
- package/docs-dist/assets/api_other.md.CXyEsl8R.js +0 -7
- package/docs-dist/assets/api_other.md.CXyEsl8R.lean.js +0 -1
- package/docs-dist/assets/api_playlist.md.CyLdLRR9.lean.js +0 -1
- package/docs-dist/assets/api_rank.md.Z3xyYG_S.lean.js +0 -1
- package/docs-dist/assets/api_search.md.D_lbFmYo.lean.js +0 -1
- package/docs-dist/assets/api_singer.md.BbyYE88D.js +0 -21
- package/docs-dist/assets/api_singer.md.BbyYE88D.lean.js +0 -1
- package/docs-dist/assets/api_user.md.4WdmTXIB.lean.js +0 -1
- package/docs-dist/assets/app.2f7gcITE.js +0 -1
- package/docs-dist/assets/chunks/@localSearchIndexroot.D461xa5C.js +0 -1
- package/docs-dist/assets/chunks/VPLocalSearchBox.BiPSl83v.js +0 -9
- package/docs-dist/assets/chunks/framework.aJbMEiY9.js +0 -19
- package/docs-dist/assets/chunks/theme.BrMPT0hE.js +0 -2
- package/docs-dist/assets/guide_architecture.md.D_46khUI.lean.js +0 -1
- package/docs-dist/assets/guide_authentication.md.nCiAu07w.js +0 -4
- package/docs-dist/assets/guide_authentication.md.nCiAu07w.lean.js +0 -1
- package/docs-dist/assets/guide_index.md.gLozHqz5.js +0 -1
- package/docs-dist/assets/guide_index.md.gLozHqz5.lean.js +0 -1
- package/docs-dist/assets/guide_installation.md.BUDl8zk1.js +0 -7
- package/docs-dist/assets/guide_installation.md.BUDl8zk1.lean.js +0 -1
- package/docs-dist/assets/guide_quickstart.md.COQUzUN9.js +0 -13
- package/docs-dist/assets/guide_quickstart.md.COQUzUN9.lean.js +0 -1
- package/docs-dist/assets/index.md.DBZfQ2kF.js +0 -1
- package/docs-dist/assets/index.md.DBZfQ2kF.lean.js +0 -1
- package/docs-dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/docs-dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/docs-dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/docs-dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/docs-dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/docs-dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/docs-dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/docs-dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/docs-dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/docs-dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/docs-dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/docs-dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/docs-dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/docs-dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/docs-dist/assets/reference_response-format.md.yrdeqFUN.js +0 -12
- package/docs-dist/assets/reference_response-format.md.yrdeqFUN.lean.js +0 -1
- package/docs-dist/assets/style.DM4qKDd4.css +0 -1
package/docs-dist/assets/{USER_AVATAR_GUIDE.md.CGPI9GUj.js → USER_AVATAR_GUIDE.md.D5Rti1Gg.js}
RENAMED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as i,S as a,j as h,m as k}from"./chunks/framework.BUY3a635.js";const y=JSON.parse('{"title":"获取 QQ 头像接口使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"USER_AVATAR_GUIDE.md","filePath":"USER_AVATAR_GUIDE.md","lastUpdated":1779031768000}'),n={name:"USER_AVATAR_GUIDE.md"};function l(t,s,p,e,r,d){return a(),h("div",null,[...s[0]||(s[0]=[k(`<h1 id="获取-qq-头像接口使用指南" tabindex="-1">获取 QQ 头像接口使用指南 <a class="header-anchor" href="#获取-qq-头像接口使用指南" aria-label="Permalink to “获取 QQ 头像接口使用指南”"></a></h1><h2 id="接口说明" tabindex="-1">接口说明 <a class="header-anchor" href="#接口说明" aria-label="Permalink to “接口说明”"></a></h2><p><strong>接口地址</strong>: <code>GET /user/getUserAvatar</code></p><p><strong>功能</strong>: 获取 QQ 用户头像 URL</p><p><strong>参数</strong>:</p><ul><li><code>uin</code> (可选): QQ 号码</li><li><code>k</code> (可选): QQ 头像标识 key(从某些 QQ 音乐接口获取)</li><li><code>size</code> (可选): 头像尺寸,默认 140,支持 40/100/140/640 等</li></ul><h2 id="使用方式" tabindex="-1">使用方式 <a class="header-anchor" href="#使用方式" aria-label="Permalink to “使用方式”"></a></h2><h3 id="方式-1-使用-qq-号获取头像" tabindex="-1">方式 1: 使用 QQ 号获取头像 <a class="header-anchor" href="#方式-1-使用-qq-号获取头像" aria-label="Permalink to “方式 1: 使用 QQ 号获取头像”"></a></h3><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span>http://localhost:3200/user/getUserAvatar?uin=123456789&size=140</span></span></code></pre></div><p><strong>响应示例</strong>:</p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
|
|
2
2
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 200</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
3
3
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
4
4
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">avatarUrl</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">https://q.qlogo.cn/headimg_dl?dst_uin=123456789&spec=140</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
5
5
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">message</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">获取头像成功</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span>
|
|
6
6
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
7
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h3 id="方式-2-使用-k-参数获取头像" tabindex="-1">方式 2: 使用 k 参数获取头像 <a class="header-anchor" href="#方式-2-使用-k-参数获取头像" aria-label="Permalink to
|
|
7
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h3 id="方式-2-使用-k-参数获取头像" tabindex="-1">方式 2: 使用 k 参数获取头像 <a class="header-anchor" href="#方式-2-使用-k-参数获取头像" aria-label="Permalink to “方式 2: 使用 k 参数获取头像”"></a></h3><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span>http://localhost:3200/user/getUserAvatar?k=wc834J3KJbQjOgFONleqAg&size=140</span></span></code></pre></div><p><strong>响应示例</strong>:</p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
|
|
8
8
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 200</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
9
9
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
10
10
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">avatarUrl</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">https://thirdqq.qlogo.cn/g?b=sdk&k=wc834J3KJbQjOgFONleqAg&s=140</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
11
11
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">message</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">获取头像成功</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span>
|
|
12
12
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
13
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="头像尺寸说明" tabindex="-1">头像尺寸说明 <a class="header-anchor" href="#头像尺寸说明" aria-label="Permalink to
|
|
13
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="头像尺寸说明" tabindex="-1">头像尺寸说明 <a class="header-anchor" href="#头像尺寸说明" aria-label="Permalink to “头像尺寸说明”"></a></h2><ul><li><code>40</code>: 40x40 像素(小头像)</li><li><code>100</code>: 100x100 像素</li><li><code>140</code>: 140x140 像素(默认)</li><li><code>640</code>: 640x640 像素(高清头像)</li></ul><h2 id="使用场景" tabindex="-1">使用场景 <a class="header-anchor" href="#使用场景" aria-label="Permalink to “使用场景”"></a></h2><h3 id="_1-直接在网页中使用" tabindex="-1">1. 直接在网页中使用 <a class="header-anchor" href="#_1-直接在网页中使用" aria-label="Permalink to “1. 直接在网页中使用”"></a></h3><p>获取到 <code>avatarUrl</code> 后,可以直接在 <code><img></code> 标签中使用:</p><div class="language-html"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"><</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">img</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> src</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">https://q.qlogo.cn/headimg_dl?dst_uin=123456789&spec=140</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> alt</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">用户头像</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> /></span></span></code></pre></div><h3 id="_2-结合用户歌单接口使用" tabindex="-1">2. 结合用户歌单接口使用 <a class="header-anchor" href="#_2-结合用户歌单接口使用" aria-label="Permalink to “2. 结合用户歌单接口使用”"></a></h3><p>先获取用户歌单信息,然后使用返回的 uin 获取头像:</p><div class="language-javascript"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 获取用户歌单</span></span>
|
|
14
14
|
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> playlists</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> fetch</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
|
|
15
15
|
<span class="line"></span>
|
|
16
16
|
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 获取用户头像</span></span>
|
|
17
|
-
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> avatar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> fetch</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">/user/getUserAvatar?uin=123456789&size=140</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span></code></pre></div><h3 id="_3-从-qq-音乐页面获取-k-参数" tabindex="-1">3. 从 QQ 音乐页面获取 k 参数 <a class="header-anchor" href="#_3-从-qq-音乐页面获取-k-参数" aria-label="Permalink to
|
|
17
|
+
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> avatar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> fetch</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">/user/getUserAvatar?uin=123456789&size=140</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span></code></pre></div><h3 id="_3-从-qq-音乐页面获取-k-参数" tabindex="-1">3. 从 QQ 音乐页面获取 k 参数 <a class="header-anchor" href="#_3-从-qq-音乐页面获取-k-参数" aria-label="Permalink to “3. 从 QQ 音乐页面获取 k 参数”"></a></h3><ol><li>访问 <a href="https://y.qq.com" target="_blank" rel="noreferrer">https://y.qq.com</a></li><li>打开开发者工具 (F12)</li><li>查看网络请求中的头像请求</li><li>复制 URL 中的 <code>k</code> 参数值</li></ol><h2 id="注意事项" tabindex="-1">注意事项 <a class="header-anchor" href="#注意事项" aria-label="Permalink to “注意事项”"></a></h2><ol><li><p><strong>头像来源</strong>:</p><ul><li>使用 <code>uin</code> 参数会从 <code>q.qlogo.cn</code> 获取头像</li><li>使用 <code>k</code> 参数会从 <code>thirdqq.qlogo.cn</code> 获取头像</li></ul></li><li><p><strong>缓存</strong>: 头像 URL 带有时间戳参数,浏览器会缓存较长时间</p></li><li><p><strong>跨域</strong>: 头像接口支持跨域访问,可以直接在前端使用</p></li><li><p><strong>参数优先级</strong>: 如果同时提供 <code>k</code> 和 <code>uin</code>,优先使用 <code>k</code> 参数</p></li></ol><h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to “常见问题”"></a></h2><h3 id="q-返回的头像无法显示" tabindex="-1">Q: 返回的头像无法显示? <a class="header-anchor" href="#q-返回的头像无法显示" aria-label="Permalink to “Q: 返回的头像无法显示?”"></a></h3><p><strong>A</strong>: 检查以下几点:</p><ol><li>确认 uin 或 k 参数正确</li><li>确认网络连接正常</li><li>尝试更换尺寸参数</li></ol><h3 id="q-如何获取高清头像" tabindex="-1">Q: 如何获取高清头像? <a class="header-anchor" href="#q-如何获取高清头像" aria-label="Permalink to “Q: 如何获取高清头像?”"></a></h3><p><strong>A</strong>: 将 <code>size</code> 参数设置为 <code>640</code> 即可获取高清头像</p><h3 id="q-k-参数从哪里获取" tabindex="-1">Q: k 参数从哪里获取? <a class="header-anchor" href="#q-k-参数从哪里获取" aria-label="Permalink to “Q: k 参数从哪里获取?”"></a></h3><p><strong>A</strong>:</p><ul><li>从 QQ 音乐页面的头像请求 URL 中获取</li><li>从某些 QQ 音乐用户信息接口返回的数据中获取</li></ul><h2 id="示例代码" tabindex="-1">示例代码 <a class="header-anchor" href="#示例代码" aria-label="Permalink to “示例代码”"></a></h2><h3 id="javascript-node-js" tabindex="-1">JavaScript/Node.js <a class="header-anchor" href="#javascript-node-js" aria-label="Permalink to “JavaScript/Node.js”"></a></h3><div class="language-javascript"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 获取头像 URL</span></span>
|
|
18
18
|
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> getUserAvatar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">uin</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> size</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 140</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
19
19
|
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> fetch</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">\`</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserAvatar?uin=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">\${</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">&size=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">\${</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">size</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">\`</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
|
|
20
20
|
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> data</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">json</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">();</span></span>
|
|
@@ -28,7 +28,7 @@ import{_ as i,o as a,c as h,ag as n}from"./chunks/framework.aJbMEiY9.js";const y
|
|
|
28
28
|
<span class="line"></span>
|
|
29
29
|
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 使用示例</span></span>
|
|
30
30
|
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> avatarUrl</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> await</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> getUserAvatar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 140</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
|
|
31
|
-
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">console</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">头像 URL:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> avatarUrl</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span></code></pre></div><h3 id="python" tabindex="-1">Python <a class="header-anchor" href="#python" aria-label="Permalink to
|
|
31
|
+
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">console</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">头像 URL:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> avatarUrl</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span></code></pre></div><h3 id="python" tabindex="-1">Python <a class="header-anchor" href="#python" aria-label="Permalink to “Python”"></a></h3><div class="language-python"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> requests</span></span>
|
|
32
32
|
<span class="line"></span>
|
|
33
33
|
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> get_user_avatar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">uin</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> size</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">=</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">140</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">):</span></span>
|
|
34
34
|
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> url </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> f</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">'http://localhost:3200/user/getUserAvatar?uin=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">uin</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">&size=</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">size</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">'</span></span>
|
|
@@ -42,7 +42,7 @@ import{_ as i,o as a,c as h,ag as n}from"./chunks/framework.aJbMEiY9.js";const y
|
|
|
42
42
|
<span class="line"></span>
|
|
43
43
|
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 使用示例</span></span>
|
|
44
44
|
<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">avatar_url </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> get_user_avatar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 140</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span>
|
|
45
|
-
<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">print</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">f</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">'头像 URL: </span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">avatar_url</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span></code></pre></div><h3 id="html" tabindex="-1">HTML <a class="header-anchor" href="#html" aria-label="Permalink to
|
|
45
|
+
<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">print</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">f</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">'头像 URL: </span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">{</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">avatar_url</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">}</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span></code></pre></div><h3 id="html" tabindex="-1">HTML <a class="header-anchor" href="#html" aria-label="Permalink to “HTML”"></a></h3><div class="language-html"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"><!</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">DOCTYPE</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> html</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span>
|
|
46
46
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"><</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">html</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span>
|
|
47
47
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"><</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">head</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span>
|
|
48
48
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> <</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">title</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">QQ 头像展示</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"></</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">title</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span>
|
|
@@ -71,4 +71,4 @@ import{_ as i,o as a,c as h,ag as n}from"./chunks/framework.aJbMEiY9.js";const y
|
|
|
71
71
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> });</span></span>
|
|
72
72
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> </</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">script</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span>
|
|
73
73
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"></</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">body</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span>
|
|
74
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"></</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">html</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span></code></pre></div><h2 id="相关接口" tabindex="-1">相关接口 <a class="header-anchor" href="#相关接口" aria-label="Permalink to
|
|
74
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"></</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">html</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">></span></span></code></pre></div><h2 id="相关接口" tabindex="-1">相关接口 <a class="header-anchor" href="#相关接口" aria-label="Permalink to “相关接口”"></a></h2><ul><li><code>/user/getUserPlaylists</code> - 获取用户歌单</li><li><code>/user/getCookie</code> - 获取 Cookie 信息</li><li><code>/getQQLoginQr</code> - 获取 QQ 登录二维码</li></ul>`,46)])])}const A=i(n,[["render",l]]);export{y as __pageData,A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as i,S as a,j as h,m as k}from"./chunks/framework.BUY3a635.js";const y=JSON.parse('{"title":"获取 QQ 头像接口使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"USER_AVATAR_GUIDE.md","filePath":"USER_AVATAR_GUIDE.md","lastUpdated":1779031768000}'),n={name:"USER_AVATAR_GUIDE.md"};function l(t,s,p,e,r,d){return a(),h("div",null,[...s[0]||(s[0]=[k("",46)])])}const A=i(n,[["render",l]]);export{y as __pageData,A as default};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as i,S as a,j as t,m as n}from"./chunks/framework.BUY3a635.js";const o=JSON.parse('{"title":"评论相关 API","description":"","frontmatter":{},"headers":[],"relativePath":"api/comments.md","filePath":"api/comments.md","lastUpdated":1779031768000}'),h={name:"api/comments.md"};function l(p,s,k,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`<h1 id="评论相关-api" tabindex="-1">评论相关 API <a class="header-anchor" href="#评论相关-api" aria-label="Permalink to “评论相关 API”"></a></h1><p>获取歌曲、专辑等评论数据。</p><h2 id="获取评论" tabindex="-1">获取评论 <a class="header-anchor" href="#获取评论" aria-label="Permalink to “获取评论”"></a></h2><p>获取歌曲、专辑等的评论列表。</p><p><strong>接口:</strong> <code>GET /getComments</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>是</td><td>资源 ID(歌曲 ID/专辑 ID 等)</td></tr><tr><td>rootcommentid</td><td>string</td><td>否</td><td>根评论 ID(回复评论时使用)</td></tr><tr><td>pagesize</td><td>number</td><td>否</td><td>每页评论数</td></tr><tr><td>pagenum</td><td>number</td><td>否</td><td>页码</td></tr><tr><td>cmd</td><td>number</td><td>否</td><td>命令类型</td></tr><tr><td>reqtype</td><td>number</td><td>否</td><td>请求类型</td></tr><tr><td>biztype</td><td>number</td><td>否</td><td>业务类型(1=歌曲,2=专辑等)</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取歌曲评论</span></span>
|
|
2
2
|
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getComments?id=123456&biztype=1&pagesize=20</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span>
|
|
3
3
|
<span class="line"></span>
|
|
4
4
|
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取专辑评论</span></span>
|
|
5
|
-
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getComments?id=789012&biztype=2&pagesize=20</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><p><strong>响应:</strong></p><div class="language-json
|
|
5
|
+
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getComments?id=789012&biztype=2&pagesize=20</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><p><strong>响应:</strong></p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
|
|
6
6
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
7
7
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">msg</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">success</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
8
8
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
@@ -19,4 +19,4 @@ import{_ as i,o as a,c as t,ag as n}from"./chunks/framework.aJbMEiY9.js";const g
|
|
|
19
19
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">total</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 1000</span></span>
|
|
20
20
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
21
21
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
22
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="评论类型" tabindex="-1">评论类型 <a class="header-anchor" href="#评论类型" aria-label="Permalink to
|
|
22
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="评论类型" tabindex="-1">评论类型 <a class="header-anchor" href="#评论类型" aria-label="Permalink to “评论类型”"></a></h2><ul><li><strong>biztype=1</strong>: 歌曲评论</li><li><strong>biztype=2</strong>: 专辑评论</li><li><strong>biztype=3</strong>: 歌单评论</li><li><strong>biztype=4</strong>: MV 评论</li></ul><h2 id="排序方式" tabindex="-1">排序方式 <a class="header-anchor" href="#排序方式" aria-label="Permalink to “排序方式”"></a></h2><ul><li><strong>reqtype=1</strong>: 推荐排序</li><li><strong>reqtype=2</strong>: 时间排序(最新)</li><li><strong>reqtype=3</strong>: 热度排序(点赞最多)</li></ul><h2 id="相关接口" tabindex="-1">相关接口 <a class="header-anchor" href="#相关接口" aria-label="Permalink to “相关接口”"></a></h2><ul><li><a href="/qq-music-api/api/music.html">音乐相关 API</a></li><li><a href="/qq-music-api/api/music.html">专辑相关 API</a></li></ul>`,17)])])}const y=i(h,[["render",l]]);export{o as __pageData,y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as i,S as a,j as t,m as n}from"./chunks/framework.BUY3a635.js";const o=JSON.parse('{"title":"评论相关 API","description":"","frontmatter":{},"headers":[],"relativePath":"api/comments.md","filePath":"api/comments.md","lastUpdated":1779031768000}'),h={name:"api/comments.md"};function l(p,s,k,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n("",17)])])}const y=i(h,[["render",l]]);export{o as __pageData,y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as i,S as s,j as e,m as t}from"./chunks/framework.BUY3a635.js";const m=JSON.parse('{"title":"API 文档","description":"","frontmatter":{"layout":"doc","title":"API 文档"},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md","lastUpdated":1779031768000}'),l={name:"api/index.md"};function r(h,a,n,o,p,d){return s(),e("div",null,[...a[0]||(a[0]=[t('<h1 id="api-文档" tabindex="-1">API 文档 <a class="header-anchor" href="#api-文档" aria-label="Permalink to “API 文档”"></a></h1><p>本章节提供完整的 API 接口文档,包含所有可用接口的说明、参数与调用示例。</p><h2 id="推荐阅读路径" tabindex="-1">推荐阅读路径 <a class="header-anchor" href="#推荐阅读路径" aria-label="Permalink to “推荐阅读路径”"></a></h2><ul><li>新用户入口:<a href="/qq-music-api/guide/">使用指南</a></li><li>登录态相关:<a href="/qq-music-api/guide/authentication.html">认证与登录</a></li><li>用户能力入口:<a href="/qq-music-api/api/user.html">用户接口</a></li><li>响应结构说明:<a href="/qq-music-api/reference/response-format.html">响应格式</a></li></ul><h2 id="接口列表" tabindex="-1">接口列表 <a class="header-anchor" href="#接口列表" aria-label="Permalink to “接口列表”"></a></h2><ul><li><strong><a href="/qq-music-api/api/playground.html">API 调试台</a></strong> - 在文档中直接配置参数并发送请求</li><li><strong><a href="/qq-music-api/api/music.html">音乐相关</a></strong> - 获取歌曲播放链接、歌词、专辑信息等</li><li><strong><a href="/qq-music-api/api/singer.html">歌手相关</a></strong> - 歌手列表、歌手详情、热门歌曲、MV 等</li><li><strong><a href="/qq-music-api/api/playlist.html">歌单相关</a></strong> - 歌单分类、歌单详情、新歌专辑等</li><li><strong><a href="/qq-music-api/api/rank.html">排行榜</a></strong> - 各种音乐排行榜、榜单详情</li><li><strong><a href="/qq-music-api/api/search.html">搜索</a></strong> - 歌曲、歌手、专辑、歌单搜索</li><li><strong><a href="/qq-music-api/api/comments.html">评论</a></strong> - 获取歌曲、专辑等评论数据</li><li><strong><a href="/qq-music-api/api/user.html">用户接口</a></strong> - 用户歌单、用户头像、扫码登录等能力</li><li><strong><a href="/qq-music-api/api/other.html">其他接口</a></strong> - MV、图片、数字专辑、电台、推荐、票务等接口</li></ul><h2 id="使用说明" tabindex="-1">使用说明 <a class="header-anchor" href="#使用说明" aria-label="Permalink to “使用说明”"></a></h2><p>所有接口均支持 <code>GET</code> 请求,部分接口支持 <code>POST</code> 请求。具体请求方式请参考各接口文档。</p><h3 id="基础-url" tabindex="-1">基础 URL <a class="header-anchor" href="#基础-url" aria-label="Permalink to “基础 URL”"></a></h3><div class="language-text"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span>http://localhost:3200</span></span></code></pre></div><h3 id="请求示例" tabindex="-1">请求示例 <a class="header-anchor" href="#请求示例" aria-label="Permalink to “请求示例”"></a></h3><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getRanks</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div>',12)])])}const g=i(l,[["render",r]]);export{m as __pageData,g as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as i,S as s,j as e,m as t}from"./chunks/framework.BUY3a635.js";const m=JSON.parse('{"title":"API 文档","description":"","frontmatter":{"layout":"doc","title":"API 文档"},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md","lastUpdated":1779031768000}'),l={name:"api/index.md"};function r(h,a,n,o,p,d){return s(),e("div",null,[...a[0]||(a[0]=[t("",12)])])}const g=i(l,[["render",r]]);export{m as __pageData,g as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as i,S as a,j as t,m as h}from"./chunks/framework.BUY3a635.js";const o=JSON.parse('{"title":"音乐相关 API","description":"","frontmatter":{},"headers":[],"relativePath":"api/music.md","filePath":"api/music.md","lastUpdated":1779031768000}'),n={name:"api/music.md"};function k(l,s,p,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`<h1 id="音乐相关-api" tabindex="-1">音乐相关 API <a class="header-anchor" href="#音乐相关-api" aria-label="Permalink to “音乐相关 API”"></a></h1><p>音乐播放、歌词、专辑等相关接口。</p><h2 id="获取音乐播放-url" tabindex="-1">获取音乐播放 URL <a class="header-anchor" href="#获取音乐播放-url" aria-label="Permalink to “获取音乐播放 URL”"></a></h2><p>获取歌曲播放地址。</p><p><strong>接口:</strong> <code>GET /getMusicPlay</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>songmid</td><td>string</td><td>是</td><td>歌曲 MID</td></tr><tr><td>songid</td><td>number</td><td>否</td><td>歌曲 ID</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getMusicPlay?songmid=003rJSwm3TechU</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><p><strong>响应:</strong></p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
|
|
2
2
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
3
3
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">msg</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">success</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
4
4
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
@@ -6,14 +6,14 @@ import{_ as i,o as a,c as t,ag as h}from"./chunks/framework.aJbMEiY9.js";const g
|
|
|
6
6
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">size</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 12345678</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
7
7
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">quality</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">128kbps</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span>
|
|
8
8
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
9
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="获取歌词" tabindex="-1">获取歌词 <a class="header-anchor" href="#获取歌词" aria-label="Permalink to
|
|
9
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="获取歌词" tabindex="-1">获取歌词 <a class="header-anchor" href="#获取歌词" aria-label="Permalink to “获取歌词”"></a></h2><p>获取歌曲歌词,支持解析格式。</p><p><strong>接口:</strong> <code>GET /getLyric</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>songmid</td><td>string</td><td>是</td><td>歌曲 MID</td></tr><tr><td>isFormat</td><td>number</td><td>否</td><td>是否解析格式(1=解析)</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getLyric?songmid=003rJSwm3TechU&isFormat=1</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><p><strong>响应:</strong></p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
|
|
10
10
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
11
11
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">msg</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">success</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
12
12
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
13
13
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">lyric</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">[00:00.00] 歌曲名</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;">\\n</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">[00:10.00] 歌词内容...</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
14
14
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">trans</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">翻译内容...</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span>
|
|
15
15
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
16
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="获取专辑信息" tabindex="-1">获取专辑信息 <a class="header-anchor" href="#获取专辑信息" aria-label="Permalink to
|
|
16
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="获取专辑信息" tabindex="-1">获取专辑信息 <a class="header-anchor" href="#获取专辑信息" aria-label="Permalink to “获取专辑信息”"></a></h2><p>获取专辑详细信息。</p><p><strong>接口:</strong> <code>GET /getAlbumInfo</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>albummid</td><td>string</td><td>是</td><td>专辑 MID</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getAlbumInfo?albummid=0016l2F430zMux</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><p><strong>响应:</strong></p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
|
|
17
17
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
18
18
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">msg</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">success</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
19
19
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
|
|
@@ -22,4 +22,6 @@ import{_ as i,o as a,c as t,ag as h}from"./chunks/framework.aJbMEiY9.js";const g
|
|
|
22
22
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">publicTime</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">2020-01-01</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
|
|
23
23
|
<span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> "</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">songs</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> []</span></span>
|
|
24
24
|
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
|
|
25
|
-
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="批量获取歌曲信息" tabindex="-1">批量获取歌曲信息 <a class="header-anchor" href="#批量获取歌曲信息" aria-label="Permalink to
|
|
25
|
+
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h2 id="批量获取歌曲信息" tabindex="-1">批量获取歌曲信息 <a class="header-anchor" href="#批量获取歌曲信息" aria-label="Permalink to “批量获取歌曲信息”"></a></h2><p>批量获取多首歌曲的详细信息。</p><p><strong>接口:</strong> <code>POST /batchGetSongInfo</code></p><p><strong>请求体参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>songs</td><td>array</td><td>否</td><td>歌曲列表,元素格式为 <code>[song_mid]</code> 或 <code>[song_mid, song_id]</code>,<code>song_id</code> 可省略</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -X</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> POST</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/batchGetSongInfo</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
26
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Content-Type: application/json</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
27
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -d</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> '</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">{"songs":[["003rJSwm3TechU"],["0042c8L50x6Z9z"]]}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span></span></code></pre></div><h2 id="相关接口" tabindex="-1">相关接口 <a class="header-anchor" href="#相关接口" aria-label="Permalink to “相关接口”"></a></h2><ul><li><a href="/qq-music-api/api/singer.html">歌手相关 API</a></li><li><a href="/qq-music-api/api/playlist.html">歌单相关 API</a></li><li><a href="/qq-music-api/api/rank.html">排行榜 API</a></li></ul>`,38)])])}const y=i(n,[["render",k]]);export{o as __pageData,y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as i,S as a,j as t,m as h}from"./chunks/framework.BUY3a635.js";const o=JSON.parse('{"title":"音乐相关 API","description":"","frontmatter":{},"headers":[],"relativePath":"api/music.md","filePath":"api/music.md","lastUpdated":1779031768000}'),n={name:"api/music.md"};function k(l,s,p,e,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h("",38)])])}const y=i(n,[["render",k]]);export{o as __pageData,y as default};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{c as s,S as i,j as a,m as e}from"./chunks/framework.BUY3a635.js";const g=JSON.parse('{"title":"其他接口","description":"","frontmatter":{},"headers":[],"relativePath":"api/other.md","filePath":"api/other.md","lastUpdated":1779031768000}'),h={name:"api/other.md"};function d(l,t,n,r,o,p){return i(),a("div",null,[...t[0]||(t[0]=[e(`<h1 id="其他接口" tabindex="-1">其他接口 <a class="header-anchor" href="#其他接口" aria-label="Permalink to “其他接口”"></a></h1><p>本页整理了 MV、图片、数字专辑、下载、扫码登录、电台、推荐等接口。</p><h2 id="mv-相关" tabindex="-1">MV 相关 <a class="header-anchor" href="#mv-相关" aria-label="Permalink to “MV 相关”"></a></h2><h3 id="获取-mv-列表" tabindex="-1">获取 MV 列表 <a class="header-anchor" href="#获取-mv-列表" aria-label="Permalink to “获取 MV 列表”"></a></h3><p><strong>接口:</strong> <code>GET /getMv</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>area_id</td><td>number</td><td>否</td><td>地区 ID,默认 15</td></tr><tr><td>version_id</td><td>number</td><td>否</td><td>版本 ID,默认 7</td></tr><tr><td>limit</td><td>number</td><td>否</td><td>返回数量,默认 20</td></tr><tr><td>page</td><td>number</td><td>否</td><td>页码,默认 0</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getMv?area_id=1&limit=20</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h3 id="获取-mv-播放地址" tabindex="-1">获取 MV 播放地址 <a class="header-anchor" href="#获取-mv-播放地址" aria-label="Permalink to “获取 MV 播放地址”"></a></h3><p><strong>接口:</strong> <code>GET /getMvPlay</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>vid</td><td>string</td><td>是</td><td>MV 视频 ID</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getMvPlay?vid=001J5QJL1pRQYB</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><p><strong>返回说明:</strong></p><p>成功时会在响应中的 <code>playLists</code> 字段下按清晰度聚合播放地址,通常包含 <code>f10</code>、<code>f20</code>、<code>f30</code>、<code>f40</code> 等分组。</p><p><strong>注意事项:</strong></p><ul><li><code>vid</code> 缺失时会返回 <code>400</code></li><li>当上游 MV URL 数据为空时,当前实现会返回 <code>502</code></li><li>当前实现会同时聚合 <code>mp4</code> 与 <code>hls</code> 的 <code>freeflow_url</code> 数据</li></ul><h3 id="按标签获取-mv" tabindex="-1">按标签获取 MV <a class="header-anchor" href="#按标签获取-mv" aria-label="Permalink to “按标签获取 MV”"></a></h3><p><strong>接口:</strong> <code>GET /getMvByTag</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>tag</td><td>string</td><td>是</td><td>MV 标签</td></tr><tr><td>limit</td><td>number</td><td>否</td><td>数量限制</td></tr><tr><td>page</td><td>number</td><td>否</td><td>页码</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getMvByTag?tag=流行&limit=20</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="图片相关" tabindex="-1">图片相关 <a class="header-anchor" href="#图片相关" aria-label="Permalink to “图片相关”"></a></h2><h3 id="获取图片-url" tabindex="-1">获取图片 URL <a class="header-anchor" href="#获取图片-url" aria-label="Permalink to “获取图片 URL”"></a></h3><p><strong>接口:</strong> <code>GET /getImageUrl</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>是</td><td>图片资源 ID</td></tr><tr><td>size</td><td>string</td><td>否</td><td>图片尺寸,默认 <code>300x300</code></td></tr><tr><td>maxAge</td><td>number</td><td>否</td><td>缓存时间,默认 <code>2592000</code></td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getImageUrl?id=004AlfUb0cVkN1&size=500x500</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="数字专辑" tabindex="-1">数字专辑 <a class="header-anchor" href="#数字专辑" aria-label="Permalink to “数字专辑”"></a></h2><h3 id="获取数字专辑列表" tabindex="-1">获取数字专辑列表 <a class="header-anchor" href="#获取数字专辑列表" aria-label="Permalink to “获取数字专辑列表”"></a></h3><p><strong>接口:</strong> <code>GET /getDigitalAlbumLists</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>limit</td><td>number</td><td>否</td><td>数量限制</td></tr><tr><td>page</td><td>number</td><td>否</td><td>页码</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getDigitalAlbumLists?limit=20</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="下载相关" tabindex="-1">下载相关 <a class="header-anchor" href="#下载相关" aria-label="Permalink to “下载相关”"></a></h2><h3 id="下载-qq-音乐资源地址" tabindex="-1">下载 QQ 音乐资源地址 <a class="header-anchor" href="#下载-qq-音乐资源地址" aria-label="Permalink to “下载 QQ 音乐资源地址”"></a></h3><p><strong>接口:</strong> <code>GET /downloadQQMusic</code></p><p><strong>参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>songmid</td><td>string</td><td>是</td><td>歌曲 MID</td></tr><tr><td>quality</td><td>string</td><td>否</td><td>音质,如 <code>128</code>、<code>m4a</code>、<code>flac</code></td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/downloadQQMusic?songmid=003rJSwm3TechU&quality=128</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="用户与扫码登录" tabindex="-1">用户与扫码登录 <a class="header-anchor" href="#用户与扫码登录" aria-label="Permalink to “用户与扫码登录”"></a></h2><h3 id="获取-qq-登录二维码" tabindex="-1">获取 QQ 登录二维码 <a class="header-anchor" href="#获取-qq-登录二维码" aria-label="Permalink to “获取 QQ 登录二维码”"></a></h3><p><strong>接口:</strong> <code>GET /getQQLoginQr</code></p><p><strong>兼容接口:</strong> <code>GET /user/getQQLoginQr</code></p><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getQQLoginQr</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h3 id="检查扫码登录状态" tabindex="-1">检查扫码登录状态 <a class="header-anchor" href="#检查扫码登录状态" aria-label="Permalink to “检查扫码登录状态”"></a></h3><p><strong>接口:</strong> <code>POST /checkQQLoginQr</code></p><p><strong>兼容接口:</strong> <code>POST /user/checkQQLoginQr</code></p><p><strong>请求体参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>qrsig</td><td>string</td><td>是</td><td>二维码签名</td></tr><tr><td>ptqrtoken</td><td>string</td><td>否</td><td>轮询状态时使用的 token</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -X</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> POST</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/checkQQLoginQr</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
2
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Content-Type: application/json</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
3
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -d</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> '</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">{"qrsig":"你的 qrsig","ptqrtoken":"你的 ptqrtoken"}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">提示</p><p>如果你通过前一个接口获取二维码,通常需要保留响应中的关键字段,再传给登录状态检查接口。</p></div><div class="warning custom-block"><p class="custom-block-title">已知失败分支</p><p>当前实现会对超时、二维码失效、提取不到 <code>checkSigUrl</code>、提取不到 <code>p_skey</code>、授权跳转缺少 <code>code</code> 等场景返回明确错误。</p></div><h2 id="批量接口" tabindex="-1">批量接口 <a class="header-anchor" href="#批量接口" aria-label="Permalink to “批量接口”"></a></h2><h3 id="批量获取歌曲信息" tabindex="-1">批量获取歌曲信息 <a class="header-anchor" href="#批量获取歌曲信息" aria-label="Permalink to “批量获取歌曲信息”"></a></h3><p><strong>接口:</strong> <code>POST /batchGetSongInfo</code></p><p><strong>请求体参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td>songs</td><td>array</td><td>否</td><td>歌曲列表,元素格式为 <code>[song_mid, song_id]</code></td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -X</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> POST</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/batchGetSongInfo</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
4
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Content-Type: application/json</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
5
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -d</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> '</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">{"songs":[["0039MnYb0qxYhV","12345"],["001Qu4I30eVFYb"]]}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span></span></code></pre></div><p><strong>注意事项:</strong></p><ul><li><code>songs</code> 缺失时,当前实现返回空数组</li><li>单个元素缺少 <code>song_id</code> 时,服务端会使用空字符串作为默认值</li></ul><h3 id="批量获取歌单列表" tabindex="-1">批量获取歌单列表 <a class="header-anchor" href="#批量获取歌单列表" aria-label="Permalink to “批量获取歌单列表”"></a></h3><p><strong>接口:</strong> <code>POST /batchGetSongLists</code></p><p><strong>请求体参数:</strong></p><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td>categoryIds</td><td>number[]</td><td>否</td><td><code>[10000000]</code></td><td>分类 ID 数组</td></tr><tr><td>page</td><td>number</td><td>否</td><td>0</td><td>页码</td></tr><tr><td>limit</td><td>number</td><td>否</td><td>19</td><td>数量</td></tr><tr><td>sortId</td><td>number</td><td>否</td><td>5</td><td>排序方式</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -X</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> POST</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/batchGetSongLists</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
6
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Content-Type: application/json</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
|
|
7
|
+
<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -d</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> '</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">{"categoryIds":[10000000,10000002],"page":0,"limit":19,"sortId":5}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">'</span></span></code></pre></div><p><strong>注意事项:</strong></p><ul><li>未传 <code>categoryIds</code> 时,当前实现会使用默认分类 ID <code>10000000</code></li><li>返回结构当前为 <code>{ status, data }</code></li><li>当下游返回业务错误时,接口会保留该错误对象并放入结果数组</li></ul><h2 id="电台相关" tabindex="-1">电台相关 <a class="header-anchor" href="#电台相关" aria-label="Permalink to “电台相关”"></a></h2><h3 id="获取电台列表" tabindex="-1">获取电台列表 <a class="header-anchor" href="#获取电台列表" aria-label="Permalink to “获取电台列表”"></a></h3><p><strong>接口:</strong> <code>GET /getRadioLists</code></p><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getRadioLists</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="推荐相关" tabindex="-1">推荐相关 <a class="header-anchor" href="#推荐相关" aria-label="Permalink to “推荐相关”"></a></h2><h3 id="获取首页推荐内容" tabindex="-1">获取首页推荐内容 <a class="header-anchor" href="#获取首页推荐内容" aria-label="Permalink to “获取首页推荐内容”"></a></h3><p><strong>接口:</strong> <code>GET /getRecommend</code></p><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getRecommend</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="票务相关" tabindex="-1">票务相关 <a class="header-anchor" href="#票务相关" aria-label="Permalink to “票务相关”"></a></h2><h3 id="获取票务信息" tabindex="-1">获取票务信息 <a class="header-anchor" href="#获取票务信息" aria-label="Permalink to “获取票务信息”"></a></h3><p><strong>接口:</strong> <code>GET /getTicketInfo</code></p><p><strong>示例:</strong></p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getTicketInfo</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span></span></code></pre></div><h2 id="相关文档" tabindex="-1">相关文档 <a class="header-anchor" href="#相关文档" aria-label="Permalink to “相关文档”"></a></h2><ul><li><a href="/qq-music-api/api/music.html">音乐相关 API</a></li><li><a href="/qq-music-api/api/singer.html">歌手相关 API</a></li><li><a href="/qq-music-api/api/playlist.html">歌单相关 API</a></li><li><a href="/qq-music-api/guide/quickstart.html">快速开始</a></li></ul>`,95)])])}const c=s(h,[["render",d]]);export{g as __pageData,c as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as s,S as i,j as a,m as e}from"./chunks/framework.BUY3a635.js";const g=JSON.parse('{"title":"其他接口","description":"","frontmatter":{},"headers":[],"relativePath":"api/other.md","filePath":"api/other.md","lastUpdated":1779031768000}'),h={name:"api/other.md"};function d(l,t,n,r,o,p){return i(),a("div",null,[...t[0]||(t[0]=[e("",95)])])}const c=s(h,[["render",d]]);export{g as __pageData,c as default};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{c as E,S as g,j as b,g as t,aB as m,at as x,F as z,Y as G,a5 as v,au as f,X as d,d as $,n as _,o as V}from"./chunks/framework.BUY3a635.js";const T="http://localhost:3200",q=new Set(["http:","https:"]),L=()=>{const s=globalThis.location;return s&&q.has(s.protocol)?s.origin:T},M=s=>{const a=String(s||"").trim();if(!a)return T;try{const o=/^https?:\/\//i.test(a)?a:`http://${a.replace(/^\/+/,"")}`,n=new URL(o,L());return q.has(n.protocol)?n.origin.replace(/\/+$/,""):T}catch{return T}},A=s=>{const a=String(s||"").trim();if(!a)return"/";if(/^https?:\/\//i.test(a))try{const o=new URL(a);return`${o.pathname}${o.search}${o.hash}`||"/"}catch{return"/"}return a.startsWith("/")?a:`/${a}`},I=s=>String(s||"").trim().replace(/^\?/,""),R=({baseUrl:s,path:a="/",query:o=""})=>{const n=M(s),r=A(a),u=I(o);if(!u)return`${n}${r}`;const i=r.includes("?")?"&":"?";return`${n}${r}${i}${u}`},N=({method:s="GET",cookie:a="",body:o="",signal:n}={})=>{const r=String(s||"GET").toUpperCase(),u={},i=String(a||"").trim(),c={method:r,headers:u};return n&&(c.signal=n),i&&(u["X-Custom-Cookie"]=i),r!=="GET"&&String(o||"").trim()&&(u["Content-Type"]="application/json",c.body=o),c},J=(s,a="")=>{if(!s)return a;try{return JSON.stringify(JSON.parse(s),null,2)}catch{return s||a}},F=s=>s instanceof Error?s.message:String(s),j=async({url:s,options:a})=>{const o=performance.now(),n=await fetch(s,a),r=await n.text(),u=Math.round(performance.now()-o),i=`${n.status} ${n.statusText||"OK"}`;return{elapsedMs:u,formattedText:J(r,i),ok:n.ok,rawText:r,sizeBytes:new Blob([r]).size,statusText:i}},D={class:"api-playground"},H={class:"toolbar"},Q=["value"],X={class:"request-line"},K=["disabled"],W={class:"field"},Y={class:"field"},Z={class:"field"},ee=["disabled"],te={class:"url-preview"},ae={class:"result-head"},se={key:0,class:"result error"},oe={key:1,class:"result"},ne={__name:"ApiPlayground",setup(s){const a=[{name:"播放链接",method:"GET",path:"/getMusicPlay",query:"songmid=003rJSwm3TechU",body:""},{name:"歌词",method:"GET",path:"/getLyric",query:"songmid=003rJSwm3TechU&isFormat=1",body:""},{name:"搜索",method:"GET",path:"/getSearchByKey",query:"key=周杰伦&limit=10&page=1",body:""},{name:"批量歌曲信息",method:"POST",path:"/batchGetSongInfo",query:"",body:`{
|
|
2
|
+
"songs": [
|
|
3
|
+
["003rJSwm3TechU"],
|
|
4
|
+
["0042c8L50x6Z9z"]
|
|
5
|
+
]
|
|
6
|
+
}`},{name:"歌单列表",method:"POST",path:"/batchGetSongLists",query:"",body:`{
|
|
7
|
+
"categoryIds": [10000000],
|
|
8
|
+
"page": 0,
|
|
9
|
+
"limit": 19,
|
|
10
|
+
"sortId": 5
|
|
11
|
+
}`}],o=d(T),n=d(a[0].name),r=d(a[0].method),u=d(a[0].path),i=d(a[0].query),c=d(a[0].body),U=d(""),S=d(!1),k=d(""),h=d(""),P=d(""),y=d(""),O=$(()=>a.find(p=>p.name===n.value)||a[0]),w=$(()=>R({baseUrl:o.value,path:u.value,query:i.value})),B=()=>{const p=O.value;r.value=p.method,u.value=p.path,i.value=p.query,c.value=p.body,P.value="",y.value="",k.value="",h.value=""},C=async()=>{S.value=!0,k.value="",h.value="",P.value="",y.value="";const p=performance.now();try{const e=await j({url:w.value,options:N({method:r.value,cookie:U.value,body:c.value})});k.value=e.statusText,P.value=e.formattedText,h.value=`${e.elapsedMs} ms`}catch(e){y.value=F(e),h.value=`${Math.round(performance.now()-p)} ms`}finally{S.value=!1}};return(p,e)=>(g(),b("div",D,[t("div",H,[t("label",null,[e[7]||(e[7]=t("span",null,"预设接口",-1)),m(t("select",{"onUpdate:modelValue":e[0]||(e[0]=l=>n.value=l),onChange:B},[(g(),b(z,null,G(a,l=>t("option",{key:l.name,value:l.name},v(l.name),9,Q)),64))],544),[[x,n.value]])]),t("label",null,[e[8]||(e[8]=t("span",null,"Base URL",-1)),m(t("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>o.value=l),type:"url",spellcheck:"false"},null,512),[[f,o.value]])])]),t("div",X,[m(t("select",{"onUpdate:modelValue":e[2]||(e[2]=l=>r.value=l),"aria-label":"请求方法"},[...e[9]||(e[9]=[t("option",null,"GET",-1),t("option",null,"POST",-1)])],512),[[x,r.value]]),m(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>u.value=l),"aria-label":"接口路径",spellcheck:"false"},null,512),[[f,u.value]]),t("button",{type:"button",disabled:S.value,onClick:C},v(S.value?"请求中":"发送请求"),9,K)]),t("label",W,[e[10]||(e[10]=t("span",null,"Query",-1)),m(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>i.value=l),spellcheck:"false",placeholder:"key=value&limit=10"},null,512),[[f,i.value]])]),t("label",Y,[e[11]||(e[11]=t("span",null,"登录态 Cookie",-1)),m(t("textarea",{"onUpdate:modelValue":e[5]||(e[5]=l=>U.value=l),rows:"2",spellcheck:"false",placeholder:"通过 X-Custom-Cookie 发送,例如 uin=o123456789; qqmusic_key=..."},null,512),[[f,U.value]])]),t("label",Z,[e[12]||(e[12]=t("span",null,"Body",-1)),m(t("textarea",{"onUpdate:modelValue":e[6]||(e[6]=l=>c.value=l),rows:"7",spellcheck:"false",disabled:r.value==="GET"},null,8,ee),[[f,c.value]])]),t("div",te,v(w.value),1),t("div",ae,[t("span",null,v(k.value||"等待请求"),1),t("span",null,v(h.value),1)]),y.value?(g(),b("pre",se,v(y.value),1)):(g(),b("pre",oe,v(P.value||"响应会显示在这里"),1))]))}},le=E(ne,[["__scopeId","data-v-77d7ec7e"]]),ie=JSON.parse('{"title":"API 调试台","description":"","frontmatter":{"layout":"doc","title":"API 调试台"},"headers":[],"relativePath":"api/playground.md","filePath":"api/playground.md","lastUpdated":1779031768000}'),re={name:"api/playground.md"},de=Object.assign(re,{setup(s){return(a,o)=>(g(),b("div",null,[o[0]||(o[0]=t("h1",{id:"api-调试台",tabindex:"-1"},[_("API 调试台 "),t("a",{class:"header-anchor",href:"#api-调试台","aria-label":"Permalink to “API 调试台”"},"")],-1)),o[1]||(o[1]=t("p",null,[_("这个页面可以直接向本地或远程服务发送请求。默认地址是 "),t("code",null,"http://localhost:3200"),_(",如果文档站点运行在 HTTPS 页面中,浏览器可能会拦截对 HTTP 服务的请求,此时可以在本地运行 "),t("code",null,"npm run docs:dev"),_(" 后打开调试台。")],-1)),V(le)]))}});export{ie as __pageData,de as default};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{c as E,S as g,j as b,g as t,aB as m,at as x,F as z,Y as G,a5 as v,au as f,X as d,d as $,n as _,o as V}from"./chunks/framework.BUY3a635.js";const T="http://localhost:3200",q=new Set(["http:","https:"]),L=()=>{const s=globalThis.location;return s&&q.has(s.protocol)?s.origin:T},M=s=>{const a=String(s||"").trim();if(!a)return T;try{const o=/^https?:\/\//i.test(a)?a:`http://${a.replace(/^\/+/,"")}`,n=new URL(o,L());return q.has(n.protocol)?n.origin.replace(/\/+$/,""):T}catch{return T}},A=s=>{const a=String(s||"").trim();if(!a)return"/";if(/^https?:\/\//i.test(a))try{const o=new URL(a);return`${o.pathname}${o.search}${o.hash}`||"/"}catch{return"/"}return a.startsWith("/")?a:`/${a}`},I=s=>String(s||"").trim().replace(/^\?/,""),R=({baseUrl:s,path:a="/",query:o=""})=>{const n=M(s),r=A(a),u=I(o);if(!u)return`${n}${r}`;const i=r.includes("?")?"&":"?";return`${n}${r}${i}${u}`},N=({method:s="GET",cookie:a="",body:o="",signal:n}={})=>{const r=String(s||"GET").toUpperCase(),u={},i=String(a||"").trim(),c={method:r,headers:u};return n&&(c.signal=n),i&&(u["X-Custom-Cookie"]=i),r!=="GET"&&String(o||"").trim()&&(u["Content-Type"]="application/json",c.body=o),c},J=(s,a="")=>{if(!s)return a;try{return JSON.stringify(JSON.parse(s),null,2)}catch{return s||a}},F=s=>s instanceof Error?s.message:String(s),j=async({url:s,options:a})=>{const o=performance.now(),n=await fetch(s,a),r=await n.text(),u=Math.round(performance.now()-o),i=`${n.status} ${n.statusText||"OK"}`;return{elapsedMs:u,formattedText:J(r,i),ok:n.ok,rawText:r,sizeBytes:new Blob([r]).size,statusText:i}},D={class:"api-playground"},H={class:"toolbar"},Q=["value"],X={class:"request-line"},K=["disabled"],W={class:"field"},Y={class:"field"},Z={class:"field"},ee=["disabled"],te={class:"url-preview"},ae={class:"result-head"},se={key:0,class:"result error"},oe={key:1,class:"result"},ne={__name:"ApiPlayground",setup(s){const a=[{name:"播放链接",method:"GET",path:"/getMusicPlay",query:"songmid=003rJSwm3TechU",body:""},{name:"歌词",method:"GET",path:"/getLyric",query:"songmid=003rJSwm3TechU&isFormat=1",body:""},{name:"搜索",method:"GET",path:"/getSearchByKey",query:"key=周杰伦&limit=10&page=1",body:""},{name:"批量歌曲信息",method:"POST",path:"/batchGetSongInfo",query:"",body:`{
|
|
2
|
+
"songs": [
|
|
3
|
+
["003rJSwm3TechU"],
|
|
4
|
+
["0042c8L50x6Z9z"]
|
|
5
|
+
]
|
|
6
|
+
}`},{name:"歌单列表",method:"POST",path:"/batchGetSongLists",query:"",body:`{
|
|
7
|
+
"categoryIds": [10000000],
|
|
8
|
+
"page": 0,
|
|
9
|
+
"limit": 19,
|
|
10
|
+
"sortId": 5
|
|
11
|
+
}`}],o=d(T),n=d(a[0].name),r=d(a[0].method),u=d(a[0].path),i=d(a[0].query),c=d(a[0].body),U=d(""),S=d(!1),k=d(""),h=d(""),P=d(""),y=d(""),O=$(()=>a.find(p=>p.name===n.value)||a[0]),w=$(()=>R({baseUrl:o.value,path:u.value,query:i.value})),B=()=>{const p=O.value;r.value=p.method,u.value=p.path,i.value=p.query,c.value=p.body,P.value="",y.value="",k.value="",h.value=""},C=async()=>{S.value=!0,k.value="",h.value="",P.value="",y.value="";const p=performance.now();try{const e=await j({url:w.value,options:N({method:r.value,cookie:U.value,body:c.value})});k.value=e.statusText,P.value=e.formattedText,h.value=`${e.elapsedMs} ms`}catch(e){y.value=F(e),h.value=`${Math.round(performance.now()-p)} ms`}finally{S.value=!1}};return(p,e)=>(g(),b("div",D,[t("div",H,[t("label",null,[e[7]||(e[7]=t("span",null,"预设接口",-1)),m(t("select",{"onUpdate:modelValue":e[0]||(e[0]=l=>n.value=l),onChange:B},[(g(),b(z,null,G(a,l=>t("option",{key:l.name,value:l.name},v(l.name),9,Q)),64))],544),[[x,n.value]])]),t("label",null,[e[8]||(e[8]=t("span",null,"Base URL",-1)),m(t("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>o.value=l),type:"url",spellcheck:"false"},null,512),[[f,o.value]])])]),t("div",X,[m(t("select",{"onUpdate:modelValue":e[2]||(e[2]=l=>r.value=l),"aria-label":"请求方法"},[...e[9]||(e[9]=[t("option",null,"GET",-1),t("option",null,"POST",-1)])],512),[[x,r.value]]),m(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>u.value=l),"aria-label":"接口路径",spellcheck:"false"},null,512),[[f,u.value]]),t("button",{type:"button",disabled:S.value,onClick:C},v(S.value?"请求中":"发送请求"),9,K)]),t("label",W,[e[10]||(e[10]=t("span",null,"Query",-1)),m(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>i.value=l),spellcheck:"false",placeholder:"key=value&limit=10"},null,512),[[f,i.value]])]),t("label",Y,[e[11]||(e[11]=t("span",null,"登录态 Cookie",-1)),m(t("textarea",{"onUpdate:modelValue":e[5]||(e[5]=l=>U.value=l),rows:"2",spellcheck:"false",placeholder:"通过 X-Custom-Cookie 发送,例如 uin=o123456789; qqmusic_key=..."},null,512),[[f,U.value]])]),t("label",Z,[e[12]||(e[12]=t("span",null,"Body",-1)),m(t("textarea",{"onUpdate:modelValue":e[6]||(e[6]=l=>c.value=l),rows:"7",spellcheck:"false",disabled:r.value==="GET"},null,8,ee),[[f,c.value]])]),t("div",te,v(w.value),1),t("div",ae,[t("span",null,v(k.value||"等待请求"),1),t("span",null,v(h.value),1)]),y.value?(g(),b("pre",se,v(y.value),1)):(g(),b("pre",oe,v(P.value||"响应会显示在这里"),1))]))}},le=E(ne,[["__scopeId","data-v-77d7ec7e"]]),ie=JSON.parse('{"title":"API 调试台","description":"","frontmatter":{"layout":"doc","title":"API 调试台"},"headers":[],"relativePath":"api/playground.md","filePath":"api/playground.md","lastUpdated":1779031768000}'),re={name:"api/playground.md"},de=Object.assign(re,{setup(s){return(a,o)=>(g(),b("div",null,[o[0]||(o[0]=t("h1",{id:"api-调试台",tabindex:"-1"},[_("API 调试台 "),t("a",{class:"header-anchor",href:"#api-调试台","aria-label":"Permalink to “API 调试台”"},"")],-1)),o[1]||(o[1]=t("p",null,[_("这个页面可以直接向本地或远程服务发送请求。默认地址是 "),t("code",null,"http://localhost:3200"),_(",如果文档站点运行在 HTTPS 页面中,浏览器可能会拦截对 HTTP 服务的请求,此时可以在本地运行 "),t("code",null,"npm run docs:dev"),_(" 后打开调试台。")],-1)),V(le)]))}});export{ie as __pageData,de as default};
|