local p =
p.test = function (frame)--local SD = require "Module:SimpleDebug"--return SD.v ('Here is reached')r1000 = getPage("Wikipedia:List_of_Wikipedians_by_number_of_edits/1–1000")r1000string = parseString(r1000)r1000rank=convertToDict(r1000string)r2000 = getPage("Wikipedia:List_of_Wikipedians_by_number_of_edits/1001–2000")r2000string = parseString(r2000)r2000rank=convertToDict(r2000string)r3000 = getPage("Wikipedia:List_of_Wikipedians_by_number_of_edits/2001–3000")r3000string = parseString(r3000)r3000rank=convertToDict(r3000string)r4000 = getPage("Wikipedia:List_of_Wikipedians_by_number_of_edits/3001–4000")r4000string = parseString(r4000)r4000rank=convertToDict(r4000string)final = tableMerge(r1000rank,r2000rank,r3000rank,r4000rank)return "As of the last count, I have made "..final[frame.args[1]][2].." edits. And I am ranked " .. final[frame.args[1]][1] .. " on the most active list of Wikipedians on the English Wikipedia."end
function tableMerge(...) local tablesToMerge = assert(#tablesToMerge > 1, "There should be at least two tables to merge them")
local result =
for i = 1, #tablesToMerge do assert(type(tablesToMerge[i])
"table" then result[k] = result[k] or assert(type(result[k])
return resultend
function split(str, delim) local result = delim = delim:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1') -- escape any special characters for match in (str..delim):gmatch("(.-)"..delim) do table.insert(result, match) end return resultend
function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1"))end
function parseString(str)
local mys = str:match("! User groups\n(.*)|}"):sub(2) local rankTable = split(mys:sub(3),"\n|-")return rankTableend
function convertToDict(ranks)local dict = for k, v in pairs(ranks) do local rank,user,groups local entry = split(trim(v:sub(3)),"| ") if #entry
1 then rank = trim(x) elseif j
3 then edits = trim(x) elseif j
function getPage(pageTitle) local noError, page = pcall (mw.title.new, pageTitle) if not noError or (noError and not page) then mw.log("error in retrieving arg") return nil end local pageText = page:getContent if not pageText then mw.log("no page text") return nil end return pageTextendreturn p