CDGZofc / 猫猫说的对!
猫猫
说的对
CDGZ-LOGO

歌词获取工具 HTTP API 文档

2026-09-03 20:02:00 | CATEGORY: 项目功能

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 汽水音乐