Модуль:RandomPageFromCategory
Материал из Поле цифровой дидактики
-- Module:RandomPageFromCategory
local p = {}
-- Вспомогательная функция: случайный элемент таблицы
local function random_item(t)
if not t or #t == 0 then
return nil
end
-- math.random(1, #t) даёт целое число от 1 до #t включительно
local i = math.random(1, #t)
return t[i]
end
-- Основная функция: вернуть ссылку на случайную страницу из категории
function p.fromCategory(frame)
-- 1‑й параметр: имя категории без префикса "Category:"
local cat = frame.args[1] or "Book"
-- Запрос SMW: все страницы в указанной категории
local query = string.format("[[Category:%s]]|limit=500", cat)
local res = mw.smw and mw.smw.ask and mw.smw.ask(query) or nil
if not res or #res == 0 then
return string.format("Нет страниц в категории \"%s\".", cat)
end
-- Выбираем случайную страницу из результата
local row = random_item(res)
local title = row.fulltext or row["fulltext"] or row[1]
if not title then
return "Не удалось получить заголовок страницы."
end
-- Возвращаем обычную вики‑ссылку
return string.format("[[%s]]", title)
end
return p
