63 lines
1.4 KiB
Lua
63 lines
1.4 KiB
Lua
local requests = require('requests')
|
|
local lang = arg[1]
|
|
|
|
local function merge_tables(existing, from_req)
|
|
local result = existing
|
|
|
|
for _, v in ipairs(from_req) do
|
|
result[v.title] = true
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
local function get_task_list(category)
|
|
local url = 'http://www.rosettacode.org/mw/api.php'
|
|
local query = {
|
|
action = 'query',
|
|
list = 'categorymembers',
|
|
cmtitle = string.format('Category:%s', category),
|
|
cmlimit = 500,
|
|
cmtype = 'page',
|
|
format = 'json'
|
|
}
|
|
local categories = {}
|
|
|
|
while true do
|
|
local resp = assert(requests.get({ url, params = query }).json())
|
|
|
|
categories = merge_tables(categories, resp.query.categorymembers)
|
|
|
|
if resp.continue then
|
|
query.cmcontinue = resp.continue.cmcontinue
|
|
else
|
|
break
|
|
end
|
|
end
|
|
|
|
return categories
|
|
end
|
|
|
|
local function get_open_tasks(lang)
|
|
if not lang then error('Language missing!') end
|
|
local all_tasks = get_task_list('Programming_Tasks')
|
|
local lang_tasks = get_task_list(lang)
|
|
local task_list = {}
|
|
|
|
for t, _ in pairs(all_tasks) do
|
|
if not lang_tasks[t] then
|
|
table.insert(task_list, t)
|
|
end
|
|
end
|
|
|
|
table.sort(task_list)
|
|
return task_list
|
|
end
|
|
|
|
local open_tasks = get_open_tasks(lang)
|
|
|
|
io.write(string.format('%s has %d unimplemented programming tasks: \n', lang, #open_tasks))
|
|
for _, t in ipairs(open_tasks) do
|
|
io.write(string.format(' %s\n', t))
|
|
end
|