一个简单的 Node.js API 服务器,用于获取网易云音乐歌曲的歌词,它会优先从指定的 GitHub 仓库获取 TTML 格式,然后按顺序查找仓库中的其他格式,最后回退到一个外部 NCM API。
- 优先从 Steve-XMH/amll-ttml-db 仓库获取
ttml歌词。 - 当 TTML 未找到时,按顺序查找仓库中的
yrc,lrc,eslrc格式(可通过fallback参数自定义顺序)。 - 当仓库中所有格式都未找到时,回退到外部 API (通过
EXTERNAL_NCM_API_URL环境变量配置) 获取yrc或lrc。(外部 API 为 NeteaseCloudMusicApi) - 支持通过
fixedVersion参数强制只查找仓库中的特定格式。 - 使用 Hono 构建,性能高效。
根据提供的网易云音乐歌曲 ID 搜索歌词。
查询参数:
id( 必需 ): 网易云音乐歌曲的数字 ID。fixedVersion( 可选 ): 强制只在 GitHub 仓库中查找指定的歌词格式。如果提供此参数,则忽略fallback参数。有效值:ttml,yrc,lrc,eslrc。fallback( 可选 ): 指定在 GitHub 仓库中未找到ttml格式后,按顺序尝试查找的回退格式列表(逗号分隔)。注意: 此列表不应包含ttml。如果忽略此参数,默认的回退顺序是yrc,lrc,eslrc。
响应:
- 成功 (200 OK):
{ "found": true, "id": "歌曲ID", "format": "找到的格式 (ttml, yrc, lrc, eslrc)", "source": "来源 ('repository' 或 'external')", "content": "歌词文件的文本内容" } - 未找到 (404 Not Found):
{ "found": false, "id": "歌曲ID", "error": "错误信息 (例如 'Lyrics not found')" } - 客户端错误 (400 Bad Request):
{ "error": "错误信息 (例如 'Missing id parameter')" } - 服务器错误 (5xx):
{ "error": "错误信息 (例如 'Failed to fetch ...', 'External API fallback failed ...')" }
示例请求:
GET /api/search?id=449818741(默认查找顺序: ttml -> yrc -> lrc -> eslrc -> external)GET /api/search?id=449818741&fallback=lrc,yrc(查找顺序: ttml -> lrc -> yrc -> external)GET /api/search?id=449818741&fixedVersion=ttml(只查找仓库中的 ttml)
快速检查某个歌曲 ID 是否存在歌词,并返回可用的歌词格式列表以及是否有翻译或罗马音(来自外部 API)。此端点不返回完整的歌词内容,设计用于轻量级检查。
查询参数:
id( 必需 ): 网易云音乐歌曲的数字 ID。
响应:
- 成功 (200 OK):
{ "found": true, "id": "歌曲ID", "availableFormats": ["ttml", "lrc"], // 可能的格式列表 (LyricFormat[]) "hasTranslation": true, // 布尔值,指示外部 API 是否提供翻译 "hasRomaji": false // 布尔值,指示外部 API 是否提供罗马音 } - 未找到 (404 Not Found):
{ "found": false, "id": "歌曲ID", "error": "错误信息 (例如 'No lyric formats found')" } - 客户端错误 (400 Bad Request):
{ "found": false, // 注意:为了与 search 保持一致性,这里也返回 found: false "error": "错误信息 (例如 'Missing id parameter')" } - 服务器错误 (5xx):
{ "found": false, "error": "错误信息" }
示例请求:
GET /api/lyrics/meta?id=449818741
- 主要来源: Steve-XMH/amll-ttml-db GitHub 仓库 (
/ncm-lyrics目录)。 - 回退来源: 通过
EXTERNAL_NCM_API_URL环境变量配置的外部 API。
- 克隆仓库:
git clone <你的仓库URL> cd <仓库目录>
- 安装依赖: 推荐使用
pnpm:(或者使用pnpm install
npm install或yarn install) - 配置环境变量:
- 开发: 创建一个
.env文件在项目根目录,并添加必需的环境变量:重要: 将# .env EXTERNAL_NCM_API_URL=https://NeteaseCloudMusicApi/lyric/new PORT=3000 # 可选,默认 3000
.env文件添加到.gitignore。 - 生产: 通过你的部署平台或系统设置相应的环境变量。
- 开发: 创建一个
- 开发模式 (带热重载):
服务器将在
pnpm run dev
http://localhost:3000(或PORT环境变量指定的端口) 启动。 - 构建生产版本:
确保
pnpm run build
tsconfig.json中outDir配置为./dist并且noEmit为false或已移除。 - 运行生产版本:
pnpm run start
EXTERNAL_NCM_API_URL( 必需 ): 指定外部回退 NCM API 的基础 URL (例如:https://ncm-api/lyric/new)。服务器在启动时会检查此变量。PORT: 指定服务器监听的端口 (默认:3000)。
这是一个标准的 Node.js Fastify 应用,可以部署到任何支持 Node.js 的平台,例如 Heroku, Render, Fly.io, 或你自己的服务器。确保目标环境安装了生产依赖 (dependencies 而非 devDependencies),设置了必需的环境变量 (EXTERNAL_NCM_API_URL),并使用 pnpm run start (或等效命令) 启动。
GNU GENERAL PUBLIC LICENSE v3.