Модуль:RandomPageFromCategory: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Нет описания правки |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| Строка 2: | Строка 2: | ||
local p = {} | 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) | function p.fromCategory(frame) | ||
-- имя категории без префикса "Category:" | |||
local cat = frame.args[1] or "Book" | local cat = frame.args[1] or "Book" | ||
-- mw. | -- подстрахуемся: сбросить сид, чтобы random менялся | ||
local query = | 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 | local data = req and req.query and req.query.categorymembers | ||
if not data or #data == 0 then | |||
return 'Нет страниц в категории "' .. cat .. '".' | |||
if not | |||
return | |||
end | end | ||
local row = random_item(data) | |||
if not row or not row.title then | |||
local row = | return "Не удалось получить заголовок страницы." | ||
return " | |||
end | end | ||
return "[[" .. title .. "]]" | return "[[" .. row.title .. "]]" | ||
end | end | ||
return p | return p | ||
Версия от 08:44, 23 апреля 2026
-- 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
