|
|
| (не показаны 2 промежуточные версии этого же участника) |
| Строка 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" |
| | | return "[[Special:RandomInCategory/" .. cat .. "|случайная страница из " .. cat .. "]]" |
| -- подстрахуемся: сбросить сид, чтобы 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 | | end |
|
| |
|
| return p | | return p |
-- Module:RandomPageFromCategory
local p = {}
function p.fromCategory(frame)
local cat = frame.args[1] or "Book"
return "[[Special:RandomInCategory/" .. cat .. "|случайная страница из " .. cat .. "]]"
end
return p