在Mac上点亮网易云的版权歌曲

in 瞎折腾 with 0 comment

恰巧发现了个很有趣的开源项目,索性尝试着折腾一番,并记录下过程

零,效果图:

效果图

一,服务器端搭建

为了便于调试以及不浪费时间,本人是在本地利用docker运行服务器端程序,若要搭建请自行变通。
注意,运行container前请先将docker内的8123端口进行映射(本篇以映射到本地的5124端口为例)!

所需依赖:

  1. Node.js 8.x+
  2. Nginx with subs-filter module configured.

1,Node.js安装:

# 容器内全部命令均在root用户中执行,以后不再赘述
# 此处使用nvm进行Node.js的安装,用户亦可以自行选择安装方式
mkdir tmp&&cd tmp
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
source ~/.bashrc
# 下面这一步会直接安装v8.11.1 LTS版本,如果不喜可以使用 nvm ls-remote 查看已有版本并安装
nvm install 8.11.1

2,Nginx安装

# 此处使用lnmp一键包单独安装Nginx,用户亦可以自行选择安装方式
wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh nginx

3,Nginx配置

# 此处的配置均基于使用lnmp一键包安装的情况,请依据实际自行调整相关命令
# 在/usr/local/nginx/conf/vhost/中新建配置文件music.conf 并填入内容:

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=24h  max_size=1g;
server {
    listen 80;
    server_name music.163.com;
    resolver 114.114.114.114 223.5.5.5;

    set $backend "http://music.163.com";

    location /* {
        if ($http_host !~* ^(music.163.com)$){
            return 500;
        }
    }

    location / {
        proxy_pass $backend;
        proxy_connect_timeout    6s;
        proxy_send_timeout       6s;
        proxy_read_timeout       6s;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP "";
        proxy_set_header Accept-Encoding "";
        subs_filter_types *;
        subs_filter '"st":-.+?,''"st":0,' ir;
        subs_filter '"pl":0''"pl":320000';
        subs_filter '"dl":0''"dl":320000';
        subs_filter '"sp":0''"sp":7';
        subs_filter '"cp":0''"cp":1';
        subs_filter '"subp":0''"subp":1';
        subs_filter '"fl":0''"fl":320000';
        subs_filter '"fee":.+?,''"fee":0,' ir;
        subs_filter '"abroad":1,''';
        subs_filter '"updateFiles":\[.*\]''"updateFiles":[]' ir;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }

    location /eapi/song/enhance/player/url {
        proxy_set_header X-Real-IP "";
        proxy_pass http://localhost:8123;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }

    location /eapi/song/enhance/download/url {
        proxy_set_header X-Real-IP "";
        proxy_pass http://localhost:8123;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }

    # For linux
    location  /api/linux/forward {
        proxy_set_header X-Real-IP "";
        proxy_pass http://localhost:8123;
        subs_filter_types *;
        subs_filter '"st":-.+?,''"st":0,' ir;
        subs_filter '"pl":0''"pl":320000';
        subs_filter '"dl":0''"dl":320000';
        subs_filter '"sp":0''"sp":7';
        subs_filter '"cp":0''"cp":1';
        subs_filter '"subp":0''"subp":1';
        subs_filter '"fl":0''"fl":320000';
        subs_filter '"fee":.+?,''"fee":0,' ir;
        subs_filter '"abroad":1,''';
        subs_filter '"updateFiles":\[.*\]''"updateFiles":[]' ir;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }

    location /kugou {
        rewrite '^/kugou/(.*)' /$1 break;
        proxy_set_header X-Real-IP "";
        proxy_pass http://fs.web.kugou.com;
        proxy_set_header Host fs.web.kugou.com;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }

    location /qqmusic {
        rewrite '^/qqmusic/(.*)' /$1 break;
        proxy_set_header X-Real-IP "";
        proxy_pass http://dl.stream.qqmusic.qq.com;
        proxy_set_header "User-Agent" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
        proxy_set_header Host dl.stream.qqmusic.qq.com;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }
}
}

4,代理程序的安装与配置

# 通过npm包管理器全局安装
npm install unblock-netease-music -g

# 使代理程序后台运行nohup unblockneteasemusic &
# 然后重启Nginx服务,使之读取上面配置好的文件即可。此时在系统浏览器内访问localhost:5124,
# 页面内会显示 Not Found 。

二,客户端的代码注入

git clone https://github.com/ITJesse/NeteaseMusicPlugin.git
cd NeteaseMusicPluginsudo 
gem install cocoapodspod install​

# 上述代码全部成功执行完毕后用xcode打开NeteaseMusicPlugin.xcworkspace
# 大陆用户需要注释掉NeteaseMusicPlugin/hijack.m中的第62行,即
# [newRequest addValue:ip forHTTPHeaderField:@"X-Real-IP"];
# 修改NeteaseMusicPlugin/NeteaseMusicPlugin.m中第11行,将之替换为自己的服务器的地址
# 例如我自己写为 NSString *apiServer = @"http://localhost:5124";
# 修改 NeteaseMusicPlugin.xcodeproj/project.pbxproj 文件第264行,
# 将 /Users/Jesse/.bin/ 文件夹替换为已存在的任意位置,然后拷贝insert_dylib二进制文件到此位置
# insert_dylib 为开源程序,请自行下载或者编译,插件作者以及本文不提供下载
# 修改完毕以后确定已正确安装网易云音乐并退出,点击菜单栏的 Product -> Build  编译完毕后会自动注入。
# 提示 Build Success 后打开网易云音乐,查看效果即可

三,部分注意事项

  1. docker 内 apt install 过慢:替换软件源为国内源(我本人使用的软件源为为阿里镜像)
  2. git clone 过慢:尝试设置/取消git代理,反正我这里不挂代理就能跑满,挂了反而影响速度
  3. npm install过慢:使用淘宝的cnpm替代之
  4. gem install 过慢:使用ruby-china镜像
  5. 暂未发现……

四,鸣谢开源项目

  1. unblock-netease-music
  2. NeteaseMusicPlugin
Responses