124 lines
5.9 KiB
Markdown
124 lines
5.9 KiB
Markdown
# Koneko QZ Music v2/v3 鎻掍欢寮€鍙戦伩鍧戞寚鍗?
|
|
> 鐗堟湰: 0.0.1 | 浣滆€? 浜戞眬(Miao-moe) | 鐩爣: 鏀寔杩佺Щ鍒板叾浠?AI 缁х画寮€鍙?
|
|
---
|
|
|
|
## 涓€銆侀」鐩儗鏅?
|
|
QZ Music v2/v3 鏄竴娆?Android/PC 闊充箰鎾斁鍣紝鏀寔閫氳繃**鎷撳睍鎻掍欢**鎺ュ叆澶氬钩鍙伴煶婧愩€傛彃浠剁郴缁熷熀浜?Node.js 杩愯鏃讹紙Javet/V8锛夛紝姣忎釜鎻掍欢鏄竴涓崟鐙殑 `.js` 鏂囦欢锛岄€氳繃 `module.exports` 瀵煎嚭鎺ュ彛銆?
|
|
### 鎻掍欢鍔犺浇鏈哄埗
|
|
|
|
- 杩愯鏃剁幆澧冨彉閲忛€氳繃 `global.env` 璁块棶锛?*涓嶆槸** `process.env`
|
|
- 鎻掍欢涓哄崟 `.js` 鏂囦欢鏍煎紡
|
|
|
|
## 浜屻€丣avet/V8 鍏煎鎬уぇ鍧戯紙鏈€閲嶈锛?
|
|
QZ Music 浣跨敤 Javet 浣滀负 JS 杩愯鏃讹紙鍩轰簬 V8锛夛紝**涓嶆敮鎸佺幇浠?ES 璇硶**锛?
|
|
| 璇硶 | 鐘舵€?| 姝g‘鍐欐硶 |
|
|
|------|------|---------|
|
|
| `let` / `const` | 鉂?| `var` |
|
|
| 绠ご鍑芥暟 `() => {}` | 鉂?| `function() {}` |
|
|
| `async` / `await` | 鉂?| `Promise` 閾惧紡 |
|
|
| `catch { }`锛堟棤鍙傛暟锛墊 鉂?| `catch (e) { }` |
|
|
| `Promise.allSettled` | 鉂?| `Promise.all` + 鎵嬪姩鍖呰 |
|
|
| `Object.entries` / `Object.values` | 鉂?| `for...in` 閬嶅巻 |
|
|
| `Array.prototype.includes` | 鉂?| `indexOf(...) !== -1` |
|
|
| `String.prototype.startsWith` | 鉂?| `indexOf(...) === 0` |
|
|
| `class` | 鉂?| 瀵硅薄瀛楅潰閲?|
|
|
| 妯℃澘瀛楃涓?`${}` | 鉁?| 鍙敤 |
|
|
| `Buffer` | 鉁?| Node.js 鍐呯疆 |
|
|
|
|
### Promise.allSettled 鏇夸唬鏂规
|
|
|
|
```js
|
|
Promise.all(promises.map(function(p) {
|
|
return p.then(function(v) {
|
|
return { status: 'fulfilled', value: v }
|
|
}).catch(function(e) {
|
|
return { status: 'rejected', reason: e }
|
|
})
|
|
})).then(function(results) {
|
|
for (var i = 0; i < results.length; i++) {
|
|
if (results[i].status === 'fulfilled') return results[i].value
|
|
}
|
|
throw new Error('all failed')
|
|
})
|
|
```
|
|
|
|
## 涓夈€佹悳绱㈢粨鏋滄牸寮?
|
|
App 鐨?`MusicListResponse` 瑕佹眰**蹇呴』鏈?`list` 瀛楁**锛屼笉鏄?`songs`锛?
|
|
```js
|
|
// 鉁?姝g‘
|
|
return { list: [...], allPage: N, limit: N, total: N, source: 'tx' }
|
|
|
|
// 鉂?閿欒
|
|
return { songs: [...], total: N }
|
|
```
|
|
|
|
### 瀛楁鍚嶅鐓?
|
|
| 鍚箟 | 姝g‘瀛楁 | 閿欒瀛楁 |
|
|
|------|---------|---------|
|
|
| 姝屾墜 | `artists` | `artist` |
|
|
| 灏侀潰鍥?| `pic`/`mPic`/`sPic` | `picUrl` |
|
|
| 鏃堕暱 | `interval` (m:ss) | `duration` |
|
|
| 鍒楄〃 | `list` | `songs` |
|
|
|
|
## 鍥涖€佸悇骞冲彴韪╁潙鐐?
|
|
### QQ闊充箰 (tx)
|
|
- 鎼滅储绛惧悕锛歚zzcSign` = SHA1 + 绱㈠紩鎻愬彇 + XOR + base64
|
|
- 灏侀潰鍥撅細鏈変笓杈慖D鐢?T002锛屾棤涓撹緫ID鐢?T001
|
|
- getUrl 闊宠川鍙傛暟锛氬甫 `k` (128k/320k/999k)
|
|
|
|
### 閰风嫍闊充箰 (kg)
|
|
- 鎼滅储杩斿洖鍊煎瓧娈垫槸 `errcode`锛堜笉鏄?`error_code`锛?- 灏侀潰鍥撅細鏇挎崲 `{size}` 涓?`400`
|
|
|
|
### 閰锋垜闊充箰 (kw)
|
|
- 闊宠川淇℃伅鍦?`N_MINFO` 瀛楁瑙f瀽
|
|
- 灏侀潰鍥撅細`https://img2.kuwo.cn/star/albumcover/300/{ALBUMID}.jpg`
|
|
|
|
### 缃戞槗浜戦煶涔?(wy)
|
|
- 鎼滅储鐢?GET锛歚/api/search/get/web`锛屼笉闇€瑕?weapi
|
|
- 灏侀潰鍥撅細`picId` 闇€ Base64 缂栫爜
|
|
- getUrl 闊宠川鍙傛暟锛氭暟瀛楁牸寮?`128000`/`320000`/`999000`
|
|
- Cookie 鐢ㄤ簬 weapi 鍔犲瘑鎺ュ彛锛堟瘡鏃ユ帹鑽愩€佺浜篎M銆佸枩娆㈡瓕鏇层€佹瓕鍗曘€佷笓杈戙€佹瓕璇嶏級
|
|
|
|
### 鍜挄闊充箰 (mg)
|
|
- 鎼滅储闇€ MD5 绛惧悕
|
|
- 灏侀潰鍥撅細鐩稿璺緞闇€鎷兼帴 `https://d.musicapp.migu.cn`
|
|
|
|
### GIT闊虫簮 (git)
|
|
- 鏃犳悳绱紝绾煶婧?- getUrl 闊宠川鍙傛暟锛歚128k`/`320k`/`999k`
|
|
|
|
## 浜斻€乬etUrl 瀹圭伨閫昏緫
|
|
|
|
鎵€鏈夊钩鍙颁娇鐢?*骞跺彂娴嬮€?*妯″紡锛氬悓鏃惰姹傚涓?API锛屽彇绗竴涓垚鍔熺粨鏋溿€?
|
|
API 璋冪敤椤哄簭锛?1. 鑱嗘緶锛堥渶 `ceru_key` 鐜鍙橀噺锛?2. HUIBQ (lxmusicapi)
|
|
3. 鏄熸捣 / 蹇嗛煶 / 蹇靛績 / 闀块潚 / 鏄熸捣澶?/ fish / HYW
|
|
|
|
缃戞槗浜戦澶栨湁锛?4. bb / lx / ymc / unms / 瀹樻柟 weapi
|
|
|
|
## 鍏€佺幆澧冨彉閲忚鏄?
|
|
| key | 鐢ㄩ€?| 閫傜敤骞冲彴 | 蹇呭~ |
|
|
|-----|------|---------|------|
|
|
| `ceru_key` | 鑱嗘緶闊虫簮 API 瀵嗛挜 | 鍏ㄩ儴 | 鍚?|
|
|
| `playlist_url` | 缃戞槗浜戜釜浜轰富椤甸摼鎺?| 缃戞槗浜?| 鍚?|
|
|
| `cookie` | 缃戞槗浜?Cookie | 缃戞槗浜?| 鍚?|
|
|
|
|
## 涓冦€佺増鏈鐞?
|
|
- 鎵€鏈夊钩鍙扮粺涓€鐗堟湰鍙?- 褰撳墠鐗堟湰锛?*0.0.1**
|
|
- 鏂囦欢鍚嶆牸寮忥細`Koneko_{骞冲彴鍚峿_v{鐗堟湰鍙穧.js`
|
|
|
|
## 鍏€佸父瑙佹姤閿?
|
|
| 鎶ラ敊 | 鍘熷洜 | 瑙e喅 |
|
|
|------|------|------|
|
|
| `Cannot find module 'axios'` | 鐢ㄤ簡 axios | 鏀圭敤 `http`/`https` 鍐呯疆妯″潡 |
|
|
| `Field 'list' is required` | 鎼滅储杩斿洖 `songs` 鑰岄潪 `list` | 鏀瑰瓧娈靛悕涓?`list` |
|
|
| `SyntaxError: Invalid or unexpected token` | 鐢ㄤ簡 `catch { }` | 鏀逛负 `catch (e) { }` |
|
|
| 鎼滅储鏃犵粨鏋?| 瀛楁鍚嶄笉鍖归厤 | 妫€鏌?`errcode` vs `error_code` |
|
|
| 鎾斁澶辫触 | `mapBr` 杩斿洖鏍煎紡涓嶅 | QQ/kg/kw/mg/git 鐢?`320k`锛寃y 鐢?`320000` |
|
|
| 灏侀潰鍥句笉鏄剧ず | URL 鏍煎紡閿欒鎴栬法鍩?| 妫€鏌ュ悇骞冲彴灏侀潰鍥炬嫾鎺ヨ鍒?|
|
|
|
|
## 涔濄€佸悗缁紑鍙戝缓璁?
|
|
1. 姣忔淇敼鍏ㄩ儴骞冲彴缁熶竴鍗囩骇鐗堟湰鍙?2. 鍏堝湪娴忚鍣?curl 娴嬭瘯 API 鏄惁鍙敤
|
|
3. 娉ㄦ剰 Javet 鍏煎鎬э紝閬垮厤鐜颁唬 JS 璇硶
|
|
4. 鎼滅储杩斿洖鍔″繀鍖呭惈 `list` 瀛楁
|
|
5. getUrl 娉ㄦ剰鍚勫钩鍙伴煶璐ㄥ弬鏁版牸寮忓樊寮?6. 鎵€鏈夊紓姝ユ搷浣滃姞 `.catch()` 鍏滃簳
|
|
7. 浼樺厛浣跨敤瀹樻柟鎼滅储鎺ュ彛锛岄煶婧愮敤绗笁鏂?API 瀹圭伨
|