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 编写,一次编译,到处运行
使用
手动部署
-
下载仓库
git clone https://github.com/honmaple/meting-api
-
编译可执行文件
go mod download go build -o meting-api .
或者使用 Docker 进行编译, 编译后的文件在
/usr/bin/meting-api
docker build -t meting-api .
-
运行
./meting-api -D
Docker部署
docker 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
-
具体配置:
# 缓存过期时间 cache.ttl: 3600 # 缓存路径,设置为空是禁用缓存 cache.path: "./cache" # 是否激活缓存 cache.enabled: true # 服务监听地址,:8000 表示监听 0.0.0.0:8000 server.addr: ":8000" # 对外服务地址,比如 https://api.xxxx.com/meting server.host: "" ## cors设置 server.cors.allow_headers: - "*" server.cors.allow_origins: - "*" server.cors.allow_methods: - "*" # 日志相关, out可选stdout,stderr,file,或者使用|分隔多个,比如stderr|file logger.out: "stdout" # 日志级别 logger.level: "info" # 日志文件名格式 logger.file_format: "%Y%m%d" # 日志文件保留数量 logger.file_rotation_count: 3
命令行参数
-
查看支持的服务
./meting-api --list
-
指定监听地址
./meting-api -a :8001 ./meting-api --addr :8001
-
显示请求记录
./meting-api -D ./meting-api --debug
-
指定配置文件
./meting-api -c /etc/meting.yaml ./meting-api --config /etc/meting.yaml
-
显示当前配置
./meting-api config
-
删除指定缓存
./meting-api delete-cache 'server:netease:type:${type}:id:${id}'
网页端设置
其中 http://localhost:8000/
是对外服务的接口
<meting-js server="netease" type="artist" id="6452"> </meting-js> <script type="text/javascript"> var meting_api='http://localhost:8000/?server=:server&type=:type&id=:id&auth=:auth&r=:r'; </script> <script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>