@sansenjian/qq-music-api 2.2.9 → 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.
Files changed (173) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/README.md +10 -11
  3. package/dist/api/index.js +9 -0
  4. package/dist/app.js +8 -43
  5. package/dist/index.js +13 -1
  6. package/dist/koaApp.js +49 -0
  7. package/dist/module/apis/downloadQQMusic.js +2 -1
  8. package/dist/module/apis/music/getLyric.js +220 -16
  9. package/dist/module/apis/music/getMusicPlay.js +3 -2
  10. package/dist/package.json +19 -15
  11. package/dist/routers/context/getLyric.js +12 -2
  12. package/dist/routers/context/getNewDisks.js +4 -0
  13. package/dist/routers/context/getRecommend.js +4 -0
  14. package/dist/routers/context/getTicketInfo.js +4 -0
  15. package/dist/util/cookieResolver.js +10 -4
  16. package/docs-dist/404.html +6 -6
  17. package/docs-dist/CHANGELOG-ARCHITECTURE.html +14 -14
  18. package/docs-dist/COOKIE_CONFIG_GUIDE.html +13 -13
  19. package/docs-dist/DEGRADE_EXAMPLES.html +109 -0
  20. package/docs-dist/FALLBACK_MODE_GUIDE.html +21 -21
  21. package/docs-dist/QUICK_START.html +62 -0
  22. package/docs-dist/README.html +17 -17
  23. package/docs-dist/TEST_USER_PLAYLISTS.html +14 -14
  24. package/docs-dist/USER_AVATAR_GUIDE.html +16 -16
  25. package/docs-dist/api/comments.html +12 -12
  26. package/docs-dist/api/index.html +10 -10
  27. package/docs-dist/api/music.html +15 -13
  28. package/docs-dist/api/other.html +13 -13
  29. package/docs-dist/api/playground.html +27 -0
  30. package/docs-dist/api/playlist.html +15 -15
  31. package/docs-dist/api/rank.html +12 -12
  32. package/docs-dist/api/search.html +13 -13
  33. package/docs-dist/api/singer.html +12 -12
  34. package/docs-dist/api/user.html +16 -16
  35. package/docs-dist/assets/{CHANGELOG-ARCHITECTURE.md.r40JGJZK.js → CHANGELOG-ARCHITECTURE.md.CYHmaBdY.js} +5 -5
  36. package/docs-dist/assets/CHANGELOG-ARCHITECTURE.md.CYHmaBdY.lean.js +1 -0
  37. package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.Nvywo7CW.js +13 -0
  38. package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.Nvywo7CW.lean.js +1 -0
  39. package/docs-dist/assets/DEGRADE_EXAMPLES.md.Cz2J-qwE.js +83 -0
  40. package/docs-dist/assets/DEGRADE_EXAMPLES.md.Cz2J-qwE.lean.js +1 -0
  41. package/docs-dist/assets/{FALLBACK_MODE_GUIDE.md.BBdcIdh_.js → FALLBACK_MODE_GUIDE.md.wKA9yqoI.js} +12 -12
  42. package/docs-dist/assets/FALLBACK_MODE_GUIDE.md.wKA9yqoI.lean.js +1 -0
  43. package/docs-dist/assets/QUICK_START.md.D5KfDgbs.js +36 -0
  44. package/docs-dist/assets/QUICK_START.md.D5KfDgbs.lean.js +1 -0
  45. package/docs-dist/assets/README.md.CHbArqA7.js +421 -0
  46. package/docs-dist/assets/README.md.CHbArqA7.lean.js +1 -0
  47. package/docs-dist/assets/TEST_USER_PLAYLISTS.md.BfBxYbaM.js +16 -0
  48. package/docs-dist/assets/TEST_USER_PLAYLISTS.md.BfBxYbaM.lean.js +1 -0
  49. package/docs-dist/assets/{USER_AVATAR_GUIDE.md.CVHPs2Dn.js → USER_AVATAR_GUIDE.md.D5Rti1Gg.js} +7 -7
  50. package/docs-dist/assets/USER_AVATAR_GUIDE.md.D5Rti1Gg.lean.js +1 -0
  51. package/docs-dist/assets/{api_comments.md.79Q_C8Qp.js → api_comments.md.5nDhrWa8.js} +3 -3
  52. package/docs-dist/assets/api_comments.md.5nDhrWa8.lean.js +1 -0
  53. package/docs-dist/assets/api_index.md.DdG1WHkZ.js +1 -0
  54. package/docs-dist/assets/api_index.md.DdG1WHkZ.lean.js +1 -0
  55. package/docs-dist/assets/{api_music.md.B1AzLePX.js → api_music.md.D66hq-_4.js} +6 -4
  56. package/docs-dist/assets/api_music.md.D66hq-_4.lean.js +1 -0
  57. package/docs-dist/assets/api_other.md.9KhspVEM.js +7 -0
  58. package/docs-dist/assets/api_other.md.9KhspVEM.lean.js +1 -0
  59. package/docs-dist/assets/api_playground.md.BZBvYMm2.js +11 -0
  60. package/docs-dist/assets/api_playground.md.BZBvYMm2.lean.js +11 -0
  61. package/docs-dist/assets/{api_playlist.md.8ACJ3QqD.js → api_playlist.md.BQK32ZyE.js} +6 -6
  62. package/docs-dist/assets/api_playlist.md.BQK32ZyE.lean.js +1 -0
  63. package/docs-dist/assets/{api_rank.md.B8IP2ZRy.js → api_rank.md.z7YBwVgw.js} +3 -3
  64. package/docs-dist/assets/api_rank.md.z7YBwVgw.lean.js +1 -0
  65. package/docs-dist/assets/{api_search.md.DO9J6nvp.js → api_search.md.GfzIBRfc.js} +4 -4
  66. package/docs-dist/assets/api_search.md.GfzIBRfc.lean.js +1 -0
  67. package/docs-dist/assets/api_singer.md.BDR-_qDH.js +21 -0
  68. package/docs-dist/assets/api_singer.md.BDR-_qDH.lean.js +1 -0
  69. package/docs-dist/assets/{api_user.md.Cb7Ky3Sn.js → api_user.md.Dx8BWGrb.js} +7 -7
  70. package/docs-dist/assets/api_user.md.Dx8BWGrb.lean.js +1 -0
  71. package/docs-dist/assets/app.CxuIZ1W7.js +1 -0
  72. package/docs-dist/assets/chunks/@localSearchIndexroot.ygoKgu27.js +1 -0
  73. package/docs-dist/assets/chunks/VPLocalSearchBox.BqgkAhNM.js +3 -0
  74. package/docs-dist/assets/chunks/framework.BUY3a635.js +4 -0
  75. package/docs-dist/assets/chunks/theme.C-Z3DN0r.js +2 -0
  76. package/docs-dist/assets/{guide_architecture.md.CzgqynmB.js → guide_architecture.md.SHnKkzwb.js} +20 -20
  77. package/docs-dist/assets/guide_architecture.md.SHnKkzwb.lean.js +1 -0
  78. package/docs-dist/assets/guide_authentication.md.CZCKocgR.js +4 -0
  79. package/docs-dist/assets/guide_authentication.md.CZCKocgR.lean.js +1 -0
  80. package/docs-dist/assets/guide_index.md.CkJ-jjL0.js +1 -0
  81. package/docs-dist/assets/guide_index.md.CkJ-jjL0.lean.js +1 -0
  82. package/docs-dist/assets/guide_installation.md.D2TBzILh.js +7 -0
  83. package/docs-dist/assets/guide_installation.md.D2TBzILh.lean.js +1 -0
  84. package/docs-dist/assets/guide_quickstart.md.J7Sib8wg.js +13 -0
  85. package/docs-dist/assets/guide_quickstart.md.J7Sib8wg.lean.js +1 -0
  86. package/docs-dist/assets/index.md.ClwYf6Qc.js +1 -0
  87. package/docs-dist/assets/index.md.ClwYf6Qc.lean.js +1 -0
  88. package/docs-dist/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2 +0 -0
  89. package/docs-dist/assets/inter-italic-cyrillic.D7dRslh9.woff2 +0 -0
  90. package/docs-dist/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2 +0 -0
  91. package/docs-dist/assets/inter-italic-greek.DNcpQ8QC.woff2 +0 -0
  92. package/docs-dist/assets/inter-italic-latin-ext.DytegdRQ.woff2 +0 -0
  93. package/docs-dist/assets/inter-italic-latin.COaG5lWR.woff2 +0 -0
  94. package/docs-dist/assets/inter-italic-vietnamese.BI5UxJD-.woff2 +0 -0
  95. package/docs-dist/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2 +0 -0
  96. package/docs-dist/assets/inter-roman-cyrillic.CD0kT8R4.woff2 +0 -0
  97. package/docs-dist/assets/inter-roman-greek-ext.CFAEQ5Ow.woff2 +0 -0
  98. package/docs-dist/assets/inter-roman-greek.Dsf7YjP7.woff2 +0 -0
  99. package/docs-dist/assets/inter-roman-latin-ext.Dl_ayf4-.woff2 +0 -0
  100. package/docs-dist/assets/inter-roman-latin.Cy4MYw_J.woff2 +0 -0
  101. package/docs-dist/assets/inter-roman-vietnamese.CpqCnS2H.woff2 +0 -0
  102. package/docs-dist/assets/reference_response-format.md.BrGoGoPV.js +12 -0
  103. package/docs-dist/assets/reference_response-format.md.BrGoGoPV.lean.js +1 -0
  104. package/docs-dist/assets/style.D_YoXH3a.css +1 -0
  105. package/docs-dist/guide/architecture.html +29 -29
  106. package/docs-dist/guide/authentication.html +12 -12
  107. package/docs-dist/guide/index.html +10 -10
  108. package/docs-dist/guide/installation.html +13 -13
  109. package/docs-dist/guide/quickstart.html +15 -15
  110. package/docs-dist/hashmap.json +1 -1
  111. package/docs-dist/index.html +10 -10
  112. package/docs-dist/reference/response-format.html +13 -13
  113. package/docs-dist/version.json +3 -3
  114. package/package.json +19 -15
  115. package/public/index.html +966 -0
  116. package/public/playground-utils.js +150 -0
  117. package/dist/jest.config.js +0 -52
  118. package/dist/scripts/run-tests-with-flags.js +0 -139
  119. package/dist/types/api.js +0 -55
  120. package/docs-dist/assets/CHANGELOG-ARCHITECTURE.md.r40JGJZK.lean.js +0 -1
  121. package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.BVXl7WHu.js +0 -13
  122. package/docs-dist/assets/COOKIE_CONFIG_GUIDE.md.BVXl7WHu.lean.js +0 -1
  123. package/docs-dist/assets/FALLBACK_MODE_GUIDE.md.BBdcIdh_.lean.js +0 -1
  124. package/docs-dist/assets/README.md.D6Tw0nRd.js +0 -421
  125. package/docs-dist/assets/README.md.D6Tw0nRd.lean.js +0 -1
  126. package/docs-dist/assets/TEST_USER_PLAYLISTS.md.DSt20Igj.js +0 -16
  127. package/docs-dist/assets/TEST_USER_PLAYLISTS.md.DSt20Igj.lean.js +0 -1
  128. package/docs-dist/assets/USER_AVATAR_GUIDE.md.CVHPs2Dn.lean.js +0 -1
  129. package/docs-dist/assets/api_comments.md.79Q_C8Qp.lean.js +0 -1
  130. package/docs-dist/assets/api_index.md.CU3By8tw.js +0 -1
  131. package/docs-dist/assets/api_index.md.CU3By8tw.lean.js +0 -1
  132. package/docs-dist/assets/api_music.md.B1AzLePX.lean.js +0 -1
  133. package/docs-dist/assets/api_other.md.DCg4bzA7.js +0 -7
  134. package/docs-dist/assets/api_other.md.DCg4bzA7.lean.js +0 -1
  135. package/docs-dist/assets/api_playlist.md.8ACJ3QqD.lean.js +0 -1
  136. package/docs-dist/assets/api_rank.md.B8IP2ZRy.lean.js +0 -1
  137. package/docs-dist/assets/api_search.md.DO9J6nvp.lean.js +0 -1
  138. package/docs-dist/assets/api_singer.md.CcL32xuN.js +0 -21
  139. package/docs-dist/assets/api_singer.md.CcL32xuN.lean.js +0 -1
  140. package/docs-dist/assets/api_user.md.Cb7Ky3Sn.lean.js +0 -1
  141. package/docs-dist/assets/app.CSainqD9.js +0 -1
  142. package/docs-dist/assets/chunks/@localSearchIndexroot.BKleDIv-.js +0 -1
  143. package/docs-dist/assets/chunks/VPLocalSearchBox.BUBaq7tw.js +0 -9
  144. package/docs-dist/assets/chunks/framework.aJbMEiY9.js +0 -19
  145. package/docs-dist/assets/chunks/theme.CzMhU0Ps.js +0 -2
  146. package/docs-dist/assets/guide_architecture.md.CzgqynmB.lean.js +0 -1
  147. package/docs-dist/assets/guide_authentication.md.a8yTA8Xe.js +0 -4
  148. package/docs-dist/assets/guide_authentication.md.a8yTA8Xe.lean.js +0 -1
  149. package/docs-dist/assets/guide_index.md.BgUUL6fI.js +0 -1
  150. package/docs-dist/assets/guide_index.md.BgUUL6fI.lean.js +0 -1
  151. package/docs-dist/assets/guide_installation.md.BCZ4jBl_.js +0 -7
  152. package/docs-dist/assets/guide_installation.md.BCZ4jBl_.lean.js +0 -1
  153. package/docs-dist/assets/guide_quickstart.md.9-4dA6wS.js +0 -13
  154. package/docs-dist/assets/guide_quickstart.md.9-4dA6wS.lean.js +0 -1
  155. package/docs-dist/assets/index.md.z0hAJioN.js +0 -1
  156. package/docs-dist/assets/index.md.z0hAJioN.lean.js +0 -1
  157. package/docs-dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  158. package/docs-dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  159. package/docs-dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  160. package/docs-dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  161. package/docs-dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  162. package/docs-dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  163. package/docs-dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  164. package/docs-dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  165. package/docs-dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  166. package/docs-dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  167. package/docs-dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  168. package/docs-dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  169. package/docs-dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  170. package/docs-dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  171. package/docs-dist/assets/reference_response-format.md.VvQTLDZr.js +0 -12
  172. package/docs-dist/assets/reference_response-format.md.VvQTLDZr.lean.js +0 -1
  173. package/docs-dist/assets/style.DM4qKDd4.css +0 -1
