Files
Koneko_api_for_QZ-Music/Koneko插件开发避坑指南_v0.0.1.md

5.9 KiB

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 鏇夸唬鏂规

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锛?

// 鉁?姝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 鏄惁鍙敤
  2. 娉ㄦ剰 Javet 鍏煎鎬э紝閬垮厤鐜颁唬 JS 璇硶
  3. 鎼滅储杩斿洖鍔″繀鍖呭惈 list 瀛楁
  4. getUrl 娉ㄦ剰鍚勫钩鍙伴煶璐ㄥ弬鏁版牸寮忓樊寮?6. 鎵€鏈夊紓姝ユ搷浣滃姞 .catch() 鍏滃簳
  5. 浼樺厛浣跨敤瀹樻柟鎼滅储鎺ュ彛锛岄煶婧愮敤绗笁鏂?API 瀹圭伨