Модуль:RandomPageFromCategory: различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Нет описания правки |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
local function | math.randomseed(os.time()) | ||
local function pickOne(t) | |||
if not t or #t == 0 then | if not t or #t == 0 then | ||
return nil | return nil | ||
end | end | ||
return t[math.random(#t)] | return t[math.random(#t)] | ||
end | end | ||
| Строка 11: | Строка 12: | ||
function p.getRandomTitle(category) | function p.getRandomTitle(category) | ||
if not mw.smw then | if not mw.smw then | ||
return nil, "mw.smw недоступен" | return nil, "Ошибка: mw.smw недоступен" | ||
end | |||
if not category or category == "" then | |||
category = "Book" | |||
end | end | ||
local results = mw.smw.ask('[[Category:' | local results = mw.smw.ask({ | ||
string.format('[[Category:%s]]', category), | |||
'?#-=title', | |||
'limit=200' | |||
}) | |||
if not results or #results == 0 then | if not results or #results == 0 then | ||
return nil, "В категории нет страниц: " .. category | return nil, "В категории нет страниц: " .. category | ||
end | end | ||
local item = pickOne(results) | |||
if type(item) == "table" then | |||
return item.title or item[1] or nil, nil | |||
end | |||
return item, nil | |||
end | end | ||
function p. | function p.main(frame) | ||
local | local category = frame.args.category or frame.args[1] or "Book" | ||
local title, err = p.getRandomTitle( | local title, err = p.getRandomTitle(category) | ||
if not title then | if not title or title == "" then | ||
return err | return err or "Не удалось получить название страницы" | ||
end | end | ||
return | return title | ||
end | end | ||
return p | return p | ||
Текущая версия от 07:48, 21 мая 2026
local p = {}
math.randomseed(os.time())
local function pickOne(t)
if not t or #t == 0 then
return nil
end
return t[math.random(#t)]
end
function p.getRandomTitle(category)
if not mw.smw then
return nil, "Ошибка: mw.smw недоступен"
end
if not category or category == "" then
category = "Book"
end
local results = mw.smw.ask({
string.format('[[Category:%s]]', category),
'?#-=title',
'limit=200'
})
if not results or #results == 0 then
return nil, "В категории нет страниц: " .. category
end
local item = pickOne(results)
if type(item) == "table" then
return item.title or item[1] or nil, nil
end
return item, nil
end
function p.main(frame)
local category = frame.args.category or frame.args[1] or "Book"
local title, err = p.getRandomTitle(category)
if not title or title == "" then
return err or "Не удалось получить название страницы"
end
return title
end
return p
