#unblock-netease-music #engine #executor #traits #base #unblock-netease-music-server #版本的

unm_engine

UnblockNeteaseMusic 的引擎基础,包括执行器和 Engine 特性

6 个版本

0.4.0 2023年1月22日
0.3.0 2022年5月24日
0.3.0-pre.02022年4月24日
0.2.0-pre.42022年4月15日
0.2.0-pre.22022年4月14日

音频 中排名第 180

Download history 36/week @ 2024-03-14 28/week @ 2024-03-21 42/week @ 2024-03-28 30/week @ 2024-04-04 27/week @ 2024-04-11 36/week @ 2024-04-18 29/week @ 2024-04-25 25/week @ 2024-05-02 26/week @ 2024-05-09 23/week @ 2024-05-16 22/week @ 2024-05-23 31/week @ 2024-05-30 17/week @ 2024-06-06 22/week @ 2024-06-13 29/week @ 2024-06-20 11/week @ 2024-06-27

每月下载量 85
10 个包 中使用

LGPL-3.0-or-later

39KB
451

UnblockNeteaseMusic/服务器-rust

FOSSA Status

Rust 版本的 UnblockNeteaseMusic/server,以性能、稳定性和可维护性为目标。

目前用户文档和开发文档 仍在撰写中,在此期间有任何问题,欢迎在 Discussion 中提问。

⚠️ 免责声明 Disclaimer

  • 本库仅用于 个人学习和研究 Rust 网络服务,并未用于商业用途。
  • 除授权条款列载的事项外,您亦已知将此库用于商业或其他竞争行为上,可能存在法律风险
  • 如果您认为本库侵犯您的知识产权,请发送 PR、Issue 或 DMCA 请求,表达您希望移除相关引擎或代码的意愿

架构

注:目前 UnblockNeteaseMusic/server 仅实现了 engine/resolver 的部分。

  • crypto:与加密相关的函数库,如 md5、aes128 等。
  • engine-base:Engine 的抽象部分,包含一个 Engine 应有的接口、整合所有 Engines 的 Executor 等。
  • engines
    • 此目录下是官方提供的引擎,所有引擎都是可选依赖、可使用的。
    • 您可以自行实现其他平台,并发布到 crates.io(当然也欢迎发送 PR 将引擎纳入本代码库统一管理)。
    • 每个 Engine 都有 examples 方便测试单个引擎模块。如果您是开发者,可模仿其他引擎,编写自己的 example。
  • api-utils:用于开发 UNM 的实用工具。
  • request:UNM 的 reqwest 封装,自动带上 User-Agent 等头。
  • selector:包含选择最佳音乐项目的算法。
  • types:UNM 的各种基础类型(如 SongArtist⋯⋯)
  • test-utils:方便编写测试方法和 demo 的工具集。
  • napi:Node.js 的 UNM (Rust) 绑定。
    • 这个绑定由于 napi 的限制,目前不像 Rust 版本一样有方便的扩展系统。
    • 原则上启用 engines/ 目录下的所有引擎。
  • rest-api:UNM 的 RESTful API
    • 由于安全考虑,目前不考虑为 RESTful API 提供不修改代码的扩展方案。
    • 原则上启用 engines/ 目录下的所有引擎。
  • demo:用于测试和展示 UNM (Rust) 的 demo 程序。
    • 启动 Demo:cargo run --release --bin unm_engine_demo

使用

Rust 函数库

可以参考 engine-demo 的用法~

首先,您需要从 https://crates.io 引用至少三个组件:

  • unm_engine:包含并行查询音源结果的 Executor。
  • unm_engine_[想要的引擎]:用于从音源搜索的引擎。
  • unm_types:UNM 的基本类型。编写函数时非常需要。

然后,我们可以注册音源:

use unm_engine::executor::Executor;
use unm_engine_bilibili::{BilibiliEngine, ENGINE_ID as BILIBILI_ENGINE_ID};

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

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

use unm_api_utils::executor::build_full_executor;
let executor = build_full_executor();

接着就可以直接使用 executor 提供的方法搜索及取回结果了:

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

let context = Context::default();

let search_result = executor.search(&[BILIBILI_ENGINE_ID], Song {
  id: "".to_string(),
  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 注意事项 默认引擎集
哔哩哔哩音乐 bilibili
酷狗音乐 kugou
酷我音乐 kuwo 目前仅支持 320kbps MP3
咪咕音乐 migu
JOOX joox 需要设置 joox:cookie,见引擎文件。
YtDl ytdl 默认使用的 youtube-dl 后端是 yt-dlp,可设置 ytdl:exe 调整
第三方网易云 API pyncm
QQ音乐 qq 需要设置 qq:cookie,见引擎文件。
  • migu 的 API 坏掉了。等到有更好的 API 会再更新。

引擎文件

设置全局通用设置(Context

全局通用设置(Context)包含以下这些设置:

  • proxy_uri:要在引擎使用的 Proxy 服务器。可选。
  • enable_flac:是否抓取 FLAC 音频?默认值是 false
  • search_mode:搜索模式
  • config:各引擎设置,见下〈设置引擎特定设置(Config)〉

如果您使用 Rust 版,您可以使用 ContextBuilder 构建 Context:

use unm_types::{ContextBuilder, SearchMode};

let context = ContextBuilder::default()
  .proxy_uri("https://www.google.com")
  .search_mode(SearchMode::OrderFirst)
  .build();

如果是使用 JavaScript 版,您可以根据 UNM 的类型定义(VS Code 会提供补全建议) 构建 Object 即可:

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

贡献

检查程序的相关命令

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

UNM (Rust) 的 CI 也会在程序 push 后自动执行上述命令,进行程序测试与检查。

贡献引擎后的建议事项

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

建议仿照其他引擎,在 engine-demonapi 注册自己的音源。注册音源有 macro 协助,语法目前是这样的:

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

示例如下:

push_engine!(bilibili: BilibiliEngine);

授权条款

本项目采用 LGPL-3.0-only 授权。

FOSSA Status

依赖项

~4–21MB
~302K SLoC