模块:HttpTest:修订间差异
来自夜幕之下
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
local function val(v, fallback) | |||
if v == nil or v == "" then | |||
return fallback or "—" | |||
end | |||
return v | |||
end | |||
-- 用于调试输出表格结构 | |||
local function dump(tbl, indent) | |||
indent = indent or 0 | |||
local formatting = string.rep(" ", indent) | |||
if type(tbl) ~= "table" then | |||
return tostring(tbl) | |||
end | |||
local str = "{\n" | |||
for k,v in pairs(tbl) do | |||
if type(v) == "table" then | |||
str = str .. formatting .. " " .. tostring(k) .. " = " .. dump(v, indent+1) .. ",\n" | |||
else | |||
str = str .. formatting .. " " .. tostring(k) .. " = " .. tostring(v) .. ",\n" | |||
end | |||
end | |||
str = str .. formatting .. "}" | |||
return str | |||
end | |||
function p.get(frame) | function p.get(frame) | ||
local cardname = frame.args[1] or "" | |||
local url = | |||
"https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=" | |||
.. mw.uri.encode(cardname) | |||
.. "&limit=1&fields=stylename,rarity,character.name,profession.name,desire.name," | |||
.. "skill_normal_attack.name,skill_normal_attack.description,skill_normal_attack.levels," | |||
.. "skill_passive.name,skill_passive.description,skill_passive.levels," | |||
.. "skill_ultimate.name,skill_ultimate.description,skill_ultimate.levels," | |||
.. "feats.stages,stories.text" | |||
local | -- 调用 External API | ||
local response = mw.ext.jsonapi.get(url) | |||
if not response or not response.data then | |||
return "API 请求失败或返回为空" | |||
end | |||
local card = response.data[1] or {} | |||
-- 变量映射 | |||
local stylename = val(card.stylename) | |||
local rarity = val(card.rarity) | |||
local character = val(card.character and card.character.name) | |||
local profession = val(card.profession and card.profession.name) | |||
local desire = val(card.desire and card.desire.name) | |||
-- 技能 | |||
local skill_normal_attack = { | |||
name = val(card.skill_normal_attack and card.skill_normal_attack.name), | |||
description = val(card.skill_normal_attack and card.skill_normal_attack.description), | |||
levels = card.skill_normal_attack and card.skill_normal_attack.levels or {} | |||
} | |||
local skill_passive = { | |||
name = val(card.skill_passive and card.skill_passive.name), | |||
description = val(card.skill_passive and card.skill_passive.description), | |||
levels = card.skill_passive and card.skill_passive.levels or {} | |||
} | |||
local skill_ultimate = { | |||
name = val(card.skill_ultimate and card.skill_ultimate.name), | |||
description = val(card.skill_ultimate and card.skill_ultimate.description), | |||
levels = card.skill_ultimate and card.skill_ultimate.levels or {} | |||
} | |||
local | -- feats | ||
local feats = {} | |||
if card.feats and #card.feats > 0 then | |||
for i, featEntry in ipairs(card.feats) do | |||
feats[i] = {} | |||
if featEntry.stages then | |||
feats[i].stages = {} | |||
for j, stage in ipairs(featEntry.stages) do | |||
feats[i].stages[j] = { | |||
stage = stage.stage, | |||
extra_name = stage.extra_name, | |||
stat_boosts = stage.stat_boosts or {}, | |||
value = stage.value or {} | |||
} | |||
end | |||
end | |||
end | |||
end | |||
-- | -- stories | ||
local | local stories = {} | ||
if card.stories and #card.stories > 0 then | |||
for i, s in ipairs(card.stories) do | |||
stories[i] = s.text or "" | |||
end | |||
end | |||
-- 调试输出 | -- 调试输出 | ||
local output_table = { | |||
stylename = stylename, | |||
rarity = rarity, | |||
character = character, | |||
profession = profession, | |||
desire = desire, | |||
skill_normal_attack = skill_normal_attack, | |||
skill_passive = skill_passive, | |||
skill_ultimate = skill_ultimate, | |||
feats = feats, | |||
stories = stories | |||
} | |||
-- 直接返回调试字符串 | |||
return dump(output_table) | |||
end | end | ||
return p | return p | ||
2026年3月11日 (三) 22:27的版本
此模块的文档可以在模块:HttpTest/doc创建
local p = {}
local function val(v, fallback)
if v == nil or v == "" then
return fallback or "—"
end
return v
end
-- 用于调试输出表格结构
local function dump(tbl, indent)
indent = indent or 0
local formatting = string.rep(" ", indent)
if type(tbl) ~= "table" then
return tostring(tbl)
end
local str = "{\n"
for k,v in pairs(tbl) do
if type(v) == "table" then
str = str .. formatting .. " " .. tostring(k) .. " = " .. dump(v, indent+1) .. ",\n"
else
str = str .. formatting .. " " .. tostring(k) .. " = " .. tostring(v) .. ",\n"
end
end
str = str .. formatting .. "}"
return str
end
function p.get(frame)
local cardname = frame.args[1] or ""
local url =
"https://data.saltedkiss.org/items/cards?filter[stylename][_eq]="
.. mw.uri.encode(cardname)
.. "&limit=1&fields=stylename,rarity,character.name,profession.name,desire.name,"
.. "skill_normal_attack.name,skill_normal_attack.description,skill_normal_attack.levels,"
.. "skill_passive.name,skill_passive.description,skill_passive.levels,"
.. "skill_ultimate.name,skill_ultimate.description,skill_ultimate.levels,"
.. "feats.stages,stories.text"
-- 调用 External API
local response = mw.ext.jsonapi.get(url)
if not response or not response.data then
return "API 请求失败或返回为空"
end
local card = response.data[1] or {}
-- 变量映射
local stylename = val(card.stylename)
local rarity = val(card.rarity)
local character = val(card.character and card.character.name)
local profession = val(card.profession and card.profession.name)
local desire = val(card.desire and card.desire.name)
-- 技能
local skill_normal_attack = {
name = val(card.skill_normal_attack and card.skill_normal_attack.name),
description = val(card.skill_normal_attack and card.skill_normal_attack.description),
levels = card.skill_normal_attack and card.skill_normal_attack.levels or {}
}
local skill_passive = {
name = val(card.skill_passive and card.skill_passive.name),
description = val(card.skill_passive and card.skill_passive.description),
levels = card.skill_passive and card.skill_passive.levels or {}
}
local skill_ultimate = {
name = val(card.skill_ultimate and card.skill_ultimate.name),
description = val(card.skill_ultimate and card.skill_ultimate.description),
levels = card.skill_ultimate and card.skill_ultimate.levels or {}
}
-- feats
local feats = {}
if card.feats and #card.feats > 0 then
for i, featEntry in ipairs(card.feats) do
feats[i] = {}
if featEntry.stages then
feats[i].stages = {}
for j, stage in ipairs(featEntry.stages) do
feats[i].stages[j] = {
stage = stage.stage,
extra_name = stage.extra_name,
stat_boosts = stage.stat_boosts or {},
value = stage.value or {}
}
end
end
end
end
-- stories
local stories = {}
if card.stories and #card.stories > 0 then
for i, s in ipairs(card.stories) do
stories[i] = s.text or ""
end
end
-- 调试输出
local output_table = {
stylename = stylename,
rarity = rarity,
character = character,
profession = profession,
desire = desire,
skill_normal_attack = skill_normal_attack,
skill_passive = skill_passive,
skill_ultimate = skill_ultimate,
feats = feats,
stories = stories
}
-- 直接返回调试字符串
return dump(output_table)
end
return p