/UnblockNeteaseMusic

Solve unavailable songs for cloud music client

Primary LanguageJavaScriptMIT LicenseMIT

logo

UnblockNeteaseMusic

解锁网易云音乐客户端变灰歌曲

特性

  • 使用 QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咕咪 / JOOX 音源替换变灰歌曲链接 (默认仅启用前三,可通过 -o 设置)
  • 为请求增加 X-Real-IP 参数解锁海外限制,支持指定网易云服务器 IP,支持设置上游 HTTP / HTTPS 代理
  • 完整的流量代理功能 (HTTP / HTTPS),可直接作为系统代理 (同时支持 PAC)

运行

从源码运行

$ node app.js

或使用 Docker

$ docker run nondanee/unblockneteasemusic
$ docker-compose up

配置参数

$ node app.js -h
Usage: unblockneteasemusic [options] [value ...]

Options:

  -v, --version                 output the version number
  -p, --port <port>             specify server port
  -u, --proxy-url <url>         request through upstream proxy
  -f, --force-host <host>       force the netease server ip
  -o, --match-order <name,...>  set priority of sources
  -t, --token <token>           set up http basic authentication
  -s, --strict                  enable proxy limitation
  -h, --help                    output usage information

使用

若将服务部署到公网,强烈建议使用严格模式 (此模式下仅放行网易云音乐所属域名的请求) -s 限制代理范围 (需使用 PAC 或 hosts),或启用 Proxy Authentication -t <name>:<password> 设置代理用户名密码 (目前密码认证在 Windows 客户端设置和 macOS 系统设置都无法生效,请不要使用),以防代理被他人滥用

支持 Windows 客户端,UWP 客户端,Linux 客户端,macOS 客户端和 Android 客户端

目前除 UWP 外其它客户端都默认请求 HTTPS 接口,本代理对网易云所有 HTTPS API 连接返回空数据 (网易云网页版会被屏蔽),促使客户端降级使用HTTP接口 (降级有时不能自动触发,若提示 "网络不给力" 请切换页面标签试试)

测试发现 iOS 客户端设置代理有效果 (HD 版不行),虽 Apple 强制要求使用 HTTPS 但 API 请求仍可以降级,不过播放音源地址需要 HTTPS,因此需要一个有可信任证书的 (公网) HTTPS 接口来转发流量,无法直接使用 (其它项目有提到使用 Surge,Shadowrocket 可以直接转发 HTTPS 流量到 HTTP,有兴趣可以试试)

方法 1. 修改 hosts

向 hosts 文件添加两条规则

<Server IP> music.163.com
<Server IP> interface.music.163.com

使用此方法必须监听 80 端口 -p 80

若在本机运行程序,请指定网易云服务器 IP -f xxx.xxx.xxx.xxx (可在修改 hosts 前通过 ping music.163.com 获得) 使用代理 -u http(s)://xxx.xxx.xxx.xxx:xxx,以防请求死循环

Android 客户端下修改 hosts 无法使用,原因和解决方法详见云音乐安卓又搞事啦安卓免 root 绕过网易云音乐 IP 限制

方法 2. 设置代理

PAC 自动代理脚本地址 http://<Server Name:PORT>/proxy.pac

全局代理地址填写服务器地址和端口号即可

平台 设置方法
Windows 设置 > 工具 > 自定义代理 (客户端内)
UWP Windows 设置 > 网络和 Internet > 代理
Linux 系统设置 > 网络 > 网络代理
macOS 系统偏好设置 > 网络 > 高级 > 代理
Android WLAN > 修改网络 > 高级选项 > 代理
iOS Surge,Shadowrocket 等添加配置

UWP 应用需要开启 loopback 才会使用系统代理,可借助 FiddlerEnableLoopback Utility 等工具

iOS Surge 配置

[Proxy]
UnblockNeteaseMusic = http,<Server Name>,<PORT>,,

[Rule]
USER-AGENT,NeteaseMusic*,UnblockNeteaseMusic 
FINAL,DIRECT

✳方法 3. 调用接口

[编程层面] 作为依赖库使用 (在纠结要不要发布到 NPM)

const match = require('./UnblockNeteaseMusic')

/** 
 * Set proxy or hosts if needed
 */
global.proxy = require('url').parse('http://127.0.0.1:1080')
global.hosts = {'i.y.qq.com': '59.37.96.220'}

/**
 * Find matching song from other platforms
 * @param {Number} id netease song id
 * @param {Array<String>||undefined} source support qq, xiami, baidu, kugou, kuwo, migu, joox
 * @return {Promise<Object>}
 */
match(557581404, ['qq', 'xiami', 'baidu']).then(song => console.log(song))

效果

Windows 客户端

UWP 客户端

Linux 客户端

macOS 客户端

Android 客户端

iOS 客户端

感谢

感谢大佬们为逆向 eapi 所做的努力

使用的其它平台音源 API 出自

trazyn/ieaseMusic

listen1/listen1_chrome_extension

向所有同类产品致敬

EraserKing/CloudMusicGear

EraserKing/Unblock163MusicClient

ITJesse/UnblockNeteaseMusic

bin456789/Unblock163MusicClient-Xposed

YiuChoi/Unlock163Music

yi-ji/NeteaseMusicAbroad

stomakun/NeteaseReverseLadder

fengjueming/unblock-NetEaseMusic

acgotaku/NetEaseMusicWorld

mengskysama/163-Cloud-Music-Unlock

azureplus/163-music-unlock

typcn/163music-mac-client-unlock

许可

The MIT License