Модуль:RandomPageFromCategory: различия между версиями

Материал из Поле цифровой дидактики
Нет описания правки
Нет описания правки
Строка 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

Версия от 08:48, 23 апреля 2026


-- Module:RandomPageFromCategory
local p = {}

function p.fromCategory(frame)
  local cat = frame.args[1] or "Book"
  return "[[Special:RandomInCategory/" .. cat .. "|случайная страница из " .. cat .. "]]"
end

return p