|
|
第9行: |
第9行: |
| local data, errorInfo = mw.ext.externaldata.getWebData {url = apiUrl} | | local data, errorInfo = mw.ext.externaldata.getWebData {url = apiUrl} |
| | | |
| -- 安全解析JSON数据
| | -- 返回有效的心率值 |
| local jsonData
| | return data |
| 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 | | end |
|
| |
|
| -- 带格式化输出的版本
| | local p = {data} |
| 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 | | return p |
local p = {}
-- 主函数:获取心率数据
function p.getHeartRate(frame)
local args = frame.args
local apiUrl = args.url
-- 使用ExternalData获取数据
local data, errorInfo = mw.ext.externaldata.getWebData {url = apiUrl}
-- 返回有效的心率值
return data
end
local p = {data}
return p