Python - 从 musixmatch json 响应中获取歌词
Python - Getting lyrics back from musixmatch json response
在 Python 中,我正在尝试解析来自 musixmatch api 的 json 响应,但我无法弄清楚如何访问给定的信息,请帮忙!
如有必要,我可以稍后 post JSON 回复,但它有很多文字。
import json
from os.path json, dirname
from musixmatch import Musixmatch
musixmatch = Musixmatch(<api key>)
lyrics = musixmatch.matcher_lyrics_get('Grenade', 'Bruno Mars')
print (lyrics)
for item in jsonLyric['message']:
for thing in item['body']:
for stuff in thing['lyrics']:
print(stuff['lyrics_body'])
这是我用打印(歌词)返回的输出
{"message": {"header": {"status_code": 200, "execute_time": 0.005511999130249}, "body": {"lyrics": {"lyrics_id": 14678126, "can_edit": 0, "locked": 1, "published_status": 3, "action_requested": "", "verified": 0, "restricted": 0, "instrumental": 0, "explicit": 0, "lyrics_body": "Easy come, easy go, that's just how you live oh\nTake, take, take it all, but you never give\nShould have known you was trouble from the first kiss\nHad your eyes wide open,\nWhy were they open?\n\nGave you all I had and you tossed it in the trash\nYou tossed it in the trash, you did\nTo give me all your love is all I ever asked 'cause\nWhat you don't understand is I'd catch a grenade for ya (yeah, yeah)\nThrow my head on a blade for ya (yeah, yeah)\nI'd jump in front of a train for ya (yeah, yeah)\nYou know I'd do anything for ya (yeah, yeah)\n\nOh oh, I would go through all this pain\nTake a bullet straight through my brain\nYes, I would die for ya baby\nBut you won't do the same\n\nNo, no, no, no\n...\n\n******* This Lyrics is NOT for Commercial use *******", "lyrics_language": "en", "lyrics_language_description": "English", "script_tracking_url": "https://tracking.musixmatch.com/t1.0/m_js/e_1/sn_0/l_14678126/su_0/rs_0/tr_3vUCALM0_W22leSuW0j51mdZjjfpE4x6a9jOCvWJRkoOBKyShPRRZQELOwGOsZtDZ8P7rI_Ugft_vMQta6YUky74d5X3RIpnkF1GkipbfBPqaDh2M9h4wtFKqwGgJoy8k52jf0kTKu2GFboxJpmcZP_TL17Tt5-rkmsIOB4VQk1LX_s66Du-rGVtu_NcuDuzquhrpHnIEyygjxJGcHYfbpHfFt3gDfDkAfuv25OHWoHt6FJarcoSeY5eloAlMJtqtQqXVIU4bVp3zmqnTdEsjj5mvyBOq2Yvl_WRsRYBiSP4fISEiW8Nz_cwKdLFqVo-9L4Pcz7ryASfVXfRD-nROD18LJIBomN5JzzcPMk9hEjHwmxt9PUccK5e_G23RYrgXgrWJlVQUyoIX5CNb_3IW893C0xfSrEm/", "pixel_tracking_url": "https://tracking.musixmatch.com/t1.0/m_img/e_1/sn_0/l_14678126/su_0/rs_0/tr_3vUCAB0Xj7CAyD4mjojoI5pSqo0L_Qojn7Q9jhh7eIMnru0DnnnxducKM9BTbyEX19XGYKgaLEjaRJUedry3aKHTl45sXeTudU6Y5g6DYg4UqxqUZVQuGT8RofGA25JeQfvfJnabBr4Ua2rDhu52CH9gY5T4MO58sTV_WEnz1OeovHSJJrcR7FJ6dGtZ7ddBSj5DAs3tXvKVZM-CMngsa4lVHgJvlKyQBI9dIlKpIasxUiHE8ESQ5nvq355A-9hB38ZO1xBSBE_poFKeFODVuxAYwt61nwkcy1INwNyRfu-88W0T8qdzmNdHPzC3CZ13W6_zvJQs144ir8AMF_ScjfXdyIZ5rBKT3yQYp4BIAuWYALrfv87mitBdkqukq_HiN79vaqsKTpn2dr5-IMe97ioMeI4xHwX2/", "html_tracking_url": "https://tracking.musixmatch.com/t1.0/m_html/e_1/sn_0/l_14678126/su_0/rs_0/tr_3vUCANQr9qsfeDL9iPgGrXIvJIBLLsgir3pFRzL4BslntB9GYllG57LNZuNC08A5g3r87JYVDgKTKk4QfYdU-j3sfs8i8onqzpCCV_w27R7ePS_k13wHNHBfSZpHQcJL4ocPj9i9E-Cms8yT9q4vLC31c3DGfudXXV6k5MajtdCVZdHaHfeNNm6tmstseeFCD6MuQxmRRkiUmHYTfgi2TfPwR4CzOZbEdULg5X6AHiiT4MMfIKAspZwghHUMhq3udos-8052sIMMUyB8nQrquajI8ZyZGX9UzKQi21ZDfyFz5fyUF9gYwzX4WA1gxhmVlsppG_-ocY7m29ddOUjEcg0HM0b7CsrJw8tAtcnwLnFovDcW-a7xzNUDlCkqXBLU_sDVg_na0uE4fH1QuYFKvwX5bwlQ1d-l/", "lyrics_copyright": "Lyrics powered by www.musixmatch.com. This Lyrics is NOT for Commercial use and only 30% of the lyrics are returned.", "writer_list": [], "publisher_list": [], "backlink_url": "https://www.musixmatch.com/lyrics/Bruno-Mars/Grenade?utm_source=application&utm_campaign=api&utm_medium=", "updated_time": "2016-03-18T14:38:56Z"}}}}
所以可以看出 JSON 响应是一个字典,它里面有许多其他字典,但我们想要达到的是 body 字典,其中包含 "lyrics_body" 和它的价值。
我们怎么能这样做?其实很简单。在一行中,我们可以继续调用字典并传递包含另一个键的键,例如,我们要访问的第一个字典是整个 JSON 响应,因此我们可以调用 lyrics 变量,其中包含 JSON响应,然后我们传递我们想要访问的密钥在这种情况下"message",歌词["message"].
print(lyrics["message"]["body"]["lyrics"]["lyrics_body"])
你做的方法也很简单。您只想遍历集成词典中的每个键。
for message in lyrics:
for body in lyrics[message]:
if body == "body":
for lyric in lyrics[message][body]:
for lyrBod in lyrics[message][body][lyric]:
if lyrBod == "lyrics_body":
print(lyrics[message][body][lyric][lyrBod])
如您所见,两者是一样的,只是需要更长的时间。
希望对您有所帮助
在 Python 中,我正在尝试解析来自 musixmatch api 的 json 响应,但我无法弄清楚如何访问给定的信息,请帮忙! 如有必要,我可以稍后 post JSON 回复,但它有很多文字。
import json
from os.path json, dirname
from musixmatch import Musixmatch
musixmatch = Musixmatch(<api key>)
lyrics = musixmatch.matcher_lyrics_get('Grenade', 'Bruno Mars')
print (lyrics)
for item in jsonLyric['message']:
for thing in item['body']:
for stuff in thing['lyrics']:
print(stuff['lyrics_body'])
这是我用打印(歌词)返回的输出
{"message": {"header": {"status_code": 200, "execute_time": 0.005511999130249}, "body": {"lyrics": {"lyrics_id": 14678126, "can_edit": 0, "locked": 1, "published_status": 3, "action_requested": "", "verified": 0, "restricted": 0, "instrumental": 0, "explicit": 0, "lyrics_body": "Easy come, easy go, that's just how you live oh\nTake, take, take it all, but you never give\nShould have known you was trouble from the first kiss\nHad your eyes wide open,\nWhy were they open?\n\nGave you all I had and you tossed it in the trash\nYou tossed it in the trash, you did\nTo give me all your love is all I ever asked 'cause\nWhat you don't understand is I'd catch a grenade for ya (yeah, yeah)\nThrow my head on a blade for ya (yeah, yeah)\nI'd jump in front of a train for ya (yeah, yeah)\nYou know I'd do anything for ya (yeah, yeah)\n\nOh oh, I would go through all this pain\nTake a bullet straight through my brain\nYes, I would die for ya baby\nBut you won't do the same\n\nNo, no, no, no\n...\n\n******* This Lyrics is NOT for Commercial use *******", "lyrics_language": "en", "lyrics_language_description": "English", "script_tracking_url": "https://tracking.musixmatch.com/t1.0/m_js/e_1/sn_0/l_14678126/su_0/rs_0/tr_3vUCALM0_W22leSuW0j51mdZjjfpE4x6a9jOCvWJRkoOBKyShPRRZQELOwGOsZtDZ8P7rI_Ugft_vMQta6YUky74d5X3RIpnkF1GkipbfBPqaDh2M9h4wtFKqwGgJoy8k52jf0kTKu2GFboxJpmcZP_TL17Tt5-rkmsIOB4VQk1LX_s66Du-rGVtu_NcuDuzquhrpHnIEyygjxJGcHYfbpHfFt3gDfDkAfuv25OHWoHt6FJarcoSeY5eloAlMJtqtQqXVIU4bVp3zmqnTdEsjj5mvyBOq2Yvl_WRsRYBiSP4fISEiW8Nz_cwKdLFqVo-9L4Pcz7ryASfVXfRD-nROD18LJIBomN5JzzcPMk9hEjHwmxt9PUccK5e_G23RYrgXgrWJlVQUyoIX5CNb_3IW893C0xfSrEm/", "pixel_tracking_url": "https://tracking.musixmatch.com/t1.0/m_img/e_1/sn_0/l_14678126/su_0/rs_0/tr_3vUCAB0Xj7CAyD4mjojoI5pSqo0L_Qojn7Q9jhh7eIMnru0DnnnxducKM9BTbyEX19XGYKgaLEjaRJUedry3aKHTl45sXeTudU6Y5g6DYg4UqxqUZVQuGT8RofGA25JeQfvfJnabBr4Ua2rDhu52CH9gY5T4MO58sTV_WEnz1OeovHSJJrcR7FJ6dGtZ7ddBSj5DAs3tXvKVZM-CMngsa4lVHgJvlKyQBI9dIlKpIasxUiHE8ESQ5nvq355A-9hB38ZO1xBSBE_poFKeFODVuxAYwt61nwkcy1INwNyRfu-88W0T8qdzmNdHPzC3CZ13W6_zvJQs144ir8AMF_ScjfXdyIZ5rBKT3yQYp4BIAuWYALrfv87mitBdkqukq_HiN79vaqsKTpn2dr5-IMe97ioMeI4xHwX2/", "html_tracking_url": "https://tracking.musixmatch.com/t1.0/m_html/e_1/sn_0/l_14678126/su_0/rs_0/tr_3vUCANQr9qsfeDL9iPgGrXIvJIBLLsgir3pFRzL4BslntB9GYllG57LNZuNC08A5g3r87JYVDgKTKk4QfYdU-j3sfs8i8onqzpCCV_w27R7ePS_k13wHNHBfSZpHQcJL4ocPj9i9E-Cms8yT9q4vLC31c3DGfudXXV6k5MajtdCVZdHaHfeNNm6tmstseeFCD6MuQxmRRkiUmHYTfgi2TfPwR4CzOZbEdULg5X6AHiiT4MMfIKAspZwghHUMhq3udos-8052sIMMUyB8nQrquajI8ZyZGX9UzKQi21ZDfyFz5fyUF9gYwzX4WA1gxhmVlsppG_-ocY7m29ddOUjEcg0HM0b7CsrJw8tAtcnwLnFovDcW-a7xzNUDlCkqXBLU_sDVg_na0uE4fH1QuYFKvwX5bwlQ1d-l/", "lyrics_copyright": "Lyrics powered by www.musixmatch.com. This Lyrics is NOT for Commercial use and only 30% of the lyrics are returned.", "writer_list": [], "publisher_list": [], "backlink_url": "https://www.musixmatch.com/lyrics/Bruno-Mars/Grenade?utm_source=application&utm_campaign=api&utm_medium=", "updated_time": "2016-03-18T14:38:56Z"}}}}
所以可以看出 JSON 响应是一个字典,它里面有许多其他字典,但我们想要达到的是 body 字典,其中包含 "lyrics_body" 和它的价值。
我们怎么能这样做?其实很简单。在一行中,我们可以继续调用字典并传递包含另一个键的键,例如,我们要访问的第一个字典是整个 JSON 响应,因此我们可以调用 lyrics 变量,其中包含 JSON响应,然后我们传递我们想要访问的密钥在这种情况下"message",歌词["message"].
print(lyrics["message"]["body"]["lyrics"]["lyrics_body"])
你做的方法也很简单。您只想遍历集成词典中的每个键。
for message in lyrics:
for body in lyrics[message]:
if body == "body":
for lyric in lyrics[message][body]:
for lyrBod in lyrics[message][body][lyric]:
if lyrBod == "lyrics_body":
print(lyrics[message][body][lyric][lyrBod])
如您所见,两者是一样的,只是需要更长的时间。
希望对您有所帮助