UnblockNeteaseMusic/server-rust

FOSSA Status

Rust 版本的 UnblockNeteaseMusic/server,以效能、穩定性及可維護性為目標。

目前使用者文件及開發文件 仍在撰寫,在此之前有任何問題,歡迎開 Discussion 詢問。

架構

註:目前 UnblockNeteaseMusic/server 只實作 engine/resolver 的部分。

使用

Rust 函式庫

可以參考 engine-demo 的用法~

首先,您需要從 https://crates.io 引用至少三個元件:

然後,我們可以註冊音源:

```rust use unmengine::executor::Executor; use unmenginebilibili::{BilibiliEngine, ENGINEID as BILIBILIENGINEID};

let mut executor = Executor::new(); executor.register(BILIBILIENGINEID, BilibiliEngine::new());

// 您也可以直接使用官方預設的引擎集,免去手動註冊的麻煩。 // 首先得引入 unm_api_utils,然後就可以:

use unmapiutils::executor::buildfullexecutor; let executor = buildfullexecutor(); ```

接著就可以直接使用 executor 提供的方法搜尋及取回結果了:

```rust use unm_types::{Song, Artist, Context};

let context = Context::default();

let searchresult = executor.search(&[BILIBILIENGINEID], Song { id: "".tostring(), name: "TT", artists: vec![ Artist { id: "".to_string(), name: "Twice", }, ], }, &context).await?;

let result = executor.retrieve(&search_result, &context).await?; ```

TypeScript (JS) 函式庫

請參考 napi 的 README.md

RESTful API

請參考 UNM REST API 的 README.md

設定

支援的所有引擎

N-API 和 RESTful API 支援的引擎(以下簡稱「預設引擎集」)與我們上架到 https://crates.io 的引擎略有差異。

| 名稱 | 引擎 ID | 注意事項 | 預設引擎集 | | ---------------- | ---------- | --------------------------------------------------------------- | ---------- | | Bilbili Music | bilibili | | ✅ | | 酷狗音乐 | kugou | | ✅ | | 酷我音乐 | kuwo | 目前僅支援 320kbps MP3 | ✅ | | 咪咕音乐 | migu | | ✅ | | JOOX | joox | 需要設定 joox:cookie,見引擎文件。 | ✅ | | YtDl | ytdl | 預設使用的 youtube-dl 後端是 yt-dlp,可設定 ytdl:exe 調整 | ✅ | | 第三方網易雲 API | pyncm | | ✅ | | QQ音乐 | qq | 需要設定 qq:cookie,見引擎文件。 | ✅ |

引擎文件

設定全域通用設定(Context

全域通用設定(Context)包含以下這些設定:

假如您使用 Rust 版,您可以使用 ContextBuilder 建構 Context:

```rs use unm_types::{ContextBuilder, SearchMode};

let context = ContextBuilder::default() .proxyuri("https://www.google.com") .searchmode(SearchMode::OrderFirst) .build(); ```

如果是使用 JavaScript 版,您可以根據 UNM 的類型定義(VS Code 會提供補全建議) 建構 Object 即可:

```js const UNM = require("@unblockneteasemusic/rust-napi");

// TS 的語法是 const context: UNM.Context = {} /** @type {UNM.Context} */ const context = { proxyUri: "https://www.google.com", searchMode: UNM.SearchMode.OrderFirst, }; ```

設定引擎特定設定(Config

「引擎特定設定」是每個引擎針對自己的需要,從 Config 取得需要的設定。 設定方法請見 engines/README.md

貢獻

檢查程式碼的相關命令

bash cargo check # 檢查程式碼是否合法 (valid) cargo test # 執行本 codebase 的所有 Tests cargo clippy # Rust linter

UNM (Rust) 的 CI 也會在程式碼 push 後自動執行上述命令, 進行程式碼測試與檢查。

貢獻引擎後的建議事項

引擎的 crate 名稱格式是:unm_engine_[引擎名稱],放置在 /engines/[引擎名稱] 目錄。

建議仿照其它引擎,在 engine-demonapi 註冊自己的音源。 註冊音源有 macro 協助,語法目前是這樣的:

rust push_engine!([引擎名稱]: [引擎實體]);

範例如下:

rust push_engine!(bilibili: BilibiliEngine);

授權條款

This project is licensed under LGPL-3.0-only.

FOSSA Status