local p = {}
local getArgs = require('Module:Arguments').getArgs
local data = mw.text.jsonDecode(mw.title.new("Module:VOCALOID_Song_Counter/data.json"):getContent())
local function safeAccess(t, ...)
local keys = {...}
local current = t
for _, key in ipairs(keys) do
if type(current) ~= "table" or current[key] == nil then
return nil
end
current = current[key]
end
return current
end
function p.main(frame)
local args = getArgs(frame)
local pageName = args[1] or mw.title.getCurrentTitle().text
local parts = {}
if pageName == "Alter/Ego殿堂曲" then
table.insert(parts, pageName)
else
for part in pageName:gmatch("([^/]+)") do
table.insert(parts, part)
end
end
local meme = args["梗曲"] == "true"
local section = args["section"] or ''
local errorMsg = require('Module:Error').error({"在[[Module:VOCALOID_Song_Counter/data.json]]中找不到数据,请检查参数是否填写错误。"})
if #parts == 1 then
if section ~= '' then
return safeAccess(data, parts[1], "section", section) or errorMsg
elseif type(data[parts[1]]) == "number" then
return data[parts[1]] or errorMsg
else
return data[parts[1]].root or errorMsg
end
elseif #parts == 3 then
return safeAccess(data, parts[1], parts[2], parts[3]) or errorMsg
elseif meme then
return safeAccess(data, parts[1], "梗曲相关", parts[2]) or errorMsg
elseif parts[2] == "梗曲相关" then
local memeCount = safeAccess(data, parts[1], "梗曲相关")
if memeCount then
local total = 0
for year, count in pairs(memeCount) do
total = total + count
end
return total
else
return errorMsg
end
else
return safeAccess(data, parts[1], parts[2]) or errorMsg
end
end
return p