一、环境准备

仅需安装requests库(用于发送网络请求),命令如下:

pip install requests

二、核心API详解

获取歌词需分两步:先通过“搜索API”获取歌曲ID,再通过“歌词API”获取原文+翻译歌词,以下是两个接口的完整使用说明、功能及示例。

(一)歌词API(核心,获取原文/翻译歌词)

功能:根据歌曲ID,获取带时间轴的原文歌词或翻译歌词,返回JSON格式数据。

1. 接口地址:https://music.163.com/api/song/lyric
2. 请求方式:GET
3. 必传参数(参数说明及取值):

os:固定取值为pc,用于接口校验,无其他业务影响;

id:歌曲唯一ID(需通过下方“搜索API”获取);

lv:控制返回原文歌词,取值为-1,返回带时间轴的原文歌词;

tv:控制返回翻译歌词,取值为-1,返回带时间轴的翻译歌词。

4. 示例请求:

获取原文歌词(带时间轴):GET https://music.163.com/api/song/lyric?os=pc&id=1900172235&lv=-1

获取翻译歌词(带时间轴):GET https://music.163.com/api/song/lyric?os=pc&id=1900172235&tv=-1

5. JSON返回格式(精简核心内容):
{
    "sgc": false,
    "sfy": false,
    "qfy": false,
    "transUser": {
        "id": 3954145,
        "nickname": "Crazy_Knight"
    },
    "lyricUser": {
        "id": 3954139,
        "nickname": "color-9"
    },
    "lrc": {
        "version": 15,
        "lyric": "[00:00.617]这个世上没有比假花更美的花\n[00:05.748]因为它完全是由虚假所构成\n 其他歌词省略"
    },
    "code": 200

}
6. 歌词提取示例(Python):
import json

# 假设data是从接口获取的JSON字符串
data = '''{
    "lrc": {
        "version": 15,
        "lyric": "第一行歌词\n第二行歌词\n第三行歌词"
    }
}'''

# 解析JSON并提取歌词
obj = json.loads(data)
lyric_text = obj['lrc']['lyric']  # 提取完整带时间轴歌词
lines = lyric_text.split('\n')    # 可选:按行拆分歌词,方便查看

(二)搜索API(获取歌曲ID)

功能:根据歌曲名称,搜索相关歌曲,返回歌曲ID、歌手等信息,用于后续调用歌词API。

1. 接口地址:https://music.163.com/api/search/get

2. 请求方式:GET

3. 必传参数(参数说明及取值):

type:固定取值为1,表示搜索类型为“歌曲”;

s:需搜索的歌曲名称(可搭配歌手名,如フォニイ;可不,提高匹配度);

limit:返回的歌曲数量,可根据需求设置(如2表示返回前2条匹配结果)。

4. 示例请求:

GET https://music.163.com/api/search/get/?s=フォニイ;可不&type=1&limit=2

5. JSON返回格式(精简核心内容):

{
    "result": {
        "songs": [
            {
                "id": 1900172235,
                "name": "フォニイ",
                "artists": [{"name": "可不"}, {"name": "ツミキ"}]
            },
            {
                "id": 1864969357,
                "name": "フォニイ(偽物/phony)(翻自 可不)",
                "artists": [{"name": "Yvan叶子"}, {"name": "翼と実TsubasatMi"}]
            }
        ],
        "hasMore": true,
        "songCount": 10
    },
    "code": 200
}

6. 歌曲ID提取示例(Python):

import json

data = '''上述JSON字符串'''
obj = json.loads(data)

songs_info = []
for song in obj['result']['songs']:
    song_id = song['id']
    # 提取歌手名称,处理多歌手情况
    artist_names = [artist.get('name', '未知') for artist in song['artists']]
    songs_info.append({'id': song_id, 'artists': artist_names})

 输出结果
for info in songs_info:
    print(f"歌曲ID: {info['id']}, 歌手昵称: {', '.join(info['artists'])}")

   7. 提取示例输出:

歌曲ID: 1900172235, 歌手昵称: 可不, ツミキ
歌曲ID: 1864969357, 歌手昵称: Yvan叶子, 翼と実TsubasatMi
总结:通过“搜索API获取歌曲ID”→“歌词API获取原文/翻译歌词”,两步即可实现通过歌曲名获取带时间轴的歌词及翻译。
1.搜索API(获取歌曲ID):https://music.163.com/api/search/get,参数:type=1(歌曲)、s=歌名、limit=返回数量
2.歌词API(获取原文/翻译):https://music.163.com/api/song/lyric,参数:os=pc、id=歌曲ID、lv=-1(原文)、tv=-1(翻译)

三、完整代码(可直接运行)

import requests


HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}

def get_song_id(song_name):
    search_url = "https://music.163.com/api/search/get"
    params = {"type": 1, "s": song_name, "limit": 1}  # 只返回1首匹配歌曲
    res = requests.get(search_url, params=params, headers=HEADERS)
    return res.json()["result"]["songs"][0]["id"]  # 返回第1首歌的ID

def get_lyric(song_id, is_trans=False):
    lyric_url = "https://music.163.com/api/song/lyric"
    params = {"os": "pc", "id": song_id, "lv": -1, "tv": -1 if is_trans else 0}
    res = requests.get(lyric_url, params=params, headers=HEADERS)
    return res.json()["lrc"]["lyric"] if res.json()["lrc"]["lyric"] else "暂无歌词"

if __name__ == "__main__":
    song_name = input("请输入歌曲名称:")
    song_id = get_song_id(song_name)
    print("原文歌词:\n", get_lyric(song_id))
    print("\n翻译歌词:\n", get_lyric(song_id, is_trans=True))

四、使用方法

1.将代码保存为.py文件;

2.终端执行python 文件名.py;

3.输入歌名,即可自动打印原文和翻译歌词。

本文由techcrafts首发!