Модуль:RandomPageFromCategory
Материал из Поле цифровой дидактики
-- Module:RandomPageFromCategory
local p = {}
-- Вспомогательная: случайный элемент массива
local function random_item(t)
if not t or #t == 0 then
return nil
end
local i = math.random(1, #t)
return t[i]
end
-- Вернуть ссылку на случайную страницу из категории
function p.fromCategory(frame)
-- имя категории без префикса "Category:"
local cat = frame.args[1] or "Book"
-- подстрахуемся: сбросить сид, чтобы random менялся
math.randomseed(os.time())
-- Вызов MediaWiki API module (если включён)
local api = mw.ext and mw.ext.ApiFrame and mw.ext.ApiFrame.new
if not api then
return "Lua: модуль API недоступен на этой вики."
end
-- Базовый запрос к api.php?action=query&list=categorymembers
local req = api{
action = "query",
list = "categorymembers",
cmtitle = "Category:" .. cat,
cmlimit = "500",
cmnamespace = "0" -- только статьи; можно убрать/изменить при желании
}
local data = req and req.query and req.query.categorymembers
if not data or #data == 0 then
return 'Нет страниц в категории "' .. cat .. '".'
end
local row = random_item(data)
if not row or not row.title then
return "Не удалось получить заголовок страницы."
end
return "[[" .. row.title .. "]]"
end
return p
