Модуль:Участник: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), Цифровой анархизм, Хакерство

Warning: сервис catscan прекратил своё существование.

Warning: сервис catscan2 прекратил своё существование (см. petscan).

Warning: сервис catscan3 прекратил своё существование (см. petscan).

Сервис petscan1 является более старой версией сервиса petscan. Имеется незначительное отличие в работе сервиса petscan1 от petscan, но на данный шаблон это не влияет. См. справку к сервису petscan.

Получает на входе параметры обновления списка новых статей, в том числе категории, и по ним генерирует ссылку для поиска новых статей по данным параметрам на сервисе Petscan.

Поиск новых статей

править
{{#invoke:Участник:NirvanaBot/Portal settings helper| petscan | categorylist="Компьютерные сети", "Цифровой анархизм", "Хакерство" | depth=7 | hours=500 | ns=0 | only_new=1}}

выдаст такой вики-код:

https://petscan.wmflabs.org/?language=ru&project=wikipedia&depth=7&categories=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5+%D1%81%D0%B5%D1%82%D0%B8%0D%0A%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9+%D0%B0%D0%BD%D0%B0%D1%80%D1%85%D0%B8%D0%B7%D0%BC%0D%0A%D0%A5%D0%B0%D0%BA%D0%B5%D1%80%D1%81%D1%82%D0%B2%D0%BE&negcats=&ns%5B0%5D=1&templates_any=&combination=union&max_age=500&only_new=on&sortorder=descending&format=html&interface_language=ru&doit=1

Поиск всех статей

править
{{#invoke:Участник:NirvanaBot/Portal settings helper| petscan | categorylist="Компьютерные сети", "Цифровой анархизм", "Хакерство" | depth=4 | ns=0 }}

выдаст такой вики-код:

https://petscan.wmflabs.org/?language=ru&project=wikipedia&depth=4&categories=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B5+%D1%81%D0%B5%D1%82%D0%B8%0D%0A%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9+%D0%B0%D0%BD%D0%B0%D1%80%D1%85%D0%B8%D0%B7%D0%BC%0D%0A%D0%A5%D0%B0%D0%BA%D0%B5%D1%80%D1%81%D1%82%D0%B2%D0%BE&negcats=&ns%5B0%5D=1&templates_any=&combination=union&max_age=&sortby=title&format=html&interface_language=ru&doit=1

Красивый заголовок для ссылки

править

Также, ссылке можно дать красивый заголовок:

{{#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