使用JavaScript调用Last.FM API时部分曲目出现Error Code 5问题求助
解决Last.FM JS包装器track.getInfo部分曲目报错错误码5的问题
问题分析
你遇到的错误码5(无效响应格式),看似是格式参数问题,但实际大概率是包装器对含特殊字符的参数处理存在bug。比如Mobb Deep的《Survival of The Fittest》包含空格、大小写混合字符,可能请求时未正确编码,导致Last.FM API无法识别请求格式,进而返回错误。
解决方案
1. 强制传递format并编码曲目名称
尝试手动对track名称做URL编码,同时强制指定format参数,确保包装器正确传递该参数:
async function lastFMTest(){ const trackName = encodeURIComponent('Survival of The Fittest'); const data = await lastfm.track.getInfo({ artist: 'Mobb Deep', track: trackName, username: 'NAG_Z', autocorrect: '1', format: 'json' }); console.log(data.track.name, data.track.userplaycount, data.track.toptags.tag[0].name); }
2. 直接使用原生Fetch请求(绕过包装器)
如果包装器本身存在参数处理缺陷,直接构造API请求更可靠:
async function lastFMTestDirect() { const API_KEY = '你的Last.FM API密钥'; // 替换成你的密钥 const params = new URLSearchParams({ method: 'track.getInfo', artist: 'Mobb Deep', track: 'Survival of The Fittest', username: 'NAG_Z', autocorrect: 1, format: 'json', api_key: API_KEY }); const response = await fetch(`https://ws.audioscrobbler.com/2.0/?${params}`); const data = await response.json(); if (data.error) { console.error('请求错误:', data); return; } console.log(data.track.name, data.track.userplaycount, data.track.toptags.tag[0].name); }
3. 检查包装器的参数处理逻辑
查看该包装器的源码,确认它是否自动添加format=json参数,或是处理特殊字符时存在编码遗漏。如果是包装器的bug,可以提交issue或自行修改源码中的参数处理部分。
内容的提问来源于stack exchange,提问作者NAGZ
相关产品推荐
相关产品推荐

