{"id":15039410,"url":"https://github.com/unblockneteasemusic/server","last_synced_at":"2025-05-14T22:02:42.945Z","repository":{"id":37342239,"uuid":"217212020","full_name":"UnblockNeteaseMusic/server","owner":"UnblockNeteaseMusic","description":"Revive unavailable songs for Netease Cloud Music (Refactored \u0026 Enhanced version)","archived":false,"fork":false,"pushed_at":"2025-04-28T19:31:58.000Z","size":17909,"stargazers_count":6915,"open_issues_count":45,"forks_count":669,"subscribers_count":32,"default_branch":"enhanced","last_synced_at":"2025-04-30T15:12:02.910Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UnblockNeteaseMusic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-24T04:34:45.000Z","updated_at":"2025-04-30T07:51:01.000Z","dependencies_parsed_at":"2024-01-13T18:00:43.133Z","dependency_job_id":"2fa45f42-f252-4271-8f60-f710eb18c902","html_url":"https://github.com/UnblockNeteaseMusic/server","commit_stats":{"total_commits":1286,"total_committers":49,"mean_commits":"26.244897959183675","dds":0.7068429237947123,"last_synced_commit":"b6ed5790037716282dd0b1b956c11614e4426ebe"},"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UnblockNeteaseMusic%2Fserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UnblockNeteaseMusic%2Fserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UnblockNeteaseMusic%2Fserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UnblockNeteaseMusic%2Fserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UnblockNeteaseMusic","download_url":"https://codeload.github.com/UnblockNeteaseMusic/server/tar.gz/refs/heads/enhanced","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252840406,"owners_count":21812301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-09-24T20:42:43.553Z","updated_at":"2025-05-07T08:24:19.724Z","avatar_url":"https://github.com/UnblockNeteaseMusic.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- Thanks to https://zhconvert.org's Chinese (China) converter ! --\u003e\n\n\u003cimg src=\"https://user-images.githubusercontent.com/26399680/47980314-0e3f1700-e102-11e8-8857-e3436ecc8beb.png\" alt=\"logo\" width=\"140\" height=\"140\" align=\"right\"\u003e\n\n# UnblockNeteaseMusic\n\n解锁网易云音乐客户端变灰歌曲\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fserver.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fserver?ref=badge_shield)\n\n## 特性\n\n- 支援多个音源，替换变灰歌曲链接\n    - 支援的完整音源清单可以见下方〈音源清单〉处。\n- 为请求增加 `X-Real-IP` 参数解锁海外限制，支持指定网易云服务器 IP，支持设置上游 HTTP / HTTPS 代理\n- 完整的流量代理功能 (HTTP / HTTPS)，可直接作为系统代理 (同时支持 PAC)\n\n## 运行\n\n### 直接打开可运行文件\n\n去右侧的 Releases 找到最新版本，然后在下方的 Assets 找到符合你系统架构的可运行文件。下载回来后点两下即可使用。\n\n\u003e macOS 因为签名问题，暂时不提供可运行文件。请先按照其他做法使用。\n\n### NPM 安装\n\n#### 安装成依赖\n\n```bash\nnpm install @unblockneteasemusic/server\nyarn add @unblockneteasemusic/server # for Yarn users\n```\n\n#### 用 NPX 运行\n\n```bash\nnpx -p @unblockneteasemusic/server unblockneteasemusic\n```\n\n### 注册成 Windows 服务\n\n#### 安装服务\n\n直接 `clone` 或下载本项目，在项目根目录运行 `node ./nw.js`。会有弹窗，直接确定即可。如果有安全管家等软件可能会阻止，直接允许即可。运行成功后可在电脑服务中看到该服务。\n\n#### 配置\n\nhttp 代理使用 `127.0.0.1`，端口默认使用 `8080`。\n\n如果想要添加启动参数和环境变量，请在项目根目录中的 `nw.js` 中配置 `scriptOptions` 和 `env`。\n\n\u003e 如果想要卸载已安装的服务，请再次运行 `node ./nw.js`。\n\u003e\n\u003e 安装服务后，会在项目根目录生成 `daemon` 文件夹。可在这里查看日志。\n\n### Docker 作法\n\n#### Docker Hub\n\n见 [pan93412/unblock-netease-music-enhanced](https://hub.docker.com/repository/docker/pan93412/unblock-netease-music-enhanced)\n。`latest` 是从 `enhanced` 组建的最新版本；`release` 是最新 tag 的版本。\n\n直接运行 `pan93412/unblock-netease-music-enhanced` 的命令如下：\n\n```bash\ndocker run pan93412/unblock-netease-music-enhanced\n```\n\n若要更新 UnblockNeteaseMusic，请运行以下命令后重新 `run`：\n\n```\ndocker pull pan93412/unblock-netease-music-enhanced\n```\n\n若要指定环境变量，您可以往 `docker run` 传入 `-e`，就像这样：\n\n```bash\ndocker run -e JSON_LOG=true -e LOG_LEVEL=debug pan93412/unblock-netease-music-enhanced\n```\n\n若要传入配置参数，只要在 `docker run` 的 image 之后传入参数即可：\n\n```bash\ndocker run pan93412/unblock-netease-music-enhanced -o bilibili -p 1234\n```\n\n#### 自行编译\n\n```bash\ngit clone https://github.com/UnblockNeteaseMusic/server.git UnblockNeteaseMusic\ncd UnblockNeteaseMusic\ndocker-compose up\n```\n\n### 直接使用 Repo 最新版本\n\n```bash\ngit clone https://github.com/UnblockNeteaseMusic/server.git UnblockNeteaseMusic\ncd UnblockNeteaseMusic\nnode app.js # 建议使用 screen / tmux 把 app.js 挂后台\n```\n\n更新：\n\n```\ngit pull\n```\n\n#### 编译最新的 package\n\n```bash\nyarn\nyarn build\nnode app.js # 即可使用 repo 的最新开发内容\n```\n\n#### 采用（而不编译）最新的 package\n\n```bash\nyarn\nDEVELOPMENT=true yarn node app.js\n```\n\n### BetterNCM 一键安装器\n\n请移步至 [RevivedUnblockInstaller](https://github.com/ReviveUnblockNCMInstaller/RevivedUnblockInstaller)。\n\n### Android Xposed 模块\n\n请移步至 [杜比大喇叭 β 版](https://github.com/nining377/dolby_beta)。\n\n### OpenWrt LuCI 插件\n\n请移步至 [luci-app-unblockneteasemusic](https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic)。\n\n### 配置参数\n\n```bash\n$ unblockneteasemusic -h\nusage: unblockneteasemusic [-v] [-p http[:https]] [-a address] [-u url] [-f host]\n                           [-o source [source ...]] [-t token] [-e url] [-s]\n                           [-h]\n\noptional arguments:\n  -v, --version                   output the version number\n  -p port, --port http[:https]    specify server port\n  -a address, --address address   specify server host\n  -u url, --proxy-url url         request through upstream proxy\n  -f host, --force-host host      force the netease server ip\n  -o source [source ...], --match-order source [source ...]\n                                  set priority of sources\n  -t token, --token token         set up proxy authentication\n  -e url, --endpoint url          replace virtual endpoint with public host\n  -s, --strict                    enable proxy limitation\n  -c, --cnrelay host:port         Mainland China relay to get music url\n  -h, --help                      output usage information\n```\n\n### 音源清单\n\n将有兴趣的音源代号用 `-o` 传入 UNM 即可使用，像这样：\n\n```bash\nnode app.js -o bilibili ytdlp\n```\n\n| 名称                        | 代号        | 默认启用 | 注意事项                                                                       |\n| --------------------------- | ----------- | -------- | ------------------------------------------------------------------------------ |\n| QQ 音乐                     | `qq`        |          | 需要准备自己的 `QQ_COOKIE`（请参阅下方〈环境变量〉处）。必须使用 QQ 登录。     |\n| 酷狗音乐                    | `kugou`     | ✅       |                                                                                |\n| 酷我音乐                    | `kuwo`      | ✅       |                                                                                |\n| 咪咕音乐                    | `migu`      | ✅       | 需要准备自己的 `MIGU_COOKIE`（请参阅下方〈环境变量〉处）。                     |\n| JOOX                        | `joox`      |          | 需要准备自己的 `JOOX_COOKIE`（请参阅下方〈环境变量〉处）。似乎有严格地区限制。 |\n| YouTube（纯 JS 解析方式）   | `youtube`   |          | 需要 Google 认定的**非中国大陆区域** IP 地址。                                 |\n| YouTube（通过 `youtube-dl`) | `youtubedl` |          | 需要自行安装 `youtube-dl`。                                                    |\n| YouTube（通过 `yt-dlp`)     | `ytdlp`     | ✅       | 需要自行安装 `yt-dlp`（`youtube-dl` 仍在活跃维护的 fork）。                    |\n| B 站音乐                    | `bilibili`  | ✅       |                                                                                |\n| 第三方网易云 API            | `pyncmd`    |          |                                                                                |\n\n- 支持 `pyncmd` 的 API 服务由 GD studio \u003chttps://music.gdstudio.xyz\u003e 提供。\n\n### 环境变量\n\n| 变量名称              | 类型 | 描述                                                                                                    | 示例                                                             |\n| --------------------- | ---- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |\n| ENABLE_FLAC           | bool | 激活无损音质获取                                                                                        | `ENABLE_FLAC=true`                                               |\n| ENABLE_LOCAL_VIP      | str  | 激活本地黑胶 VIP，可选值：`true`（等同于 CVIP）、`cvip` 和 `svip`                                       | `ENABLE_LOCAL_VIP=svip`                                          |\n| LOCAL_VIP_UID         | str  | 仅对这些 UID 激活本地黑胶 VIP，默认为对全部用户生效                                                     | `LOCAL_VIP_UID=123456789,1234,123456`                            |\n| ENABLE_HTTPDNS        | bool | 激活故障的 Netease HTTPDNS 查询（不建议）                                                               | `ENABLE_HTTPDNS=true`                                            |\n| BLOCK_ADS             | bool | 屏蔽应用内部分广告                                                                                      | `BLOCK_ADS=true`                                                 |\n| DISABLE_UPGRADE_CHECK | bool | 禁用更新检测                                                                                            | `DISABLE_UPGRADE_CHECK=true`                                     |\n| DEVELOPMENT           | bool | 激活开发模式。需要自己用 `yarn` 安装依赖 (dependencies)                                                 | `DEVELOPMENT=true`                                               |\n| FOLLOW_SOURCE_ORDER   | bool | 严格按照配置音源的顺序进行查询                                                                          | `FOLLOW_SOURCE_ORDER=true`                                       |\n| JSON_LOG              | bool | 输出机器可读的 JSON 记录格式                                                                            | `JSON_LOG=true`                                                  |\n| NO_CACHE              | bool | 停用 cache                                                                                              | `NO_CACHE=true`                                                  |\n| MIN_BR                | int  | 允许的最低源音质，小于该值将被替换                                                                      | `MIN_BR=320000`                                                  |\n| SELECT_MAX_BR         | bool | 选择所有音源中的最高码率替换音频                                                                        | `SELECT_MAX_BR=true`                                             |\n| LOG_LEVEL             | str  | 日志输出等级。请见〈日志等级〉部分。                                                                    | `LOG_LEVEL=debug`                                                |\n| LOG_FILE              | str  | 从 Pino 端设置日志输出的文件位置。也可以用 `*sh` 的输出重导向功能 (`node app.js \u003e\u003e app.log`) 代替       | `LOG_FILE=app.log`                                               |\n| JOOX_COOKIE           | str  | JOOX 音源的 wmid 和 session_key cookie                                                                  | `JOOX_COOKIE=\"wmid=\u003cyour_wmid\u003e; session_key=\u003cyour_session_key\u003e\"` |\n| MIGU_COOKIE           | str  | 咪咕音源的 aversionid cookie                                                                            | `MIGU_COOKIE=\"\u003cyour_aversionid\u003e\"`                                |\n| QQ_COOKIE             | str  | QQ 音源的 uin 和 qm_keyst cookie                                                                        | `QQ_COOKIE=\"uin=\u003cyour_uin\u003e; qm_keyst=\u003cyour_qm_keyst\u003e\"`           |\n| YOUTUBE_KEY           | str  | Youtube 音源的 Data API v3 Key                                                                          | `YOUTUBE_KEY=\"\u003cyour_data_api_key\u003e\"`                              |\n| SIGN_CERT             | path | 自定义证书文件                                                                                          | `SIGN_CERT=\"./server.crt\"`                                       |\n| SIGN_KEY              | path | 自定义密钥文件                                                                                          | `SIGN_KEY=\"./server.key\"`                                        |\n| SEARCH_ALBUM          | bool | 在其他音源搜索歌曲时携带专辑名称（默认搜索条件 `歌曲名 - 歌手`，启用后搜索条件 `歌曲名 - 歌手 专辑名`） | `SEARCH_ALBUM=true`                                              |\n| NETEASE_COOKIE        | str  | 网易云 Cookie                                                                                           | `MUSIC_U=007554xxx`                                              |\n\n#### 日志等级 (`LOG_LEVEL`)\n\n这些是常用的值：\n\n- `debug`: 输出所有记录（调试用）\n- `info`: 只输出一般资讯（默认值）\n- `error`: 只在出严重问题时输出\n\n详细请参见 [Pino 对此的说明](https://github.com/pinojs/pino/blob/master/docs/api.md#level-string)。\n\n## 使用\n\n**警告**：本项目不提供在线 demo，请不要轻易信任使用他人提供的公开代理服务，以免发生安全问题\n\n**若将服务部署到公网，强烈建议使用严格模式 (此模式下仅放行网易云音乐所属域名的请求) `-s` 限制代理范围 (需使用 PAC 或 hosts)，~~或激活 Proxy Authentication `-t \u003cname\u003e:\u003cpassword\u003e` 设置代理用户名密码~~ (目前密码认证在 Windows 客户端设置和 macOS 系统设置都无法生效，请不要使用)，以防代理被他人滥用**\n\n支持 Windows 客户端，UWP 客户端，Android 客户端，Linux 客户端 (1.2 版本以上需要自签证书 MITM，启动客户端需要增加 `--ignore-certificate-errors` 参数)，macOS 客户端 (726 版本以上需要自签证书)，iOS 客户端 (配置 https endpoint 或使用自签证书) 和网页版 (需要自签证书，需要脚本配合)\n\n目前除 UWP 外其它客户端均优先请求 HTTPS 接口，~~默认配置下本代理对网易云所有 HTTPS API 连接返回空数据，促使客户端降级使用 HTTP 接口~~ (新版 Linux 客户端和 macOS 客户端已无法降级)\n\n因 UWP 应用存在网络隔离，限制流量发送到本机，若使用的代理在 localhost，或修改的 hosts 指向 localhost，需为 \"网易云音乐 UWP\" 手工开启 loopback 才能使用，请以**管理员身份**运行命令\n\n```powershell\nchecknetisolation loopbackexempt -a -n=\"1F8B0F94.122165AE053F_j2p0p5q0044a6\"\n```\n\n### 方法 1. 修改 hosts\n\n向 hosts 文件添加几条规则\n\n```hosts\n\u003cServer IP\u003e music.163.com\n\u003cServer IP\u003e interface.music.163.com\n\u003cServer IP\u003e interface3.music.163.com\n\u003cServer IP\u003e interface.music.163.com.163jiasu.com\n\u003cServer IP\u003e interface3.music.163.com.163jiasu.com\n```\n\n\u003e 使用此方法必须监听 80 端口 `-p 80`\n\u003e\n\u003e **若在本机运行程序**，请指定网易云服务器 IP `-f xxx.xxx.xxx.xxx` (可在修改 hosts 前通过 `ping music.163.com` 获得) **或** 使用代理 `-u http(s)://xxx.xxx.xxx.xxx:xxx`，以防请求死循环\n\u003e\n\u003e **Android 客户端下修改 hosts 无法直接使用**，原因和解决方法详见[云音乐安卓又搞事啦](https://jixun.moe/post/netease-android-hosts-bypass/)，[安卓免 root 绕过网易云音乐 IP 限制](https://jixun.moe/post/android-block-netease-without-root/)\n\n### 方法 2. 设置代理\n\nPAC 自动代理脚本地址 `http://\u003cServer Name:PORT\u003e/proxy.pac`\n\n全局代理地址填写服务器地址和端口号即可\n\n| 平台    | 基础设置                              |\n| :------ | :------------------------------------ |\n| Windows | 设置 \u003e 工具 \u003e 自定义代理 (客户端内)   |\n| UWP     | Windows 设置 \u003e 网络和 Internet \u003e 代理 |\n| Linux   | 系统设置 \u003e 网络 \u003e 网络代理            |\n| macOS   | 系统偏好设置 \u003e 网络 \u003e 高级 \u003e 代理     |\n| Android | WLAN \u003e 修改网络 \u003e 高级选项 \u003e 代理     |\n| iOS     | 无线局域网 \u003e HTTP 代理 \u003e 配置代理     |\n\n\u003e 代理工具和方法有很多请自行探索，欢迎在 issues 讨论\n\n### ✳ 方法 3. 调用接口\n\n作为依赖库使用\n\n```javascript\nconst match = require('@unblockneteasemusic/server');\n\n/**\n * Set proxy or hosts if needed\n */\nglobal.proxy = require('url').parse('http://127.0.0.1:1080');\nglobal.hosts = { 'i.y.qq.com': '59.37.96.220' };\n\n/**\n * Find matching song from other platforms\n * @param {Number} id netease song id\n * @param {Array\u003cString\u003e||undefined} source support qq, xiami, baidu, kugou, kuwo, migu, joox\n * @return {Promise\u003cObject\u003e}\n */\nmatch(418602084, ['qq', 'kuwo', 'migu']).then(console.log);\n```\n\n### 設定 HTTPS 憑證\n\n新版的 NeteaseMusic 需要 HTTPS 才能使用。证书的设置教学可参阅[《安裝 UNM 的 HTTPS 憑證》](https://github.com/UnblockNeteaseMusic/server/discussions/426)一文。\n\n## 效果\n\n### Windows 客户端\n\n\u003cimg alt=\"Windows 客户端\" src=\"https://user-images.githubusercontent.com/26399680/60316017-87de8a80-999b-11e9-9381-16d40efbe7f6.png\" width=\"100%\"\u003e\n\n### UWP 客户端\n\n\u003cimg alt=\"UWP 客户端\" src=\"https://user-images.githubusercontent.com/26399680/52215123-5a028780-28ce-11e9-8491-08c4c5dac3b4.png\" width=\"100%\"\u003e\n\n### Linux 客户端\n\n\u003cimg alt=\"Linux 客户端\" src=\"https://user-images.githubusercontent.com/26399680/60316169-18b56600-999c-11e9-8ae5-5cd168b0edae.png\" width=\"100%\"\u003e\n\n### macOS 客户端\n\n\u003cimg alt=\"macOS 客户端\" src=\"https://user-images.githubusercontent.com/26399680/52196035-51418f80-2895-11e9-8f33-78a631cdf151.png\" width=\"100%\"\u003e\n\n### Android 客户端\n\n\u003cimg alt=\"Android 客户端\" src=\"https://user-images.githubusercontent.com/26399680/57972549-eabd2900-79ce-11e9-8fef-95cb60906298.png\" width=\"50%\"\u003e\n\n### iOS 客户端\n\n\u003cimg alt=\"iOS 客户端\" src=\"https://user-images.githubusercontent.com/26399680/57972440-f90a4580-79cc-11e9-8dbf-6150ee299b9c.jpg\" width=\"50%\"\u003e\n\n## 致谢\n\n感谢大佬们为逆向 eapi 所做的努力\n\n使用的其它平台音源 API 出自\n\n[trazyn/ieaseMusic](https://github.com/trazyn/ieaseMusic)\n\n[listen1/listen1_chrome_extension](https://github.com/listen1/listen1_chrome_extension)\n\n向所有同类项目致敬\n\n[EraserKing/CloudMusicGear](https://github.com/EraserKing/CloudMusicGear)\n\n[EraserKing/Unblock163MusicClient](https://github.com/EraserKing/Unblock163MusicClient)\n\n[ITJesse/UnblockNeteaseMusic](https://github.com/ITJesse/UnblockNeteaseMusic/)\n\n[bin456789/Unblock163MusicClient-Xposed](https://github.com/bin456789/Unblock163MusicClient-Xposed)\n\n[YiuChoi/Unlock163Music](https://github.com/YiuChoi/Unlock163Music)\n\n[yi-ji/NeteaseMusicAbroad](https://github.com/yi-ji/NeteaseMusicAbroad)\n\n[stomakun/NeteaseReverseLadder](https://github.com/stomakun/NeteaseReverseLadder/)\n\n[fengjueming/unblock-NetEaseMusic](https://github.com/fengjueming/unblock-NetEaseMusic)\n\n[acgotaku/NetEaseMusicWorld](https://github.com/acgotaku/NetEaseMusicWorld)\n\n[mengskysama/163-Cloud-Music-Unlock](https://github.com/mengskysama/163-Cloud-Music-Unlock)\n\n[azureplus/163-music-unlock](https://github.com/azureplus/163-music-unlock)\n\n[typcn/163music-mac-client-unlock](https://github.com/typcn/163music-mac-client-unlock)\n\n## 许可\n\n(Original project) [nondanee/UnblockNeteaseMusic](https://github.com/nondanee/UnblockNeteaseMusic): [MIT](https://github.com/nondanee/UnblockNeteaseMusic/blob/master/LICENSE)\n\n(This project) [UnblockNeteaseMusic/server](https://github.com/UnblockNeteaseMusic/server): [LGPL-3.0-only](https://spdx.org/licenses/LGPL-3.0-only.html)\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fserver.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FUnblockNeteaseMusic%2Fserver?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funblockneteasemusic%2Fserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funblockneteasemusic%2Fserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funblockneteasemusic%2Fserver/lists"}