MetingJS 是一款通过获取网易云音乐或者QQ音乐等服务的歌单、歌手、歌曲、歌词等信息,然后使用开源HTML5播放器 APlayer 进行播放的插件。而 MetingJS 是一段很小的JS代码,它提供了一个默认的API接口:https://api.i-meto.com/meting/api , 但很不幸,该接口偶尔会出问题,作者也很久没有回复issue了。
现在也有一个开源的 injahow/meting-api,该服务同样使用PHP编写,我不太懂PHP,我只是想要设置一个缓存,来缓存所有的歌曲信息,而不仅仅是歌单列表,另外是可以支持内存缓存和本地磁盘缓存,而不是直接从本地文件中读取。
基于此,与其自己改不是太懂的PHP,说不定会出现一些意想不到的漏洞(源自某安全公司多次CTF换来的教训),不如使用熟悉的Go重写实现,毕竟核心代码也不是太多
功能
-
支持网易云音乐,QQ音乐
-
支持新服务接口扩展
-
支持所有请求结果的缓存
-
更方便的配置(环境变量+配置文件),而不用修改源文件
-
基于 Go 编写,一次编译,到处运行
使用
手动部署
-
下载仓库
1git clone https://github.com/honmaple/meting-api -
编译可执行文件
1go mod download 2go build -o meting-api .或者使用 Docker 进行编译, 编译后的文件在
/usr/bin/meting-api1docker build -t meting-api . -
运行
1./meting-api -D
Docker部署
1docker run --name meting-api --restart=always -d -p 8000:8000 -v /tmp/meting-cache:/opt/meting-api/cache honmaple/meting-api
配置说明
配置可以使用环境变量或者配置文件设置
-
环境变量: 使用
METING_XXXX, 比如METING_CACHE_TTL -
配置文件: 默认使用当前目录下的
config.yaml, 如果使用 Docker 部署,需要文件挂载到/opt/meting-api/config.yaml -
具体配置:
1# 缓存过期时间 2cache.ttl: 3600 3# 缓存路径,设置为空是禁用缓存 4cache.path: "./cache" 5# 是否激活缓存 6cache.enabled: true 7 8# 服务监听地址,:8000 表示监听 0.0.0.0:8000 9server.addr: ":8000" 10# 对外服务地址,比如 https://api.xxxx.com/meting 11server.host: "" 12 13## cors设置 14server.cors.allow_headers: 15 - "*" 16server.cors.allow_origins: 17 - "*" 18server.cors.allow_methods: 19 - "*" 20 21# 日志相关, out可选stdout,stderr,file,或者使用|分隔多个,比如stderr|file 22logger.out: "stdout" 23# 日志级别 24logger.level: "info" 25# 日志文件名格式 26logger.file_format: "%Y%m%d" 27# 日志文件保留数量 28logger.file_rotation_count: 3
命令行参数
-
查看支持的服务
1./meting-api --list -
指定监听地址
1./meting-api -a :8001 2./meting-api --addr :8001 -
显示请求记录
1./meting-api -D 2./meting-api --debug -
指定配置文件
1./meting-api -c /etc/meting.yaml 2./meting-api --config /etc/meting.yaml -
显示当前配置
1./meting-api config -
删除指定缓存
1./meting-api delete-cache 'server:netease:type:${type}:id:${id}'
网页端设置
其中 http://localhost:8000/ 是对外服务的接口
1<meting-js
2 server="netease"
3 type="artist"
4 id="6452">
5</meting-js>
6<script type="text/javascript">
7 var meting_api='http://localhost:8000/?server=:server&type=:type&id=:id&auth=:auth&r=:r';
8</script>
9<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
10<script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>
知识共享署名-非商业性使用-相同方式共享4.0国际许可协议