Módulo:CopaDoBrasilTabela
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:CopaDoBrasilTabela/doc
local p = {} -- Função principal function p.copaDoBrasil(frame) -- Verifica se o Semantic MediaWiki (SMW) está disponível if not mw.smw then return "Erro: O Semantic MediaWiki não está disponível ou não está configurado corretamente." end -- Define a consulta para buscar as variáveis relacionadas à Copa do Brasil local query = "[[Título::Copa do Brasil de Futebol]]|?TítuloAno2|?Colocação|?TítuloAno3" -- Executa a consulta no SMW local result = mw.smw.ask(query, { format = "json", -- Retorna os resultados como JSON para fácil manipulação headers = "hide", mainlabel = "-", sep = "\n" }) -- Verifica se houve resultados if not result or type(result) ~= "table" then return "Nenhum dado encontrado para a consulta especificada." end -- Variáveis para armazenar os dados local fases = {} local anos_participacao = {} -- Processa os resultados for _, row in ipairs(result) do local ano = tonumber(row["TítuloAno2"]) local fase = tostring(row["Colocação"]):match("^%s*(.-)%s*$") -- Remove espaços extras local link_ano = row["TítuloAno3"] -- Adiciona o ano à lista de participações if ano then table.insert(anos_participacao, ano) end -- Agrupa os anos por fase if fase and fase ~= "" and ano then if not fases[fase] then fases[fase] = {anos = {}, links = {}} end table.insert(fases[fase].anos, ano) if link_ano and fase == "Campeão" then table.insert(fases[fase].links, link_ano) -- Adiciona o link do ano para campeões else table.insert(fases[fase].links, nil) -- Se não for campeão, não adiciona link end end end -- Ordena os anos em cada fase e o total de participações for _, fase in pairs(fases) do table.sort(fase.anos) end table.sort(anos_participacao) -- Função para formatar os anos local function formatar_anos(anos, links) if #anos == 0 then return "" elseif #anos == 1 then return links[1] and string.format("%s", links[1], anos[1]) or tostring(anos[1]) else local primeiros = {} for i = 1, #anos - 1 do table.insert(primeiros, links[i] and string.format("%s", links[i], anos[i]) or tostring(anos[i])) end return table.concat(primeiros, ", ") .. " e " .. (links[#links] and string.format("%s", links[#links], anos[#anos]) or tostring(anos[#anos])) end end -- Função para formatar intervalos de anos consecutivos local function formatar_intervalos(anos) if #anos == 0 then return "" end local intervalos = {} local inicio, fim = anos[1], anos[1] for i = 2, #anos do if anos[i] == fim + 1 then fim = anos[i] else table.insert(intervalos, inicio == fim and tostring(inicio) or inicio .. "-" .. fim) inicio, fim = anos[i], anos[i] end end table.insert(intervalos, inicio == fim and tostring(inicio) or inicio .. "-" .. fim) return table.concat(intervalos, ", ") end -- Formata a saída local output = {} -- Adiciona as fases na ordem desejada local ordem_fases = { "Campeão", "Vice-Campeão", "Semifinais", "Quartas de Final", "Oitavas de Final", "Segunda Fase", "Primeira Fase" } for _, fase in ipairs(ordem_fases) do if fases[fase] then local anos_formatados = formatar_anos(fases[fase].anos, fases[fase].links) table.insert(output, string.format("'''%s:''' %d (%s)", fase, #fases[fase].anos, anos_formatados)) -- Fase em negrito end end -- Adiciona o total de participações local anos_participacao_formatados = formatar_intervalos(anos_participacao) table.insert(output, string.format("<br>\nParticipações: %d (%s)", #anos_participacao, anos_participacao_formatados)) -- Adiciona quebras de linha para separar as fases return table.concat(output, "<br>") end return p