You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LastFM API调用track.scrobble时遇协议版本错误求助

问题:LastFM track.scrobble 接口返回协议版本错误

已完成LastFM认证及GET请求,但调用track.scrobble接口时,请求返回状态码200,却收到错误提示:FAILED Incorrect protocol version (missing clientID/version/username)

初始请求配置

  • URL:http://ws.audioscrobbler.com/2.0/?method=track.scrobble&api_key={YOUR_API_KEY}&sk={SESSION_KEY}&api_sig{API_SIGNATURE}&user={USERNAME}
  • Headers:Content-Type: application/x-www-form-urlencoded
  • Body:"artist=Kanye+West&timestamp={TIMESTAMP}&track=Heartless"

实际请求代码(Godot 3.5.1)

var body = "method=track.scrobble&api_key={YOUR_API_KEY}&sk={SESSION_KEY}&api_sig{API_SIGNATURE}&artist=Daniel+Caesar&timestamp={TIMESTAMP}&track=Pseudo".format(
            {
                "YOUR_API_KEY" : APIKey,
                "SESSION_KEY" : session_key,
                "TIMESTAMP" :  str(OS.get_unix_time() - 31),
                "API_SIGNATURE" : ConstructMD5Hash()
            }
        )
    HTTP.request(
        url,
        headers,
        true,
        HTTPClient.METHOD_POST,
        body
    )
    HTTP.connect("request_completed",self,"replace_tag")

API签名构造代码

func ConstructMD5Hash() -> String:
return LastFM_MD5_Hash_Template.format(
    {
        "YOUR_API_KEY" : APIKey,
        "REQUEST_TOKEN" : request_token,
        "MY_SECRET" : APISecret,
    }
).md5_text()

完整响应

[Server: openresty/1.13.6.2, Date: Mon, 30 Jan 2023 17:10:21 GMT, Content-Type: text/plain; charset=utf-8, Transfer-Encoding: chunked, Access-Control-Allow-Methods: POST, GET, OPTIONS, Access-Control-Allow-Origin: *, Access-Control-Max-Age: 86400, Via: 1.1 google]
FAILED Incorrect protocol version (missing clientID/version/username)


问题排查与解决建议
  1. 修正API签名构造逻辑

    • LastFM的API签名必须包含所有POST参数(除api_sig本身),拼接API密钥后做MD5哈希。当前签名仅用了api_key、request_token和secret,遗漏了scrobble请求的核心参数(method、sk、artist、track、timestamp),导致签名无效触发错误。
    • 正确步骤:
      1. 收集所有请求参数:method=track.scrobble、api_key=xxx、sk=xxx、artist=xxx、track=xxx、timestamp=xxx、api_version=1.2.1、client=自定义客户端ID
      2. 按参数名字典序排序
      3. 拼接成无分隔符的字符串(如artistDanielCaesarapi_keyxxx...)
      4. 末尾追加API Secret,整体做MD5哈希得到api_sig
  2. 修复参数传递方式

    • POST请求参数需全部放在Body中,URL仅保留基础地址http://ws.audioscrobbler.com/2.0/即可,避免URL与Body重复传参。
    • 注意URL中api_sig{API_SIGNATURE}缺少等号,正确格式为api_sig={API_SIGNATURE},但建议将该参数移至Body。
  3. 补充客户端版本参数

    • 按错误提示,需添加api_version(如1.2.1)和client(自定义客户端标识,如mygodotscrobbler1.0)参数,且这两个参数也要纳入签名构造。
  4. 验证时间戳合法性

    • 确保timestamp为秒级Unix时间戳,与当前时间差不超过180秒,当前OS.get_unix_time() -31符合要求,需确认格式为纯整数无多余字符。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:27:24