Skip to main content

ncm_api_rs/util/
config.rs

1/// 配置常量 - 对应 Node.js 版本的 util/config.json
2use std::collections::HashMap;
3use std::sync::LazyLock;
4
5pub const API_DOMAIN: &str = "https://interface.music.163.com";
6pub const DOMAIN: &str = "https://music.163.com";
7pub const ENCRYPT: bool = true;
8pub const ENCRYPT_RESPONSE: bool = false;
9pub const CLIENT_SIGN: &str = "18:C0:4D:B9:8F:FE@@@453832335F384641365F424635335F303030315F303031425F343434415F343643365F333638332@@@@@@6ff673ef74955b38bce2fa8562d95c976ed4758b1227c4e9ee345987cee17bc9";
10pub const CHECK_TOKEN: &str = "9ca17ae2e6ffcda170e2e6ee8af14fbabdb988f225b3868eb2c15a879b9a83d274a790ac8ff54a97b889d5d42af0feaec3b92af58cff99c470a7eafd88f75e839a9ea7c14e909da883e83fb692a3abdb6b92adee9e";
11
12/// 资源类型映射表
13pub static RESOURCE_TYPE_MAP: LazyLock<HashMap<&str, &str>> = LazyLock::new(|| {
14    let mut m = HashMap::new();
15    m.insert("0", "R_SO_4_");
16    m.insert("1", "R_MV_5_");
17    m.insert("2", "A_PL_0_");
18    m.insert("3", "R_AL_3_");
19    m.insert("4", "A_DJ_1_");
20    m.insert("5", "R_VI_62_");
21    m.insert("6", "A_EV_2_");
22    m.insert("7", "A_DR_14_");
23    m
24});
25
26/// OS 配置
27#[derive(Debug, Clone)]
28pub struct OsConfig {
29    pub os: &'static str,
30    pub appver: &'static str,
31    pub osver: &'static str,
32    pub channel: &'static str,
33}
34
35pub const OS_PC: OsConfig = OsConfig {
36    os: "pc",
37    appver: "3.1.17.204416",
38    osver: "Microsoft-Windows-10-Professional-build-19045-64bit",
39    channel: "netease",
40};
41
42pub const OS_LINUX: OsConfig = OsConfig {
43    os: "linux",
44    appver: "1.2.1.0428",
45    osver: "Deepin 20.9",
46    channel: "netease",
47};
48
49pub const OS_ANDROID: OsConfig = OsConfig {
50    os: "android",
51    appver: "8.20.20.231215173437",
52    osver: "14",
53    channel: "xiaomi",
54};
55
56pub const OS_IPHONE: OsConfig = OsConfig {
57    os: "iPhone OS",
58    appver: "9.0.90",
59    osver: "16.2",
60    channel: "distribution",
61};
62
63pub fn get_os_config(os_name: &str) -> &'static OsConfig {
64    match os_name {
65        "linux" => &OS_LINUX,
66        "android" => &OS_ANDROID,
67        "iphone" => &OS_IPHONE,
68        _ => &OS_PC,
69    }
70}
71
72/// User-Agent 选择
73pub fn choose_user_agent(crypto: &str, ua_type: &str) -> &'static str {
74    match (crypto, ua_type) {
75        ("weapi", _) => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
76        ("linuxapi", _) => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36",
77        ("api" | "eapi", "android") => "NeteaseMusic/9.1.65.240927161425(9001065);Dalvik/2.1.0 (Linux; U; Android 14; 23013RK75C Build/UKQ1.230804.001)",
78        ("api" | "eapi", "iphone") => "NeteaseMusic 9.0.90/5038 (iPhone; iOS 16.2; zh_CN)",
79        ("api" | "eapi", _) => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36 Chrome/91.0.4472.164 NeteaseMusicDesktop/3.0.18.203152",
80        _ => "",
81    }
82}