使用Go重写MetingJS的API


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>

演示

作者: honmaple
链接: https://honmaple.me/articles/2023/12/shi-yong-gozhong-xie-metingjsde-api.html
版权: CC BY-NC-SA 4.0 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat
alipay

加载评论