|
1 | | -# amll-search |
2 | | -这是一个为 amll-ttml-db 设计的高性能歌词搜索与下载 API 服务,使用 Go 语言实现。 |
| 1 | +AMLL TTML API 服务器 |
| 2 | + |
| 3 | +AMLL TTML API 服务器是为 amll-ttml-db 数据仓库设计的高性能搜索与下载服务端。它提供歌词元数据的快速检索以及对应格式歌词文件的下载功能。 |
| 4 | + |
| 5 | +特性 |
| 6 | + |
| 7 | +· 快速全文检索:基于预处理文本索引,实现毫秒级响应 |
| 8 | +· 多平台支持:支持 ncm、qq、am、spotify、raw 五种平台的歌词元数据 |
| 9 | +· 智能缓存:搜索结果缓存 5 分钟,相同查询直接命中,显著提升响应速度 |
| 10 | +· 自动同步:定时从 GitHub 拉取最新数据,无需手动干预 |
| 11 | +· 并行搜索:多平台并发查询,结果合并去重后返回 |
| 12 | +· 下载 API:支持获取 TTML、LRC、YRC、QRC、LYS 等格式的原始歌词文件(可配置禁用) |
| 13 | +· 状态监控:实时查看各平台条目数、上次更新时间、缓存大小等信息 |
| 14 | + |
| 15 | +快速开始 |
| 16 | + |
| 17 | +环境要求 |
| 18 | + |
| 19 | +· Go 1.16 或更高版本 |
| 20 | + |
| 21 | +安装与运行 |
| 22 | + |
| 23 | +```bash |
| 24 | +# 克隆仓库(如果有源码) |
| 25 | +git clone https://github.com/yourname/amll-ttml-api.git |
| 26 | +cd amll-ttml-api |
| 27 | + |
| 28 | +# 编译 |
| 29 | +go build -o amll-api main.go |
| 30 | + |
| 31 | +# 运行 |
| 32 | +./amll-api |
| 33 | +``` |
| 34 | + |
| 35 | +默认会在 43594 端口启动服务,数据目录会自动探测(优先使用当前目录下的 lyric-data,若不存在则从 GitHub 克隆)。 |
| 36 | + |
| 37 | +命令行参数 |
| 38 | + |
| 39 | +参数 默认值 说明 |
| 40 | +-no-sync false 禁止 Git 同步,仅使用本地已有数据 |
| 41 | +-no-download false 禁用 /api/download 接口 |
| 42 | +-data-dir lyric-data 指定数据目录路径(绝对或相对) |
| 43 | +-interval 10m 自动同步间隔,例如 30s、5m、1h |
| 44 | +-port 43594 服务监听端口 |
| 45 | + |
| 46 | +示例: |
| 47 | + |
| 48 | +```bash |
| 49 | +# 使用自定义数据目录,关闭自动同步,端口 8080 |
| 50 | +./amll-api -data-dir /mnt/data/amll -no-sync -port 8080 |
| 51 | +``` |
| 52 | + |
| 53 | +API 文档 |
| 54 | + |
| 55 | +所有接口返回 JSON 格式,并支持跨域请求(CORS)。 |
| 56 | + |
| 57 | +基础 URL |
| 58 | + |
| 59 | +``` |
| 60 | +http://<服务器地址>:<端口> |
| 61 | +``` |
| 62 | + |
| 63 | +例如:http://localhost:43594 |
| 64 | + |
| 65 | +--- |
| 66 | + |
| 67 | +1. 状态查询 |
| 68 | + |
| 69 | +端点:GET /api/status |
| 70 | +返回服务器状态、各平台条目数、上次更新时间等。 |
| 71 | + |
| 72 | +响应示例: |
| 73 | + |
| 74 | +```json |
| 75 | +{ |
| 76 | + "status": "active", |
| 77 | + "last_update_time": "2025-03-20 15:04:05", |
| 78 | + "total_entries": 123456, |
| 79 | + "platform_stats": { |
| 80 | + "ncm": 50000, |
| 81 | + "qq": 40000, |
| 82 | + "am": 15000, |
| 83 | + "spotify": 10000, |
| 84 | + "raw": 8456 |
| 85 | + }, |
| 86 | + "repo_url": "https://github.com/Steve-xmh/amll-ttml-db.git", |
| 87 | + "cache_size": 128 |
| 88 | +} |
| 89 | +``` |
| 90 | + |
| 91 | +--- |
| 92 | + |
| 93 | +2. 搜索歌词 |
| 94 | + |
| 95 | +端点:GET /api/search 或 POST /api/search |
| 96 | + |
| 97 | +查询参数(GET): |
| 98 | + |
| 99 | +· query:搜索关键词(必填) |
| 100 | +· platforms:限定平台,可重复,例如 platforms=ncm&platforms=qq(不传则搜索全部) |
| 101 | + |
| 102 | +请求体(POST): |
| 103 | + |
| 104 | +```json |
| 105 | +{ |
| 106 | + "query": "周杰伦", |
| 107 | + "platforms": ["ncm", "qq"] |
| 108 | +} |
| 109 | +``` |
| 110 | + |
| 111 | +响应: |
| 112 | + |
| 113 | +```json |
| 114 | +{ |
| 115 | + "status": "success", |
| 116 | + "count": 2, |
| 117 | + "results": [ |
| 118 | + { |
| 119 | + "id": "12345", |
| 120 | + "rawLyricFile": "七里香.lrc", |
| 121 | + "metadata": [["artist", ["周杰伦"]], ["title", ["七里香"]]], |
| 122 | + "platforms": ["ncm", "qq"] |
| 123 | + } |
| 124 | + ], |
| 125 | + "cached": false |
| 126 | +} |
| 127 | +``` |
| 128 | + |
| 129 | +注意:搜索基于 ID、文件名和元数据文本进行全小写模糊匹配。platforms 字段表示该歌曲在哪些平台存在匹配。 |
| 130 | + |
| 131 | +--- |
| 132 | + |
| 133 | +3. 下载歌词文件 |
| 134 | + |
| 135 | +端点:GET /api/download 或 POST /api/download |
| 136 | + |
| 137 | +如果服务器启动时添加了 -no-download 参数,此接口将返回 403。 |
| 138 | + |
| 139 | +参数(GET): |
| 140 | + |
| 141 | +· platform:平台名(如 ncm) |
| 142 | +· musicId:歌曲 ID(例如 12345) |
| 143 | +· format:文件格式,可选 ttml、lrc、yrc、qrc、lys,默认 ttml |
| 144 | + |
| 145 | +请求体(POST): |
| 146 | + |
| 147 | +```json |
| 148 | +{ |
| 149 | + "platform": "ncm", |
| 150 | + "musicId": "12345", |
| 151 | + "format": "lrc" |
| 152 | +} |
| 153 | +``` |
| 154 | + |
| 155 | +成功响应:直接返回文件内容(application/octet-stream)。 |
| 156 | + |
| 157 | +失败响应(JSON): |
| 158 | + |
| 159 | +```json |
| 160 | +{ "error": "Lyric file not found" } |
| 161 | +``` |
| 162 | + |
| 163 | +--- |
| 164 | + |
| 165 | +4. 获取支持的格式列表 |
| 166 | + |
| 167 | +端点:GET /api/formats |
| 168 | +返回所有可下载的歌词格式。 |
| 169 | + |
| 170 | +响应: |
| 171 | + |
| 172 | +```json |
| 173 | +["ttml", "lrc", "yrc", "qrc", "lys"] |
| 174 | +``` |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +5. 手动触发更新 |
| 179 | + |
| 180 | +端点:GET /api/update 或 POST /api/update |
| 181 | + |
| 182 | +如果启用了 -no-sync,此接口返回 403。 |
| 183 | + |
| 184 | +执行 git pull 并重新加载索引。 |
| 185 | +响应: |
| 186 | + |
| 187 | +```json |
| 188 | +{ "message": "Update successful and metadata reloaded" } |
| 189 | +``` |
| 190 | + |
| 191 | +或 |
| 192 | + |
| 193 | +```json |
| 194 | +{ "message": "Already up to date" } |
| 195 | +``` |
| 196 | + |
| 197 | +缓存机制 |
| 198 | + |
| 199 | +· 查询缓存:相同关键词的搜索结果会缓存 5 分钟,减少重复计算。 |
| 200 | +· 缓存大小限制:超过 1000 条时会自动清理过期条目。 |
| 201 | +· 数据更新后:自动清空缓存,确保搜索使用最新数据。 |
| 202 | + |
| 203 | +数据目录结构 |
| 204 | + |
| 205 | +服务会按以下优先级查找数据目录: |
| 206 | + |
| 207 | +1. 命令行 -data-dir 指定的路径 |
| 208 | +2. 当前工作目录 |
| 209 | +3. 上级目录 |
| 210 | +4. 子目录 lyric-data、amll-ttml-db、data |
| 211 | + |
| 212 | +数据目录应包含类似如下的子目录: |
| 213 | + |
| 214 | +``` |
| 215 | +lyric-data/ |
| 216 | +├── ncm-lyrics/ |
| 217 | +│ ├── index.jsonl |
| 218 | +│ └── 歌曲ID.ttml |
| 219 | +├── qq-lyrics/ |
| 220 | +├── am-lyrics/ |
| 221 | +├── spotify-lyrics/ |
| 222 | +└── metadata/ |
| 223 | + └── raw-lyrics-index.jsonl |
| 224 | +``` |
| 225 | + |
| 226 | +贡献 |
| 227 | + |
| 228 | +欢迎提交 Issue 或 Pull Request。 |
| 229 | +本项目旨在为 AMLL 社区提供便捷的歌词搜索服务,感谢 Steve-xmh 维护的数据仓库。 |
| 230 | + |
| 231 | +许可证 |
| 232 | + |
| 233 | +本项目采用 MIT 许可证。 |
| 234 | +你可以自由使用、修改和分发本软件,但需保留版权声明和许可声明。详细条款请参见项目根目录下的 LICENSE 文件。 |
0 commit comments