@@ -0,0 +1,83 @@
1
+ import{c as i,S as a,j as n,m as h}from"./chunks/framework.BUY3a635.js";const g=JSON.parse('{"title":"降级服务使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"DEGRADE_EXAMPLES.md","filePath":"DEGRADE_EXAMPLES.md","lastUpdated":1779031768000}'),t={name:"DEGRADE_EXAMPLES.md"};function l(k,s,e,p,d,r){return a(),n("div",null,[...s[0]||(s[0]=[h(`<h1 id="降级服务使用示例" tabindex="-1">降级服务使用示例 <a class="header-anchor" href="#降级服务使用示例" aria-label="Permalink to “降级服务使用示例”">​</a></h1><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><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;">npm</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> run</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> dev</span></span></code></pre></div><p>你会看到:</p><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>🎵 QQ Music API Service Starting...</span></span>
2
+ <span class="line"><span></span></span>
3
+ <span class="line"><span>Current Version: 2.2.7</span></span>
4
+ <span class="line"><span>Fallback Mode: Enabled</span></span>
5
+ <span class="line"><span>Use Global Cookie: No</span></span>
6
+ <span class="line"><span></span></span>
7
+ <span class="line"><span>✅ 降级模式已启用:支持手动传递 Cookie</span></span>
8
+ <span class="line"><span></span></span>
9
+ <span class="line"><span>使用方式:</span></span>
10
+ <span class="line"><span> 1. Query 参数:GET /api/endpoint?cookie=your_cookie</span></span>
11
+ <span class="line"><span> 2. Header: X-Custom-Cookie: your_cookie</span></span>
12
+ <span class="line"><span> 3. Header: Cookie: your_cookie</span></span>
13
+ <span class="line"><span></span></span>
14
+ <span class="line"><span>⚠️ 全局 Cookie 未启用:需要登录的接口请手动传递 Cookie</span></span>
15
+ <span class="line"><span></span></span>
16
+ <span class="line"><span>server running @ http://localhost:3200</span></span></code></pre></div><h3 id="_2-测试公开接口-无需-cookie" tabindex="-1">2. 测试公开接口(无需 Cookie) <a class="header-anchor" href="#_2-测试公开接口-无需-cookie" aria-label="Permalink to “2. 测试公开接口(无需 Cookie)”">​</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:#A0ADA0;--shiki-dark:#758575DD;"># 获取排行榜</span></span>
17
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getRanks</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
18
+ <span class="line"></span>
19
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取热门搜索</span></span>
20
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getHotkey</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
21
+ <span class="line"></span>
22
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 搜索歌曲</span></span>
23
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getSearchByKey/周杰伦</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="_3-获取你的-cookie" tabindex="-1">3. 获取你的 Cookie <a class="header-anchor" href="#_3-获取你的-cookie" aria-label="Permalink to “3. 获取你的 Cookie”">​</a></h3><p>访问 <code>http://localhost:3200/user/getCookie</code> 查看当前配置的 Cookie</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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getCookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><p>返回示例:</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>
24
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">data</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
25
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">code</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</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>
26
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookie</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o1979432414; qqmusic_key=xxxxx; ...</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
27
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookieList</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> [</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o1979432414</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">qqmusic_key=xxxxx</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;"> ...</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">],</span></span>
28
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookieObject</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">uin</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">o1979432414</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">qqmusic_key</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">xxxxx</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;"> ...</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span>
29
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
30
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h3 id="_4-使用需要登录的接口" tabindex="-1">4. 使用需要登录的接口 <a class="header-anchor" href="#_4-使用需要登录的接口" aria-label="Permalink to “4. 使用需要登录的接口”">​</a></h3><h4 id="方式-1-query-参数-最简单" tabindex="-1">方式 1: Query 参数(最简单) <a class="header-anchor" href="#方式-1-query-参数-最简单" aria-label="Permalink to “方式 1: Query 参数(最简单)”">​</a></h4><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>
31
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=1979432414&amp;cookie=你的 Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
32
+ <span class="line"></span>
33
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取用户喜欢的歌曲</span></span>
34
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserLikedSongs?cookie=你的 Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-2-自定义-header" tabindex="-1">方式 2: 自定义 Header <a class="header-anchor" href="#方式-2-自定义-header" aria-label="Permalink to “方式 2: 自定义 Header”">​</a></h4><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;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie: 你的 Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
35
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=1979432414</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-3-标准-cookie-header" tabindex="-1">方式 3: 标准 Cookie Header <a class="header-anchor" href="#方式-3-标准-cookie-header" aria-label="Permalink to “方式 3: 标准 Cookie Header”">​</a></h4><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;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Cookie: 你的 Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
36
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=1979432414</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><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><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;"># 假设你的 QQ 号是 123456789,Cookie 是 &quot;uin=o123456789; qqmusic_key=abc123&quot;</span></span>
37
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789&amp;cookie=uin=o123456789; qqmusic_key=abc123</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="示例-2-使用-powershell-变量" tabindex="-1">示例 2: 使用 PowerShell 变量 <a class="header-anchor" href="#示例-2-使用-powershell-变量" aria-label="Permalink to “示例 2: 使用 PowerShell 变量”">​</a></h3><div class="language-powershell"><button title="Copy Code" class="copy"></button><span class="lang">powershell</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:#B07D48;--shiki-dark:#BD976A;">cookie</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o123456789; qqmusic_key=abc123</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
38
+ <span class="line"><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:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
39
+ <span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">curl </span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">$</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin&amp;cookie=</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">$</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="示例-3-使用-node-js" tabindex="-1">示例 3: 使用 Node.js <a class="header-anchor" href="#示例-3-使用-node-js" aria-label="Permalink to “示例 3: 使用 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:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> axios</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> require</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">axios</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
40
+ <span class="line"></span>
41
+ <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> cookie</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o123456789; qqmusic_key=abc123</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
42
+ <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> uin</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">;</span></span>
43
+ <span class="line"></span>
44
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 方式 1: Query 参数</span></span>
45
+ <span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">axios</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">get</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
46
+ <span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> params</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</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;"> cookie</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
47
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}).</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">then</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =&gt;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
48
+ <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:#B07D48;--shiki-dark:#BD976A;">response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">data</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
49
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">});</span></span>
50
+ <span class="line"></span>
51
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 方式 2: Header</span></span>
52
+ <span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">axios</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">get</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/getUserPlaylists?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:#B5695977;--shiki-dark:#C98A7D77;">\`</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
53
+ <span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> headers</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
54
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> cookie</span></span>
55
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
56
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}).</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">then</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =&gt;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
57
+ <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:#B07D48;--shiki-dark:#BD976A;">response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">data</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
58
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">});</span></span></code></pre></div><h3 id="示例-4-使用-python" tabindex="-1">示例 4: 使用 Python <a class="header-anchor" href="#示例-4-使用-python" aria-label="Permalink to “示例 4: 使用 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>
59
+ <span class="line"></span>
60
+ <span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">cookie </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o123456789; qqmusic_key=abc123</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
61
+ <span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">uin </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
62
+ <span class="line"></span>
63
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 方式 1: Query 参数</span></span>
64
+ <span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">response </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> requests</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">get</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span></span>
65
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
66
+ <span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> params</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">={</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</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:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> cookie</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span>
67
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span>
68
+ <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:#393A34;--shiki-dark:#DBD7CAEE;">response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">json</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">())</span></span>
69
+ <span class="line"></span>
70
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 方式 2: Header</span></span>
71
+ <span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">response </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> requests</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">get</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span></span>
72
+ <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> f</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">&#39;http://localhost:3200/user/getUserPlaylists?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;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
73
+ <span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> headers</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">={</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> cookie</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>
75
+ <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:#393A34;--shiki-dark:#DBD7CAEE;">response</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">json</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><h3 id="需要-cookie-的接口" tabindex="-1">需要 Cookie 的接口 <a class="header-anchor" href="#需要-cookie-的接口" aria-label="Permalink to “需要 Cookie 的接口”">​</a></h3><table tabindex="0"><thead><tr><th>接口</th><th>说明</th><th>参数</th></tr></thead><tbody><tr><td><code>/user/getUserPlaylists</code></td><td>获取用户歌单</td><td><code>uin</code>, <code>cookie</code></td></tr><tr><td><code>/user/getUserLikedSongs</code></td><td>获取用户喜欢的歌曲</td><td><code>cookie</code></td></tr><tr><td><code>/user/getUserAvatar</code></td><td>获取用户头像</td><td><code>uin</code>, <code>cookie</code></td></tr><tr><td><code>/getDailyRecommend</code></td><td>获取每日推荐</td><td><code>cookie</code></td></tr><tr><td><code>/getPersonalRecommend</code></td><td>获取个性化推荐</td><td><code>cookie</code></td></tr><tr><td><code>/getSimilarSongs</code></td><td>获取相似歌曲</td><td><code>songmid</code>, <code>cookie</code></td></tr></tbody></table><h3 id="不需要-cookie-的接口" tabindex="-1">不需要 Cookie 的接口 <a class="header-anchor" href="#不需要-cookie-的接口" aria-label="Permalink to “不需要 Cookie 的接口”">​</a></h3><table tabindex="0"><thead><tr><th>接口</th><th>说明</th></tr></thead><tbody><tr><td><code>/getRanks</code></td><td>获取排行榜</td></tr><tr><td><code>/getHotkey</code></td><td>获取热门搜索关键词</td></tr><tr><td><code>/getSearchByKey/:key</code></td><td>搜索歌曲</td></tr><tr><td><code>/getSongLists</code></td><td>获取歌单列表</td></tr><tr><td><code>/getSongListDetail/:disstid</code></td><td>获取歌单详情</td></tr><tr><td><code>/getLyric/:songmid</code></td><td>获取歌词</td></tr><tr><td><code>/getMusicPlay/:songmid</code></td><td>获取歌曲播放链接</td></tr></tbody></table><h2 id="获取-cookie-的方法" tabindex="-1">获取 Cookie 的方法 <a class="header-anchor" href="#获取-cookie-的方法" aria-label="Permalink to “获取 Cookie 的方法”">​</a></h2><h3 id="方法-1-从浏览器获取" tabindex="-1">方法 1: 从浏览器获取 <a class="header-anchor" href="#方法-1-从浏览器获取" aria-label="Permalink to “方法 1: 从浏览器获取”">​</a></h3><ol><li>访问 <a href="https://y.qq.com" target="_blank" rel="noreferrer">https://y.qq.com</a> 并登录</li><li>按 F12 打开开发者工具</li><li>点击 Network 标签</li><li>刷新页面</li><li>选择第一个请求</li><li>在 Request Headers 中找到 Cookie</li><li>复制整个 Cookie 值</li></ol><h3 id="方法-2-使用扫码登录接口" tabindex="-1">方法 2: 使用扫码登录接口 <a class="header-anchor" href="#方法-2-使用扫码登录接口" aria-label="Permalink to “方法 2: 使用扫码登录接口”">​</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:#A0ADA0;--shiki-dark:#758575DD;"># 1. 获取二维码</span></span>
76
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getQQLoginQr</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
77
+ <span class="line"></span>
78
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 2. 用手机 QQ 扫码登录</span></span>
79
+ <span class="line"></span>
80
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 3. 检查登录状态</span></span>
81
+ <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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/checkQQLoginQr</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
82
+ <span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Content-Type: application/json</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
83
+ <span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -d</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">{&quot;qrsig&quot;:&quot;你的 qrsig&quot;,&quot;ptqrtoken&quot;:&quot;你的 ptqrtoken&quot;}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span></code></pre></div><p>登录成功后会返回完整的 Cookie 信息。</p><h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to “常见问题”">​</a></h2><h3 id="q-为什么返回-获取用户歌单失败" tabindex="-1">Q: 为什么返回 &quot;获取用户歌单失败&quot;? <a class="header-anchor" href="#q-为什么返回-获取用户歌单失败" aria-label="Permalink to “Q: 为什么返回 &quot;获取用户歌单失败&quot;?”">​</a></h3><p><strong>A</strong>: 可能原因:</p><ol><li>没有传递 Cookie</li><li>Cookie 已过期</li><li>Cookie 格式不正确</li><li>uin 参数与 Cookie 不匹配</li></ol><h3 id="q-cookie-有效期多久" tabindex="-1">Q: Cookie 有效期多久? <a class="header-anchor" href="#q-cookie-有效期多久" aria-label="Permalink to “Q: Cookie 有效期多久?”">​</a></h3><p><strong>A</strong>: 通常几天到几周不等,过期后需要重新获取</p><h3 id="q-如何切换回全局-cookie-模式" tabindex="-1">Q: 如何切换回全局 Cookie 模式? <a class="header-anchor" href="#q-如何切换回全局-cookie-模式" aria-label="Permalink to “Q: 如何切换回全局 Cookie 模式?”">​</a></h3><p><strong>A</strong>: 修改 <code>config/service-config.json</code>,设置 <code>useGlobalCookie: true</code>,然后重启服务</p><h2 id="注意事项" tabindex="-1">注意事项 <a class="header-anchor" href="#注意事项" aria-label="Permalink to “注意事项”">​</a></h2><ol><li><strong>Cookie 安全</strong>: 不要将 Cookie 提交到版本控制系统</li><li><strong>HTTPS</strong>: 生产环境建议使用 HTTPS 传输</li><li><strong>权限</strong>: Cookie 包含登录凭证,请妥善保管</li><li><strong>过期处理</strong>: Cookie 过期后需要重新获取</li></ol>`,50)])])}const c=i(t,[["render",l]]);export{g as __pageData,c as default};
@@ -0,0 +1 @@
1
+ import{c as i,S as a,j as n,m as h}from"./chunks/framework.BUY3a635.js";const g=JSON.parse('{"title":"降级服务使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"DEGRADE_EXAMPLES.md","filePath":"DEGRADE_EXAMPLES.md","lastUpdated":1779031768000}'),t={name:"DEGRADE_EXAMPLES.md"};function l(k,s,e,p,d,r){return a(),n("div",null,[...s[0]||(s[0]=[h("",50)])])}const c=i(t,[["render",l]]);export{g as __pageData,c as default};
@@ -1,31 +1,31 @@
1
- import{_ as i,o as a,c as n,ag as e}from"./chunks/framework.aJbMEiY9.js";const c=JSON.parse('{"title":"降级服务使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"FALLBACK_MODE_GUIDE.md","filePath":"FALLBACK_MODE_GUIDE.md","lastUpdated":1773499772000}'),l={name:"FALLBACK_MODE_GUIDE.md"};function t(h,s,p,k,o,r){return a(),n("div",null,[...s[0]||(s[0]=[e(`<h1 id="降级服务使用指南" tabindex="-1">降级服务使用指南 <a class="header-anchor" href="#降级服务使用指南" aria-label="Permalink to &quot;降级服务使用指南&quot;">​</a></h1><h2 id="概述" tabindex="-1">概述 <a class="header-anchor" href="#概述" aria-label="Permalink to &quot;概述&quot;">​</a></h2><p>为了提高服务的灵活性和可用性,本项目实现了<strong>降级服务模式</strong>。在降级模式下:</p><ul><li>✅ <strong>不需要登录的接口</strong>:可以直接使用,无需配置 Cookie</li><li>🔧 <strong>需要登录的接口</strong>:支持手动传递 Cookie,不再强制依赖全局配置</li></ul><h2 id="配置说明" tabindex="-1">配置说明 <a class="header-anchor" href="#配置说明" aria-label="Permalink to &quot;配置说明&quot;">​</a></h2><h3 id="配置文件" tabindex="-1">配置文件 <a class="header-anchor" href="#配置文件" aria-label="Permalink to &quot;配置文件&quot;">​</a></h3><p>配置文件位于 <code>config/service-config.json</code>,包含以下选项:</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
1
+ import{c as i,S as a,j as n,m as l}from"./chunks/framework.BUY3a635.js";const g=JSON.parse('{"title":"降级服务使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"FALLBACK_MODE_GUIDE.md","filePath":"FALLBACK_MODE_GUIDE.md","lastUpdated":1779031768000}'),e={name:"FALLBACK_MODE_GUIDE.md"};function h(t,s,k,p,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`<h1 id="降级服务使用指南" tabindex="-1">降级服务使用指南 <a class="header-anchor" href="#降级服务使用指南" aria-label="Permalink to “降级服务使用指南”">​</a></h1><h2 id="概述" tabindex="-1">概述 <a class="header-anchor" href="#概述" aria-label="Permalink to “概述”">​</a></h2><p>为了提高服务的灵活性和可用性,本项目实现了<strong>降级服务模式</strong>。在降级模式下:</p><ul><li>✅ <strong>不需要登录的接口</strong>:可以直接使用,无需配置 Cookie</li><li>🔧 <strong>需要登录的接口</strong>:支持手动传递 Cookie,不再强制依赖全局配置</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>配置文件位于 <code>config/service-config.json</code>,包含以下选项:</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;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">fallbackMode</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
3
3
  <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">useGlobalCookie</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> false</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
4
4
  <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookieParamName</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
5
- <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h3 id="配置项说明" tabindex="-1">配置项说明 <a class="header-anchor" href="#配置项说明" aria-label="Permalink to &quot;配置项说明&quot;">​</a></h3><table tabindex="0"><thead><tr><th>配置项</th><th>类型</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>fallbackMode</code></td><td>boolean</td><td><code>true</code></td><td>是否启用降级模式</td></tr><tr><td><code>useGlobalCookie</code></td><td>boolean</td><td><code>false</code></td><td>是否使用全局 Cookie(向后兼容)</td></tr><tr><td><code>cookieParamName</code></td><td>string</td><td><code>&quot;cookie&quot;</code></td><td>从 query 参数传递 Cookie 时的参数名</td></tr></tbody></table><h3 id="环境变量覆盖" tabindex="-1">环境变量覆盖 <a class="header-anchor" href="#环境变量覆盖" aria-label="Permalink to &quot;环境变量覆盖&quot;">​</a></h3><p>支持通过环境变量覆盖配置:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 启用降级模式</span></span>
5
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><h3 id="配置项说明" tabindex="-1">配置项说明 <a class="header-anchor" href="#配置项说明" aria-label="Permalink to “配置项说明”">​</a></h3><table tabindex="0"><thead><tr><th>配置项</th><th>类型</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>fallbackMode</code></td><td>boolean</td><td><code>true</code></td><td>是否启用降级模式</td></tr><tr><td><code>useGlobalCookie</code></td><td>boolean</td><td><code>false</code></td><td>是否使用全局 Cookie(向后兼容)</td></tr><tr><td><code>cookieParamName</code></td><td>string</td><td><code>&quot;cookie&quot;</code></td><td>从 query 参数传递 Cookie 时的参数名</td></tr></tbody></table><h3 id="环境变量覆盖" tabindex="-1">环境变量覆盖 <a class="header-anchor" href="#环境变量覆盖" aria-label="Permalink to “环境变量覆盖”">​</a></h3><p>支持通过环境变量覆盖配置:</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>
6
6
  <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> FALLBACK_MODE</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">true</span></span>
7
7
  <span class="line"></span>
8
8
  <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 启用全局 Cookie(向后兼容模式)</span></span>
9
- <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> USE_GLOBAL_COOKIE</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">true</span></span></code></pre></div><p><code>cookieParamName</code> 当前不支持环境变量覆盖,仅可在 <code>config/service-config.json</code> 中配置。</p><h2 id="使用方式" tabindex="-1">使用方式 <a class="header-anchor" href="#使用方式" aria-label="Permalink to &quot;使用方式&quot;">​</a></h2><h3 id="场景-1-不需要登录的接口" tabindex="-1">场景 1:不需要登录的接口 <a class="header-anchor" href="#场景-1-不需要登录的接口" aria-label="Permalink to &quot;场景 1:不需要登录的接口&quot;">​</a></h3><p>直接调用即可,无需任何配置:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取排行榜</span></span>
9
+ <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> USE_GLOBAL_COOKIE</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">true</span></span></code></pre></div><p><code>cookieParamName</code> 当前不支持环境变量覆盖,仅可在 <code>config/service-config.json</code> 中配置。</p><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>直接调用即可,无需任何配置:</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>
10
10
  <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getRanks</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
11
11
  <span class="line"></span>
12
12
  <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取搜索关键词</span></span>
13
13
  <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getHotkey</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
14
14
  <span class="line"></span>
15
15
  <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 搜索歌曲</span></span>
16
- <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getSearchByKey/周杰伦</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="场景-2-需要登录的接口-手动传递-cookie" tabindex="-1">场景 2:需要登录的接口(手动传递 Cookie) <a class="header-anchor" href="#场景-2-需要登录的接口-手动传递-cookie" aria-label="Permalink to &quot;场景 2:需要登录的接口(手动传递 Cookie)&quot;">​</a></h3><h4 id="方式-1-通过-query-参数传递" tabindex="-1">方式 1:通过 Query 参数传递 <a class="header-anchor" href="#方式-1-通过-query-参数传递" aria-label="Permalink to &quot;方式 1:通过 Query 参数传递&quot;">​</a></h4><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取用户歌单</span></span>
16
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getSearchByKey/周杰伦</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="场景-2-需要登录的接口-手动传递-cookie" tabindex="-1">场景 2:需要登录的接口(手动传递 Cookie) <a class="header-anchor" href="#场景-2-需要登录的接口-手动传递-cookie" aria-label="Permalink to “场景 2:需要登录的接口(手动传递 Cookie)”">​</a></h3><h4 id="方式-1-通过-query-参数传递" tabindex="-1">方式 1:通过 Query 参数传递 <a class="header-anchor" href="#方式-1-通过-query-参数传递" aria-label="Permalink to “方式 1:通过 Query 参数传递”">​</a></h4><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>
17
17
  <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789&amp;cookie=your_cookie_string</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
18
18
  <span class="line"></span>
19
19
  <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取用户信息</span></span>
20
- <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getCookie?cookie=your_cookie_string</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-2-通过自定义-header-传递" tabindex="-1">方式 2:通过自定义 Header 传递 <a class="header-anchor" href="#方式-2-通过自定义-header-传递" aria-label="Permalink to &quot;方式 2:通过自定义 Header 传递&quot;">​</a></h4><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie: your_cookie_string</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
21
- <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-3-通过标准-cookie-header-传递" tabindex="-1">方式 3:通过标准 Cookie Header 传递 <a class="header-anchor" href="#方式-3-通过标准-cookie-header-传递" aria-label="Permalink to &quot;方式 3:通过标准 Cookie Header 传递&quot;">​</a></h4><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Cookie: uin=o123456789; qqmusic_key=xxx; ...</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
22
- <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="场景-3-使用全局-cookie-向后兼容" tabindex="-1">场景 3:使用全局 Cookie(向后兼容) <a class="header-anchor" href="#场景-3-使用全局-cookie-向后兼容" aria-label="Permalink to &quot;场景 3:使用全局 Cookie(向后兼容)&quot;">​</a></h3><p>如果你希望继续使用全局 Cookie 配置,可以:</p><ol><li><p>修改 <code>config/service-config.json</code>:</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">{</span></span>
20
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getCookie?cookie=your_cookie_string</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-2-通过自定义-header-传递" tabindex="-1">方式 2:通过自定义 Header 传递 <a class="header-anchor" href="#方式-2-通过自定义-header-传递" aria-label="Permalink to “方式 2:通过自定义 Header 传递”">​</a></h4><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;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie: your_cookie_string</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
21
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-3-通过标准-cookie-header-传递" tabindex="-1">方式 3:通过标准 Cookie Header 传递 <a class="header-anchor" href="#方式-3-通过标准-cookie-header-传递" aria-label="Permalink to “方式 3:通过标准 Cookie Header 传递”">​</a></h4><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;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Cookie: uin=o123456789; qqmusic_key=xxx; ...</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
22
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="场景-3-使用全局-cookie-向后兼容" tabindex="-1">场景 3:使用全局 Cookie(向后兼容) <a class="header-anchor" href="#场景-3-使用全局-cookie-向后兼容" aria-label="Permalink to “场景 3:使用全局 Cookie(向后兼容)”">​</a></h3><p>如果你希望继续使用全局 Cookie 配置,可以:</p><ol><li><p>修改 <code>config/service-config.json</code>:</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>
23
23
  <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">fallbackMode</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
24
24
  <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">useGlobalCookie</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span></span>
25
- <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div></li><li><p>在 <code>config/user-info.json</code> 中配置 Cookie:</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><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></li><li><p>在 <code>config/user-info.json</code> 中配置 Cookie:</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>
26
26
  <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">loginUin</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
27
27
  <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookie</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o123456789; qqmusic_key=xxx; ...</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
28
- <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div></li><li><p>直接调用接口:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div></li></ol><h2 id="cookie-获取方法" tabindex="-1">Cookie 获取方法 <a class="header-anchor" href="#cookie-获取方法" aria-label="Permalink to &quot;Cookie 获取方法&quot;">​</a></h2><h3 id="从浏览器获取-cookie" tabindex="-1">从浏览器获取 Cookie <a class="header-anchor" href="#从浏览器获取-cookie" aria-label="Permalink to &quot;从浏览器获取 Cookie&quot;">​</a></h3><ol><li>访问 <a href="https://y.qq.com" target="_blank" rel="noreferrer">https://y.qq.com</a> 并登录</li><li>按 <code>F12</code> 打开开发者工具</li><li>点击 <strong>Network</strong> 标签</li><li>刷新页面</li><li>选择第一个请求</li><li>在 <strong>Request Headers</strong> 中找到 <strong>Cookie</strong></li><li>复制整个 Cookie 值</li></ol><h3 id="cookie-格式示例" tabindex="-1">Cookie 格式示例 <a class="header-anchor" href="#cookie-格式示例" aria-label="Permalink to &quot;Cookie 格式示例&quot;">​</a></h3><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span>uin=o123456789; qqmusic_key=xxxxxxxxxx; qqmusic_uin=123456789; qqmusic_fromstatus=1; _qpsvr_localtk=xxxxxx</span></span></code></pre></div><h2 id="服务启动信息" tabindex="-1">服务启动信息 <a class="header-anchor" href="#服务启动信息" aria-label="Permalink to &quot;服务启动信息&quot;">​</a></h2><p>启动服务后,你会看到类似的输出:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span>🎵 QQ Music API Service Starting...</span></span>
28
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div></li><li><p>直接调用接口:</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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=123456789</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div></li></ol><h2 id="cookie-获取方法" tabindex="-1">Cookie 获取方法 <a class="header-anchor" href="#cookie-获取方法" aria-label="Permalink to Cookie 获取方法”">​</a></h2><h3 id="从浏览器获取-cookie" tabindex="-1">从浏览器获取 Cookie <a class="header-anchor" href="#从浏览器获取-cookie" aria-label="Permalink to “从浏览器获取 Cookie">​</a></h3><ol><li>访问 <a href="https://y.qq.com" target="_blank" rel="noreferrer">https://y.qq.com</a> 并登录</li><li>按 <code>F12</code> 打开开发者工具</li><li>点击 <strong>Network</strong> 标签</li><li>刷新页面</li><li>选择第一个请求</li><li>在 <strong>Request Headers</strong> 中找到 <strong>Cookie</strong></li><li>复制整个 Cookie 值</li></ol><h3 id="cookie-格式示例" tabindex="-1">Cookie 格式示例 <a class="header-anchor" href="#cookie-格式示例" aria-label="Permalink to Cookie 格式示例”">​</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>uin=o123456789; qqmusic_key=xxxxxxxxxx; qqmusic_uin=123456789; qqmusic_fromstatus=1; _qpsvr_localtk=xxxxxx</span></span></code></pre></div><h2 id="服务启动信息" tabindex="-1">服务启动信息 <a class="header-anchor" href="#服务启动信息" aria-label="Permalink to “服务启动信息”">​</a></h2><p>启动服务后,你会看到类似的输出:</p><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>🎵 QQ Music API Service Starting...</span></span>
29
29
  <span class="line"><span></span></span>
30
30
  <span class="line"><span>Current Version: 1.x.x</span></span>
31
31
  <span class="line"><span>Fallback Mode: Enabled</span></span>
@@ -40,7 +40,7 @@ import{_ as i,o as a,c as n,ag as e}from"./chunks/framework.aJbMEiY9.js";const c
40
40
  <span class="line"><span></span></span>
41
41
  <span class="line"><span>⚠️ 全局 Cookie 未启用:需要登录的接口请手动传递 Cookie</span></span>
42
42
  <span class="line"><span></span></span>
43
- <span class="line"><span>server running @ http://localhost:3200</span></span></code></pre></div><h2 id="需要登录的接口" tabindex="-1">需要登录的接口 <a class="header-anchor" href="#需要登录的接口" aria-label="Permalink to &quot;需要登录的接口&quot;">​</a></h2><p>以下接口通常需要登录态(Cookie)才能正常工作:</p><ul><li><code>/user/getUserPlaylists</code> - 获取用户歌单</li><li><code>/user/getUserLikedSongs</code> - 获取用户喜欢的歌曲</li><li><code>/user/getUserAvatar</code> - 获取用户头像</li><li><code>/getDailyRecommend</code> - 获取每日推荐</li><li><code>/getPersonalRecommend</code> - 获取个性化推荐</li><li><code>/getSimilarSongs</code> - 获取相似歌曲</li></ul><h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to &quot;常见问题&quot;">​</a></h2><h3 id="q-降级模式和普通模式有什么区别" tabindex="-1">Q: 降级模式和普通模式有什么区别? <a class="header-anchor" href="#q-降级模式和普通模式有什么区别" aria-label="Permalink to &quot;Q: 降级模式和普通模式有什么区别?&quot;">​</a></h3><p><strong>A:</strong></p><ul><li><strong>降级模式</strong>(推荐):不需要配置全局 Cookie,按需手动传递</li><li><strong>普通模式</strong>:需要配置全局 Cookie,所有接口自动使用</li></ul><h3 id="q-如何切换回普通模式" tabindex="-1">Q: 如何切换回普通模式? <a class="header-anchor" href="#q-如何切换回普通模式" aria-label="Permalink to &quot;Q: 如何切换回普通模式?&quot;">​</a></h3><p><strong>A:</strong> 修改 <code>config/service-config.json</code>,设置 <code>useGlobalCookie: true</code></p><h3 id="q-手动传递的-cookie-优先级如何" tabindex="-1">Q: 手动传递的 Cookie 优先级如何? <a class="header-anchor" href="#q-手动传递的-cookie-优先级如何" aria-label="Permalink to &quot;Q: 手动传递的 Cookie 优先级如何?&quot;">​</a></h3><p><strong>A:</strong> 优先级顺序:</p><ol><li>手动传递的 Cookie(最高优先级)</li><li>全局 Cookie(如果启用)</li><li>无 Cookie</li></ol><h3 id="q-会影响现有接口调用吗" tabindex="-1">Q: 会影响现有接口调用吗? <a class="header-anchor" href="#q-会影响现有接口调用吗" aria-label="Permalink to &quot;Q: 会影响现有接口调用吗?&quot;">​</a></h3><p><strong>A:</strong> 不会。降级模式是向后兼容的,现有调用方式仍然有效。</p><h3 id="q-安全性如何" tabindex="-1">Q: 安全性如何? <a class="header-anchor" href="#q-安全性如何" aria-label="Permalink to &quot;Q: 安全性如何?&quot;">​</a></h3><p><strong>A:</strong></p><ul><li>Cookie 只在内存中使用,不会记录日志</li><li>建议使用 HTTPS 传输</li><li>不要将 Cookie 提交到版本控制系统</li></ul><h2 id="最佳实践" tabindex="-1">最佳实践 <a class="header-anchor" href="#最佳实践" aria-label="Permalink to &quot;最佳实践&quot;">​</a></h2><ol><li><strong>开发环境</strong>:使用降级模式,方便调试</li><li><strong>生产环境</strong>:根据需求选择模式 <ul><li>公开服务:降级模式 + 用户自行传递 Cookie</li><li>内部服务:全局 Cookie 模式</li></ul></li><li><strong>临时使用</strong>:降级模式,扫码获取 Cookie 后手动传递</li><li><strong>长期使用</strong>:全局 Cookie 模式,配置一次即可</li></ol><h2 id="示例代码" tabindex="-1">示例代码 <a class="header-anchor" href="#示例代码" aria-label="Permalink to &quot;示例代码&quot;">​</a></h2><h3 id="node-js-示例" tabindex="-1">Node.js 示例 <a class="header-anchor" href="#node-js-示例" aria-label="Permalink to &quot;Node.js 示例&quot;">​</a></h3><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> axios</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> require</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">axios</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
43
+ <span class="line"><span>server running @ http://localhost:3200</span></span></code></pre></div><h2 id="需要登录的接口" tabindex="-1">需要登录的接口 <a class="header-anchor" href="#需要登录的接口" aria-label="Permalink to “需要登录的接口”">​</a></h2><p>以下接口通常需要登录态(Cookie)才能正常工作:</p><ul><li><code>/user/getUserPlaylists</code> - 获取用户歌单</li><li><code>/user/getUserLikedSongs</code> - 获取用户喜欢的歌曲</li><li><code>/user/getUserAvatar</code> - 获取用户头像</li><li><code>/getDailyRecommend</code> - 获取每日推荐</li><li><code>/getPersonalRecommend</code> - 获取个性化推荐</li><li><code>/getSimilarSongs</code> - 获取相似歌曲</li></ul><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><ul><li><strong>降级模式</strong>(推荐):不需要配置全局 Cookie,按需手动传递</li><li><strong>普通模式</strong>:需要配置全局 Cookie,所有接口自动使用</li></ul><h3 id="q-如何切换回普通模式" tabindex="-1">Q: 如何切换回普通模式? <a class="header-anchor" href="#q-如何切换回普通模式" aria-label="Permalink to Q: 如何切换回普通模式?”">​</a></h3><p><strong>A:</strong> 修改 <code>config/service-config.json</code>,设置 <code>useGlobalCookie: true</code></p><h3 id="q-手动传递的-cookie-优先级如何" tabindex="-1">Q: 手动传递的 Cookie 优先级如何? <a class="header-anchor" href="#q-手动传递的-cookie-优先级如何" aria-label="Permalink to Q: 手动传递的 Cookie 优先级如何?”">​</a></h3><p><strong>A:</strong> 优先级顺序:</p><ol><li>手动传递的 Cookie(最高优先级)</li><li>全局 Cookie(如果启用)</li><li>无 Cookie</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> 不会。降级模式是向后兼容的,现有调用方式仍然有效。</p><h3 id="q-安全性如何" tabindex="-1">Q: 安全性如何? <a class="header-anchor" href="#q-安全性如何" aria-label="Permalink to Q: 安全性如何?”">​</a></h3><p><strong>A:</strong></p><ul><li>Cookie 只在内存中使用,不会记录日志</li><li>建议使用 HTTPS 传输</li><li>不要将 Cookie 提交到版本控制系统</li></ul><h2 id="最佳实践" tabindex="-1">最佳实践 <a class="header-anchor" href="#最佳实践" aria-label="Permalink to “最佳实践”">​</a></h2><ol><li><strong>开发环境</strong>:使用降级模式,方便调试</li><li><strong>生产环境</strong>:根据需求选择模式 <ul><li>公开服务:降级模式 + 用户自行传递 Cookie</li><li>内部服务:全局 Cookie 模式</li></ul></li><li><strong>临时使用</strong>:降级模式,扫码获取 Cookie 后手动传递</li><li><strong>长期使用</strong>:全局 Cookie 模式,配置一次即可</li></ol><h2 id="示例代码" tabindex="-1">示例代码 <a class="header-anchor" href="#示例代码" aria-label="Permalink to “示例代码”">​</a></h2><h3 id="node-js-示例" tabindex="-1">Node.js 示例 <a class="header-anchor" href="#node-js-示例" aria-label="Permalink to 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:#AB5959;--shiki-dark:#CB7676;">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> axios</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> =</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> require</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">axios</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span></span>
44
44
  <span class="line"></span>
45
45
  <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">// 方式 1: Query 参数</span></span>
46
46
  <span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">axios</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">get</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
@@ -55,7 +55,7 @@ import{_ as i,o as a,c as n,ag as e}from"./chunks/framework.aJbMEiY9.js";const c
55
55
  <span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> headers</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span></span>
56
56
  <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o123456789; qqmusic_key=xxx;</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
57
57
  <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
58
- <span class="line"><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 &quot;Python 示例&quot;">​</a></h3><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" tabindex="0"><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>
58
+ <span class="line"><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>
59
59
  <span class="line"></span>
60
60
  <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 方式 1: Query 参数</span></span>
61
61
  <span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">response </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> requests</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">get</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span></span>
@@ -72,4 +72,4 @@ import{_ as i,o as a,c as n,ag as e}from"./chunks/framework.aJbMEiY9.js";const c
72
72
  <span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> headers</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">={</span></span>
73
73
  <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">uin=o123456789; qqmusic_key=xxx;</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span>
74
74
  <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
75
- <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 &quot;相关文档&quot;">​</a></h2><ul><li><a href="/qq-music-api/guide/installation.html">安装指南</a></li><li><a href="/qq-music-api/guide/quickstart.html">快速开始</a></li><li><a href="/qq-music-api/guide/authentication.html">认证与登录</a></li><li><a href="/qq-music-api/api/user.html">用户接口</a></li></ul>`,62)])])}const g=i(l,[["render",t]]);export{c as __pageData,g as default};
75
+ <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><a href="/qq-music-api/guide/installation.html">安装指南</a></li><li><a href="/qq-music-api/guide/quickstart.html">快速开始</a></li><li><a href="/qq-music-api/guide/authentication.html">认证与登录</a></li><li><a href="/qq-music-api/api/user.html">用户接口</a></li></ul>`,62)])])}const c=i(e,[["render",h]]);export{g as __pageData,c as default};
@@ -0,0 +1 @@
1
+ import{c as i,S as a,j as n,m as l}from"./chunks/framework.BUY3a635.js";const g=JSON.parse('{"title":"降级服务使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"FALLBACK_MODE_GUIDE.md","filePath":"FALLBACK_MODE_GUIDE.md","lastUpdated":1779031768000}'),e={name:"FALLBACK_MODE_GUIDE.md"};function h(t,s,k,p,r,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",62)])])}const c=i(e,[["render",h]]);export{g as __pageData,c as default};
@@ -0,0 +1,36 @@
1
+ import{c as i,S as a,j as t,m as l}from"./chunks/framework.BUY3a635.js";const c=JSON.parse('{"title":"🎵 QQ Music API - 快速使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"QUICK_START.md","filePath":"QUICK_START.md","lastUpdated":1779031768000}'),e={name:"QUICK_START.md"};function h(n,s,k,p,o,r){return a(),t("div",null,[...s[0]||(s[0]=[l(`<h1 id="🎵-qq-music-api-快速使用指南" tabindex="-1">🎵 QQ Music API - 快速使用指南 <a class="header-anchor" href="#🎵-qq-music-api-快速使用指南" aria-label="Permalink to “🎵 QQ Music API - 快速使用指南”">​</a></h1><h2 id="✅-服务已启动" tabindex="-1">✅ 服务已启动 <a class="header-anchor" href="#✅-服务已启动" aria-label="Permalink to “✅ 服务已启动”">​</a></h2><p><strong>服务地址</strong>: <code>http://localhost:3200</code></p><p><strong>当前配置</strong>:</p><ul><li>✅ 降级模式:已启用</li><li>✅ 全局 Cookie:已配置</li><li>⚠️ Cookie 状态:可能已过期(需要更新)</li></ul><hr><h2 id="📖-接口测试" tabindex="-1">📖 接口测试 <a class="header-anchor" href="#📖-接口测试" aria-label="Permalink to “📖 接口测试”">​</a></h2><h3 id="_1-公开接口-无需-cookie-✅" tabindex="-1">1. 公开接口(无需 Cookie)✅ <a class="header-anchor" href="#_1-公开接口-无需-cookie-✅" aria-label="Permalink to “1. 公开接口(无需 Cookie)✅”">​</a></h3><p>这些接口可以直接使用,不需要任何配置:</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
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getRanks</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
3
+ <span class="line"></span>
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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getHotkey</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
6
+ <span class="line"></span>
7
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 搜索歌曲</span></span>
8
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getSearchByKey/周杰伦</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
9
+ <span class="line"></span>
10
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取歌单列表</span></span>
11
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getSongLists</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
12
+ <span class="line"></span>
13
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 获取歌词</span></span>
14
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getLyric?songmid=0039MnYb0qxYhV</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="_2-需要-cookie-的接口-⚠️" tabindex="-1">2. 需要 Cookie 的接口 ⚠️ <a class="header-anchor" href="#_2-需要-cookie-的接口-⚠️" aria-label="Permalink to “2. 需要 Cookie 的接口 ⚠️”">​</a></h3><p><strong>当前状态</strong>: 全局 Cookie 已配置,但可能已过期</p><p>如果接口返回错误,请更新 Cookie。</p><h4 id="方式-1-手动传递-cookie-推荐" tabindex="-1">方式 1: 手动传递 Cookie(推荐) <a class="header-anchor" href="#方式-1-手动传递-cookie-推荐" aria-label="Permalink to “方式 1: 手动传递 Cookie(推荐)”">​</a></h4><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;"># 从浏览器获取最新 Cookie 后:</span></span>
15
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=你的 QQ 号&amp;cookie=你的 Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
16
+ <span class="line"></span>
17
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 或通过 Header 传递</span></span>
18
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">X-Custom-Cookie: 你的 Cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
19
+ <span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=你的 QQ 号</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h4 id="方式-2-使用全局-cookie" tabindex="-1">方式 2: 使用全局 Cookie <a class="header-anchor" href="#方式-2-使用全局-cookie" aria-label="Permalink to “方式 2: 使用全局 Cookie”">​</a></h4><p>当前已启用,但如果 Cookie 过期需要更新。</p><hr><h2 id="🔄-如何获取最新-cookie" tabindex="-1">🔄 如何获取最新 Cookie <a class="header-anchor" href="#🔄-如何获取最新-cookie" aria-label="Permalink to “🔄 如何获取最新 Cookie”">​</a></h2><h3 id="方法-1-从浏览器获取-推荐" tabindex="-1">方法 1: 从浏览器获取(推荐) <a class="header-anchor" href="#方法-1-从浏览器获取-推荐" aria-label="Permalink to “方法 1: 从浏览器获取(推荐)”">​</a></h3><ol><li>访问 <a href="https://y.qq.com" target="_blank" rel="noreferrer">https://y.qq.com</a> 并登录</li><li>按 <code>F12</code> 打开开发者工具</li><li>点击 <strong>Network(网络)</strong> 标签</li><li>刷新页面(<code>F5</code>)</li><li>在左侧选择第一个请求(通常是 <code>y.qq.com</code>)</li><li>在右侧找到 <strong>Request Headers(请求标头)</strong></li><li>滚动找到 <strong>Cookie</strong> 字段</li><li>复制整个 Cookie 值(从 <code>uin=</code> 开始)</li></ol><h3 id="方法-2-使用扫码登录" tabindex="-1">方法 2: 使用扫码登录 <a class="header-anchor" href="#方法-2-使用扫码登录" aria-label="Permalink to “方法 2: 使用扫码登录”">​</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:#A0ADA0;--shiki-dark:#758575DD;"># 1. 获取二维码</span></span>
20
+ <span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">curl</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getQQLoginQr</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
21
+ <span class="line"></span>
22
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 2. 用手机 QQ 扫码后,检查登录状态</span></span>
23
+ <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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/checkQQLoginQr</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
24
+ <span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -H</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">Content-Type: application/json</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> \\</span></span>
25
+ <span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> -d</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &#39;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">{&quot;qrsig&quot;:&quot;xxx&quot;,&quot;ptqrtoken&quot;:&quot;xxx&quot;}</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&#39;</span></span></code></pre></div><h3 id="更新全局-cookie" tabindex="-1">更新全局 Cookie <a class="header-anchor" href="#更新全局-cookie" aria-label="Permalink to “更新全局 Cookie”">​</a></h3><ol><li>编辑 <code>config/user-info.json</code></li><li>填入新的 Cookie:</li></ol><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>
26
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">loginUin</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">你的 QQ 号</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span></span>
27
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookie</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">完整的 Cookie 字符串</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
28
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</span></span></code></pre></div><ol start="3"><li>重启服务</li></ol><hr><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><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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/user/getUserPlaylists?uin=1979432414</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getMusicPlay?songmid=0039MnYb0qxYhV</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><h3 id="获取每日推荐-需要-cookie" tabindex="-1">获取每日推荐(需要 Cookie) <a class="header-anchor" href="#获取每日推荐-需要-cookie" aria-label="Permalink to “获取每日推荐(需要 Cookie)”">​</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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getDailyRecommend</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</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;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">http://localhost:3200/getSimilarSongs?songmid=0039MnYb0qxYhV</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span></code></pre></div><hr><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>编辑 <code>config/service-config.json</code>:</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>
29
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">fallbackMode</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 是否启用降级模式</span></span>
30
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">useGlobalCookie</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;"> true</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // 是否使用全局 Cookie</span></span>
31
+ <span class="line"><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;"> &quot;</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cookieParamName</span><span style="--shiki-light:#99841877;--shiki-dark:#B8A96577;">&quot;</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">cookie</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"> // Query 参数名</span></span>
32
+ <span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">}</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:#A0ADA0;--shiki-dark:#758575DD;"># 启用降级模式</span></span>
33
+ <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> FALLBACK_MODE</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">true</span></span>
34
+ <span class="line"></span>
35
+ <span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 启用全局 Cookie</span></span>
36
+ <span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">export</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> USE_GLOBAL_COOKIE</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;">true</span></span></code></pre></div><hr><h2 id="📊-接口状态" tabindex="-1">📊 接口状态 <a class="header-anchor" href="#📊-接口状态" aria-label="Permalink to “📊 接口状态”">​</a></h2><table tabindex="0"><thead><tr><th>接口</th><th>状态</th><th>说明</th></tr></thead><tbody><tr><td><code>/getRanks</code></td><td>✅</td><td>排行榜 - 无需 Cookie</td></tr><tr><td><code>/getHotkey</code></td><td>✅</td><td>热门搜索 - 无需 Cookie</td></tr><tr><td><code>/getSearchByKey</code></td><td>✅</td><td>搜索 - 无需 Cookie</td></tr><tr><td><code>/getMusicPlay</code></td><td>⚠️</td><td>播放 - 需要有效 Cookie</td></tr><tr><td><code>/user/getUserPlaylists</code></td><td>⚠️</td><td>用户歌单 - 需要有效 Cookie</td></tr><tr><td><code>/getDailyRecommend</code></td><td>⚠️</td><td>每日推荐 - 需要有效 Cookie</td></tr></tbody></table><hr><h2 id="🐛-常见问题" tabindex="-1">🐛 常见问题 <a class="header-anchor" href="#🐛-常见问题" aria-label="Permalink to “🐛 常见问题”">​</a></h2><h3 id="q-为什么返回-获取用户歌单失败" tabindex="-1">Q: 为什么返回 &quot;获取用户歌单失败&quot;? <a class="header-anchor" href="#q-为什么返回-获取用户歌单失败" aria-label="Permalink to “Q: 为什么返回 &quot;获取用户歌单失败&quot;?”">​</a></h3><p><strong>A</strong>: Cookie 可能已过期,请重新获取最新 Cookie。</p><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>Cookie 可能过期</li><li>歌曲可能需要 VIP 权限</li><li>尝试更换其他歌曲测试</li></ol><h3 id="q-如何切换回全局-cookie-模式" tabindex="-1">Q: 如何切换回全局 Cookie 模式? <a class="header-anchor" href="#q-如何切换回全局-cookie-模式" aria-label="Permalink to “Q: 如何切换回全局 Cookie 模式?”">​</a></h3><p><strong>A</strong>: 修改 <code>config/service-config.json</code>,设置 <code>useGlobalCookie: true</code></p><hr><h2 id="📚-更多文档" tabindex="-1">📚 更多文档 <a class="header-anchor" href="#📚-更多文档" aria-label="Permalink to “📚 更多文档”">​</a></h2><ul><li><a href="./FALLBACK_MODE_GUIDE.html">降级模式使用指南</a></li><li><a href="./guide/authentication.html">认证与登录</a></li><li>测试报告:<code>tests/DEGRADE_TEST.md</code></li><li><a href="./DEGRADE_EXAMPLES.html">使用示例</a></li></ul><hr><h2 id="🎉-总结" tabindex="-1">🎉 总结 <a class="header-anchor" href="#🎉-总结" aria-label="Permalink to “🎉 总结”">​</a></h2><p>✅ <strong>服务已正常运行</strong></p><ul><li>公开接口可直接使用</li><li>支持手动传递 Cookie</li><li>支持全局 Cookie 配置</li><li>降级模式已启用</li></ul><p>⚠️ <strong>注意事项</strong></p><ul><li>部分接口需要最新有效的 Cookie</li><li>Cookie 会过期,需定期更新</li><li>某些歌曲可能需要 VIP 权限</li></ul><p><strong>服务地址</strong>: <code>http://localhost:3200</code></p>`,66)])])}const g=i(e,[["render",h]]);export{c as __pageData,g as default};
@@ -0,0 +1 @@
1
+ import{c as i,S as a,j as t,m as l}from"./chunks/framework.BUY3a635.js";const c=JSON.parse('{"title":"🎵 QQ Music API - 快速使用指南","description":"","frontmatter":{},"headers":[],"relativePath":"QUICK_START.md","filePath":"QUICK_START.md","lastUpdated":1779031768000}'),e={name:"QUICK_START.md"};function h(n,s,k,p,o,r){return a(),t("div",null,[...s[0]||(s[0]=[l("",66)])])}const g=i(e,[["render",h]]);export{c as __pageData,g as default};