Модуль:Участник:NirvanaBot/Portal settings helper
Модуль предоставляет вспомогательные утилиты для шаблона настроек бота Участник:NirvanaBot/Новые_статьи. Этот модуль используется непосредственно в шаблоне User:NirvanaBot/Новые статьи и служит для нормального, удобного пользователю отображения категорий и ссылок на сервисы в параметрах бота для обновления списков новых статей, пример: Портал:Телефонная связь/Новые статьи/Параметры.
parseCategoryList
правитьВспомогательная функция, используемая другими функциями. Парсит список категорий, заданный одной строкой и возвращает на выходе массив (таблицу) из этих категорий. Например:
local result = mModule._parseCategoryList('"Компьютерные сети", "Цифровой анархизм", "Хакерство"')
выдаст такую таблицу:
{'Компьютерные сети', 'Цифровой анархизм', 'Хакерство'}
wikifyCategoryList
правитьПарсит список категорий, заданный одной строкой и возвращает на выходе викифицированный список этих же категорий.
- Например
{{#invoke:Участник:NirvanaBot/Portal settings helper | wikifyCategoryList| categorylist="Компьютерные сети", "Цифровой анархизм", "Хакерство" }}
выдаст такой вики-код:
Компьютерные сети, Цифровой анархизм, Хакерство
- Ещё пример (с указанием глубины)
{{#invoke:Участник:NirvanaBot/Portal settings helper | wikifyCategoryList| categorylist="Компьютерные сети#5", "Цифровой анархизм", "Хакерство" }}
выдаст такой вики-код:
Компьютерные сети (глубина=5), Цифровой анархизм, Хакерство
catscan
править
Warning: сервис catscan прекратил своё существование.
catscan2
править
Warning: сервис catscan2 прекратил своё существование (см. petscan).
catscan3
править
Warning: сервис catscan3 прекратил своё существование (см. petscan).
petscan1
правитьСервис petscan1 является более старой версией сервиса petscan. Имеется незначительное отличие в работе сервиса petscan1 от petscan, но на данный шаблон это не влияет. См. справку к сервису petscan.
petscan
правитьПолучает на входе параметры обновления списка новых статей, в том числе категории, и по ним генерирует ссылку для поиска новых статей по данным параметрам на сервисе Petscan.
Поиск новых статей
править{{#invoke:Участник:NirvanaBot/Portal settings helper| petscan | categorylist="Компьютерные сети", "Цифровой анархизм", "Хакерство" | depth=7 | hours=500 | ns=0 | only_new=1}}
выдаст такой вики-код:
Поиск всех статей
править{{#invoke:Участник:NirvanaBot/Portal settings helper| petscan | categorylist="Компьютерные сети", "Цифровой анархизм", "Хакерство" | depth=4 | ns=0 }}
выдаст такой вики-код:
Красивый заголовок для ссылки
правитьТакже, ссылке можно дать красивый заголовок:
{{#invoke:Участник:NirvanaBot/Portal settings helper| petscan | categorylist="Компьютерные сети"| depth=7 | ns=0 | text=красивый заголовок}}
на выходе получаем:
Тесты
править-- Модуль предоставляет вспомогательные утилиты для шаблона настроек бота:
-- Участник:NirvanaBot/Новые_статьи
-- 1) Парсинг категорий
-- 2) Генерация викифицированного списка категорий
-- 3) Генерация урла на сервис catscan (больше не поддерживается)
-- 4) Генерация урла на сервис catscan2 (больше не поддерживается)
-- 5) Генерация урла на сервис catscan3 (больше не поддерживается)
-- 6) Генерация урла на сервис petscan
-- 7) Генерация урла на сервис petscan1
local p = {}
-- Получает на входе список категорий, заданных через запятую,
-- опционально выделенных двойными кавычками, в виде одной строки,
-- и возвращает таблицу (массив) из названий категорий
function p.parseCategoryList(frame)
if not frame.args.categorylist then
return 'categorylist argument not found'
end
return p._parseCategoryList(frame.args.categorylist)
end
function p._parseCategoryList(categorylist)
local catliststr = categorylist
local result = nil
if mw.ustring.match(catliststr , "\".*\"", 1) then
catliststr = mw.ustring.sub( catliststr, 2, mw.ustring.len(catliststr)-1 )
result = mw.text.split( catliststr, "\"%s*,%s*\"")
else
result = mw.text.split( catliststr, "%s*,%s*")
end
return result
end
function p._parseTemplateList(templatelist)
return mw.text.split( templatelist, "%s*,%s*")
end
-- Получает на входе список категорий, заданных через запятую,
-- опционально выделенных двойными кавычками, в виде одной строки,
-- и возвращает викифицированный список категорий
function p.wikifyCategoryList(frame)
if not frame.args.categorylist then
return 'categorylist argument not found'
end
return p._wikifyCategoryList(frame.args.categorylist)
end
function p._wikifyCategoryList(categorylist)
local cats = p._parseCategoryList(categorylist)
local sep = ', '
local list = {}
for i, v in ipairs( cats ) do
local f1, f2 = mw.ustring.find(v,"#")
if f1 and f2 and f2<mw.ustring.len(v) then
local cat, num = mw.ustring.match(v, "^(.+)#(%d+)$")
list[i]=mw.ustring.format('[[:Категория:%s|%s (глубина=%s)]]',cat,cat,num)
else
list[i]=mw.ustring.format('[[:Категория:%s|%s]]',v,v)
end
end
return table.concat(list, sep)
end
function p.wikifyTemplateList(frame)
if not frame.args.templatelist then
return 'templatelist argument not found'
end
return p._wikifyTemplateList(frame.args.templatelist)
end
function p._wikifyTemplateList(templatelist)
local templs = p._parseTemplateList(templatelist)
local sep = ', '
local list = {}
for i, v in ipairs( templs ) do
list[i]=mw.ustring.format('[[Шаблон:%s|%s]]',v,v)
end
return table.concat(list, sep)
end
-- Получает на входе параметры бота для списка новых статей и
-- возвращает на выходе ссылку на список новых статей, генерируемый
-- сервисом petscan1, ту самую, откуда бот берёт данные
function p.petscan1(frame)
return p.petscan(frame)
end
-- Получает на входе параметры бота для списка новых статей и
-- возвращает на выходе ссылку на список новых статей, генерируемый
-- сервисом petscan, ту самую, откуда бот берёт данные
function p.petscan(frame)
if not frame.args.categorylist then
return 'categorylist argument not found'
end
if not frame.args.depth then
return 'depth argument not found'
end
if frame.args.only_new and not frame.args.hours then
return 'hours argument not found'
end
local ns = 0
if frame.args.ns then
ns = frame.args.ns
end
local categorylist = frame.args.categorylist
local negcatslist = ''
if frame.args.negcatslist then
negcatslist = frame.args.negcatslist
end
local cats = p._parseCategoryList(categorylist)
local negcats = p._parseCategoryList(negcatslist)
local sep = '\r\n'
local cats_s = table.concat(cats, sep)
local negcats_s = table.concat(negcats, sep)
local params = { }
params['категории']=cats_s
params['игнорировать']=negcats_s
params['глубина']=frame.args.depth
params['пи']=ns
if frame.args.text then
params['текст']=frame.args.text
end
if frame.args.only_new and frame.args.only_new ~= "0" then
params['новые']='1'
if frame.args.hours then
params['часов']=frame.args.hours
end
end
if frame.args.templates and frame.args.templates ~="" then
local templates = p._parseTemplateList(frame.args.templates)
local templates_s = table.concat(templates, sep)
params['шаблоны']=templates_s
end
return frame:expandTemplate{ title = 'Участник:NirvanaBot/Url generator petscan', args = params }
end
return p