You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python解析Musixmatch API JSON响应获取歌词遇阻求助

搞定Musixmatch API JSON解析问题

嘿,我来帮你解决这个解析难题!先看看你代码里的几个小问题,再给你靠谱的处理方案:

先修正代码里的明显错误

  1. 导入语句错误from os.path import json 完全没必要,os.path模块里根本没有json,你已经单独import json了,把这行改成from os.path import dirname(如果后续用不到dirname,甚至可以直接删掉这行)。
  2. 变量名不匹配:你把API返回结果存在lyrics里,但后面遍历用的是jsonLyric,这会直接触发NameError,得统一变量名。
  3. 遍历逻辑不对:Musixmatch的响应是固定层级结构,不需要多层嵌套循环,直接按层级访问就行。

修正后的完整代码示例

import json
from musixmatch import Musixmatch

# 替换成你的真实API密钥
musixmatch = Musixmatch("your_api_key_here")
# 请求歌词数据
lyrics_response = musixmatch.matcher_lyrics_get('Grenade', 'Bruno Mars')

# 可选:打印格式化后的响应,方便查看完整结构(内容多的话可以存到文件里看)
# print(json.dumps(lyrics_response, indent=2))

# 逐层解析响应
message = lyrics_response.get('message')
if message:
    # 先检查请求是否成功(状态码200是成功)
    header = message.get('header')
    if header.get('status_code') == 200:
        body = message.get('body')
        if body:
            # 拿到核心的歌词数据对象
            lyrics_data = body.get('lyrics')
            if lyrics_data:
                # 提取歌词文本
                print("=== 歌词内容 ===")
                print(lyrics_data.get('lyrics_body'))
                # 还能提取其他字段,比如版权信息
                print("\n=== 版权信息 ===")
                print(lyrics_data.get('lyrics_copyright'))
    else:
        print(f"请求失败,状态码:{header.get('status_code')},错误信息:{header.get('hint')}")
else:
    print("API返回格式异常,请检查请求参数")

为什么要这么写?

Musixmatch API的响应结构是固定的,核心层级是:
响应字典 -> 'message' -> 'body' -> 'lyrics'
lyrics对象里包含了你需要的所有歌词相关字段,比如lyrics_body(歌词文本)、lyrics_idexplicit等,直接按这个层级访问就好,不需要循环遍历。

如果还是遇到问题,你可以把完整的JSON响应贴出来,我帮你再精准排查~

内容的提问来源于stack exchange,提问作者Quinton Jackson

火山引擎 最新活动