歌词获取工具 HTTP API 文档
1. 基本信息
| 项目 | 说明 |
|---|---|
| Base URL | https://c.cdgz.top |
| 字符编码 | UTF-8 |
| 服务认证 | 当前未设置 LyricGET API Key 或登录认证 |
| 跨域访问 | 已启用 CORS |
| 压缩 | 请求包含 Accept-Encoding: gzip 且文本响应不小于 1 KiB 时可能返回 gzip |
| 调用模式 | 同步请求;歌词接口会等待对应平台适配器执行完成 |
所有响应都可能包含以下性能诊断头:
Server-Timing: app;dur=12.34
歌词接口的外部平台访问时间受网络、地区限制及平台限流影响。客户端超时时间建议设置为至少 65 秒,与项目网页端保持一致。
2. 接口总览
| 方法 | 路径 | 说明 | 成功响应类型 |
|---|---|---|---|
POST |
/get-lyrics |
根据歌曲或专辑 URL 获取歌词 | JSON |
GET |
/api/apple |
获取 Apple Music 歌词文本文件 | UTF-8 纯文本 |
GET |
/api/platforms |
获取当前支持的平台及适配器目录 | JSON |
POST |
/convert_text |
简繁转换及异体字标准化 | JSON |
3. 获取歌词
POST /get-lyrics
根据 URL 自动识别音乐平台,执行对应歌词适配器,并返回统一 JSON。
请求头
Content-Type: application/json
Accept: application/json
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
url |
string | 是 | 支持平台的歌曲或专辑 URL |
token |
string | 条件必填 | 平台用户 token;Apple Music 必填,其他平台按需传入 |
Token 行为:
| 平台 | 要求 | 行为 |
|---|---|---|
| Apple Music | 必填 | 作为 media-user-token 使用;每次都重新请求 Apple API |
| Musixmatch | 可选 | 提供 token 时改用 token 适配器 |
| QQ 音乐 | 可选 | token 包含 喵或 nya 时使用时间轴歌词适配器,否则使用普通歌词适配器 |
| 其他平台 | 通常不需要 | 未定义特殊逻辑的平台不会使用该字段 |
cURL 示例
普通平台:
curl --request POST "https://c.cdgz.top/get-lyrics" \
--header "Content-Type: application/json" \
--data '{"url":"https://genius.com/artist-song-lyrics"}'
网易云音乐单曲(桌面、移动端及短链均可):
curl --request POST "https://c.cdgz.top/get-lyrics" \
--header "Content-Type: application/json" \
--data '{"url":"https://music.163.com/song?id=3420884375"}'
网易云音乐专辑:
curl --request POST "https://c.cdgz.top/get-lyrics" \
--header "Content-Type: application/json" \
--data '{"url":"https://music.163.com/album?id=390229202"}'
Apple Music:
curl --request POST "https://c.cdgz.top/get-lyrics" \
--header "Content-Type: application/json" \
--data '{
"url":"https://music.apple.com/us/song/example/123456789",
"token":"YOUR_MEDIA_USER_TOKEN"
}'
JavaScript:
const response = await fetch("https://example.com/get-lyrics", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
url: "https://music.apple.com/us/song/example/123456789",
token: "YOUR_MEDIA_USER_TOKEN",
}),
});
const data = await response.json();
if (!response.ok) {
throw new Error(data.error || `HTTP ${response.status}`);
}
console.log(data.lyrics);
普通成功响应
状态码:200 OK
{
"lyrics": "[00:01.20]第一行歌词\n[00:05.40]第二行歌词",
"status": "success"
}
| 字段 | 类型 | 说明 |
|---|---|---|
lyrics |
string | 适配器返回的歌词文本,可能包含 LRC 时间轴、标题或平台特有分隔符 |
status |
string | 成功时为 success |
script_warning |
string | 可选;适配器退出成功但向 stderr 输出的提示信息 |
status: success 表示适配器正常退出并形成响应;当第三方平台没有提供歌词时,lyrics 仍可能为空。
带歌曲元数据的成功响应
部分平台会额外返回歌曲信息:
{
"lyrics": "歌词正文",
"title": "歌曲名",
"artist": "歌手名",
"status": "success"
}
当前支持结构化 title、artist 的适配器包括 AWA、Uta-Net、J-Lyric、JOYSOUND、PetitLyrics、Utaten、Animesongz、TuneCore 和网易云音乐。
网易云音乐行为
- 支持
music.163.com的单曲、专辑、移动端及#/song、#/album链接,也支持163cn.tv等网易云短链解析。 - 单曲请求调用本机网易云 API 的
/lyric/new?id=...和/song/detail?ids=...,分别取得歌词与歌曲名/艺人名。 - 专辑请求只调用一次
/album?id=...取得曲序及歌曲名/艺人名,再并发调用各曲目的/lyric/new?id=...;不会为专辑曲目调用/song/detail。 - 返回的网易云歌词已移除 LRC 时间轴、作词/作曲等创作者信息;时间戳表示的空行仍保留为空白行。
- 本机网易云 API 基地址默认为
http://127.0.0.1:3000。部署时可用LYRICGET_NETEASE_API_BASE_URL覆盖。
专辑/多曲目响应
当网易云专辑或 LinkCore/TuneCore 链接解析出多首歌曲时,返回:
{
"status": "success",
"album_links": [
"https://music.163.com/song?id=3420884375"
],
"all_lyrics": [
{
"url": "https://music.163.com/song?id=3420884375",
"lyrics": "歌词正文",
"title": "歌曲名",
"artist": "歌手名"
}
]
}
单曲处理失败时,对应数组元素可能改为:
{
"url": "https://music.163.com/song?id=3420884375",
"title": "歌曲名",
"artist": "歌手名",
"error": "未找到歌词"
}
缓存响应头
X-LyricGET-Cache: HIT
或:
X-LyricGET-Cache: MISS
- 非 Apple 平台只缓存包含歌词的成功结果。
- 默认缓存时间为 5 分钟,缓存键由 URL 和 token 的 SHA-256 哈希构成。
- 错误、超时和空歌词不缓存。
- Apple Music 完全绕过歌词结果缓存,始终返回
MISS。 - Apple Music 响应同时包含:
Cache-Control: no-store, private, max-age=0
Pragma: no-cache
Expires: 0
错误响应
基础错误结构:
{
"error": "错误说明"
}
适配器执行失败时可能包含诊断字段:
{
"error": "请求被暂时拦截,请稍后再试",
"script_error": "上游错误信息",
"return_code": 1
}
| HTTP 状态码 | 场景 |
|---|---|
400 |
请求体为空、URL 为空、token 类型错误、URL 不属于支持平台、Apple token 缺失 |
403 |
UtaTime/Uta-Net 类适配器被上游拦截,并可能在响应中提供人工获取说明 |
404 |
对应适配器文件不存在 |
429 |
目标站点已被服务端临时标记为不可用 |
500 |
适配器非零退出、第三方平台请求失败、权限错误或服务内部异常 |
504 |
适配器执行超过服务端截止时间 |
通用内部异常可能返回:
{
"error": "处理请求时出错",
"details": "异常详情",
"type": "ExceptionType"
}
4. Apple Music 文本下载
GET /api/apple
专用于返回可下载的 Apple Music UTF-8 歌词文本。该接口与 /get-lyrics 使用相同的 Apple 适配器,但成功响应不是 JSON。
Query 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url |
string | 是 | Apple Music 歌曲或专辑 URL |
token |
string | 是 | 用户的 Apple Music media-user-token |
参数必须进行 URL 编码。
cURL 示例
curl --get "https://c.cdgz.top/api/apple" \
--data-urlencode "url=https://music.apple.com/us/song/example/123456789" \
--data-urlencode "token=YOUR_MEDIA_USER_TOKEN" \
--output lyrics.txt
成功响应
状态码:200 OK
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="example.txt"
X-LyricGET-Cache: MISS
Cache-Control: no-store, private, max-age=0
Pragma: no-cache
Expires: 0
响应体为歌词纯文本:
歌曲标题
[00:01.20]第一行歌词
[00:05.40]第二行歌词
文件名取自 Apple Music URL 中的歌曲或专辑 slug,并清理不安全字符;无法提取时使用 apple_music_lyrics.txt。
错误响应
错误仍以 JSON 返回:
{
"error": "Token 无效/过期或链接错误"
}
| HTTP 状态码 | 场景 |
|---|---|
400 |
URL/token 缺失,或 URL 不是 Apple Music 链接 |
401 |
Apple 适配器报告 403 Forbidden,通常与 token、链接或权限有关 |
404 |
内容不存在,或未在 token 对应区域上线 |
500 |
Apple 请求、解析或服务内部处理失败 |
504 |
Apple 适配器执行超过 38 秒 |
6. 歌词文字转换
POST /convert_text
执行简繁转换或 CJK 异体字标准化。
请求头
Content-Type: application/json
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
text |
string | 是 | 待转换文本;服务端会移除首尾空白 |
convert_type |
string | 是 | 转换类型,见下表 |
convert_type |
作用 | 成功响应中的 conversion_type |
|---|---|---|
to_simplified |
繁体转简体 | 繁体转简体 |
to_traditional |
简体转繁体 | 简体转繁体 |
normalize_variants |
CJK 异体字标准化 | 异体字标准化 |
cURL 示例
curl --request POST "https://c.cdgz.top/convert_text" \
--header "Content-Type: application/json" \
--data '{"text":"漢字歌詞","convert_type":"to_simplified"}'
成功响应
状态码:200 OK
{
"success": true,
"converted_text": "汉字歌词",
"original_length": 4,
"converted_length": 4,
"conversion_type": "繁体转简体"
}
错误响应
{
"success": false,
"error": "文本内容为空"
}
| HTTP 状态码 | 场景 |
|---|---|
400 |
JSON 请求体为空、文本为空或转换类型无效 |
500 |
转换器执行失败 |
7. 当前支持的平台
建议通过 /api/platforms 动态读取支持列表。当前代码包含以下域名:
| 域名 | 平台 |
|---|---|
awa.fm |
AWA |
uta-net.com |
Uta-Net |
animesongz.com |
Animesongz |
genius.com |
GENIUS |
j-lyric.net |
J-Lyric.net |
joysound.com |
JOYSOUND |
j-total.net |
J-Total |
kkbox.com |
KKBOX |
music.line.me |
LINE MUSIC |
utatime.com |
UtaTime |
lyrical-nonsense.com |
UtaTime |
musixmatch.com |
Musixmatch |
petitlyrics.com |
PetitLyrics |
rocklyric.jp |
ROCK LYRIC |
linkco.re |
TuneCore Japan / LinkCore |
utaten.com |
Utaten |
music.163.com、163cn.tv |
网易云音乐 |
y.qq.com |
QQ 音乐 |
lyricstranslate.com |
LyricsTranslate |
piapro.jp |
piapro |
joox.com |
JOOX |
music.apple.com |
Apple Music |
karent.jp |
KARENT |
qishui.douyin.com |
汽水音乐 |