Module:Heartrate:修订间差异
来自OTTOWiki
更多操作
小 |
|||
第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- 主函数:获取心率数据 | -- 主函数:获取心率数据 | ||
第26行: | 第5行: | ||
local args = frame.args | local args = frame.args | ||
local apiUrl = args.url | local apiUrl = args.url | ||
-- 使用ExternalData获取数据 | -- 使用ExternalData获取数据 | ||
local data, errorInfo = mw.ext.externalData.get | local data, errorInfo = mw.ext.externalData.get {data = apiUrl} | ||
-- 安全解析JSON数据 | -- 安全解析JSON数据 | ||
第102行: | 第52行: | ||
return heartRate -- 返回错误消息 | return heartRate -- 返回错误消息 | ||
end | end | ||
end | end | ||
return p | return p |
2025年6月20日 (五) 11:34的版本
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