打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
琪露若留言 | 贡献2025年6月20日 (五) 11:34的版本 (remake)
local p = {}

-- 主函数:获取心率数据
function p.getHeartRate(frame)
    local args = frame.args
    local apiUrl = args.url
    
    -- 使用ExternalData获取数据
    local data, errorInfo = mw.ext.externalData.get {data = apiUrl}
    
    -- 安全解析JSON数据
    local jsonData
    local parseStatus, parseError = pcall(function()
        jsonData = mw.text.jsonDecode(data)
    end)
    
    if not parseStatus then
        return "错误: JSON解析失败 - " .. tostring(parseError)
    end
    
    -- 验证数据结构
    if type(jsonData) ~= "table" then
        return "错误: 返回的数据不是JSON对象"
    end
    
    -- 提取心率值(使用多级验证)
    if jsonData.message ~= "ok" then
        return "错误: API返回状态异常 - " .. (jsonData.message or "未知")
    end
    
    if type(jsonData.data) ~= "table" then
        return "错误: 缺少数据字段"
    end
    
    local heartRate = jsonData.data.heart_rate
    if type(heartRate) ~= "number" then
        return "错误: 心率值无效或缺失"
    end
    
    -- 返回有效的心率值
    return heartRate
end

-- 带格式化输出的版本
function p.formattedHeartRate(frame)
    local heartRate = p.getHeartRate(frame)
    
    -- 如果是数字则格式化,否则返回错误信息
    if type(heartRate) == "number" then
        return string.format("**心率: %d bpm**", heartRate)
    else
        return heartRate  -- 返回错误消息
    end
end

return p