Модуль:RandomPageFromCategory: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Новая страница: «-- 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 -- Основная функция: вернуть ссылку на случайную ст...» |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| Строка 2: | Строка 2: | ||
local p = {} | local p = {} | ||
function p.fromCategory(frame) | function p.fromCategory(frame) | ||
local cat = frame.args[1] or "Book" | local cat = frame.args[1] or "Book" | ||
-- | -- mw.smw.ask принимает таблицу параметров точно как #ask | ||
local query = | local query = { | ||
"[[Category:" .. cat .. "]]", | |||
mainlabel = "title", | |||
limit = "500" | |||
} | |||
if not res | local res = mw.smw.ask(query) | ||
return | |||
-- отладка: показать что вернул запрос | |||
if not res then | |||
return "mw.smw.ask вернул nil для категории: " .. cat | |||
end | |||
if type(res) == "string" then | |||
return "Ошибка запроса: " .. res | |||
end | |||
if #res == 0 then | |||
return "Пустой результат для категории: " .. cat | |||
end | end | ||
-- | -- случайный элемент | ||
math.randomseed(os.clock() * 100000) | |||
local | local row = res[ math.random(1, #res) ] | ||
-- заголовок лежит в поле "title" (наш mainlabel) | |||
local title = row.title or row[1] | |||
if not title then | if not title then | ||
return " | -- показать что реально пришло, для отладки | ||
local keys = {} | |||
for k, v in pairs(row) do | |||
table.insert(keys, tostring(k) .. "=" .. tostring(v)) | |||
end | |||
return "Нет title. Поля: " .. table.concat(keys, ", ") | |||
end | end | ||
return "[[" .. title .. "]]" | |||
return | |||
end | end | ||
return p | return p | ||
Версия от 08:42, 23 апреля 2026
-- Module:RandomPageFromCategory
local p = {}
function p.fromCategory(frame)
local cat = frame.args[1] or "Book"
-- mw.smw.ask принимает таблицу параметров точно как #ask
local query = {
"[[Category:" .. cat .. "]]",
mainlabel = "title",
limit = "500"
}
local res = mw.smw.ask(query)
-- отладка: показать что вернул запрос
if not res then
return "mw.smw.ask вернул nil для категории: " .. cat
end
if type(res) == "string" then
return "Ошибка запроса: " .. res
end
if #res == 0 then
return "Пустой результат для категории: " .. cat
end
-- случайный элемент
math.randomseed(os.clock() * 100000)
local row = res[ math.random(1, #res) ]
-- заголовок лежит в поле "title" (наш mainlabel)
local title = row.title or row[1]
if not title then
-- показать что реально пришло, для отладки
local keys = {}
for k, v in pairs(row) do
table.insert(keys, tostring(k) .. "=" .. tostring(v))
end
return "Нет title. Поля: " .. table.concat(keys, ", ")
end
return "[[" .. title .. "]]"
end
return p
