Модуль:AutoDescriptionGalaxy
![]() | Этому модулю не хватает документации. |
--[[
------------------------------------------
-- AutoDescriptionGalaxy
-- Модуль для заполнения галактик.
------------------------------------------
--]]
local Dates = require("Module:Dates")
local Declension = require("Module:Declension")
local Langs = require("Module:Langs")
local MathTonumber = require("Module:Math/tonumber")
local ReturnGendered = require("Module:ReturnGendered")
local SerializeTable = require("Module:SerializeTable")
local Math = require("Module:Math")
local AutoDescriptionGalaxy={}
-- Нам необходимо сформировать и вернуть три переменных
local description = "" -- уточнение
local details = "" -- строка описания
local categories = "[[Категория:Галактики по алфавиту]]" .. "[[Категория:Астрономические объекты по алфавиту]]" -- категории-- Промежуточный масив сущностей, в который помещаются результаты парсинга перед формированием описания
local entitiesArray = {catalog={}, code={}, galType={E="", SO="", Sa="", SB="", Irr=""}, constellation="", InstanceOf={}, radV="", redShift="", UGC="", DDO="", apparentMagnitude="", distancesFromEarth={}}
local entitiesArrayP = {P31="", P59="", P61="", P223="", P528="", P575="", P1090="", P1215="", P2067="", P2216="", P2583="", P6257="", P6259="", P6258=""}
local priority = {}
-- Точка входа
function AutoDescriptionGalaxy.launch(entity)
AutoDescriptionGalaxy.parsing(entity) -- парсим карточку викиданных
AutoDescriptionGalaxy.forming() -- формируем переменные
return details, description, categories
end
-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionGalaxy.parsing(entity)
entitiesArrayP["P31"]=AutoDescriptionGalaxy.parseP31(entity)
entitiesArrayP["P59"]=AutoDescriptionGalaxy.parseP59(entity)
entitiesArrayP["P61"]=AutoDescriptionGalaxy.parseP61(entity)
entitiesArrayP["P223"]= AutoDescriptionGalaxy.parseP223(entity)
entitiesArrayP["P528"]=AutoDescriptionGalaxy.parseP528(entity)
entitiesArrayP["P575"]=AutoDescriptionGalaxy.parseP575(entity)
entitiesArrayP["P1090"]=AutoDescriptionGalaxy.parseP1090(entity)
entitiesArrayP["P1215"]=AutoDescriptionGalaxy.parseP1215(entity)
entitiesArrayP["P2067"]=AutoDescriptionGalaxy.parseP2067(entity)
entitiesArrayP["P2216"]=AutoDescriptionGalaxy.parseP2216(entity)
entitiesArrayP["P2583"]=AutoDescriptionGalaxy.parseP2583(entity)
entitiesArrayP["P6257"]=AutoDescriptionGalaxy.parseP6257(entity)
entitiesArrayP["P6258"]=AutoDescriptionGalaxy.parseP6258(entity)
entitiesArrayP["P6259"]=AutoDescriptionGalaxy.parseP6259(entity)
end
function AutoDescriptionGalaxy.forming()
if(entitiesArray["UGC"] ~= "") or (entitiesArray["DDO"] ~= "") then
local det=""
details = details .. "(также известен как"
if(entitiesArray["UGC"] ~= "") then det = det .. " [[Общий каталог галактик Уппсала|" .. entitiesArray.UGC .. "]]," end
if(entitiesArray["DDO"] ~= "") then det = det .. " [[Каталог обсерватории Дэвида Данлапа|" .. entitiesArray.DDO .. "]]," end
det=det:sub(1, #det - 1)
details = details .. det
details = details .. ")"
end
if(entitiesArrayP["P31"] == "галактика") then description = description .. "[[Галактики|галактика]]"
else
for ki, vi in pairs (entitiesArray["InstanceOf"]) do
description = description .. "[[" .. vi .. "]], "
end
description=description:sub(1, #description - 2)
end
if(entitiesArray["constellation"] ~= "") then
if (string.find(entitiesArray["constellation"], ",") ) then
else description = description .. " [[" .. entitiesArray["constellation"] .. " (созвездие)|созвездия " .. entitiesArray["constellation"] .. "]]." end
else description = description .. "." end
if(entitiesArrayP["P223"] ~= "") then
if (entitiesArrayP["P223"] ~= "full") then description = description .. " [[Морфологическая классификация галактик|Морфологический тип галактики]]: " .. entitiesArrayP.P223 .. "."
else
description = description .. " [[Морфологическая классификация галактик|Морфологический тип галактики]]: "
i=1
for ki, vi in pairs (entitiesArray.galType) do
if (vi ~= "") then
if(i>1) then description = description .. ", " .. vi i=i+1
else description = description .. vi i=i+1 end
end
end
description = description .. "."
end
end
if(entitiesArrayP["P1215"] ~= "") then
description = description .. " [[Видимая звёздная величина|Блеск]]: " .. entitiesArrayP.P1215 .. "."
if(entitiesArray.apparentMagnitude <= 6) then description = description .. " Видна невооружённым глазом."
else description = description .. " Видна только в телескоп." end
end
if(entitiesArrayP["P2067"] ~= "") then description = description .. " Масса: " .. entitiesArray["mass"] .. "M☉ ([[Солнечная масса|M☉]] = (1,98847 ± 0,00007)⋅10<sup>30</sup> кг)." end
if(entitiesArrayP["P575"] ~= "") then
local data = entitiesArrayP.P575
if (#data > 4) then
description = description .. " Открыта [[" .. data .. " года]]."
else
description = description .. " Открыта в [[" .. data .. " год]]у."
end
end
if(entitiesArrayP["P61"] ~= "") then description = description .. " Первооткрыватель — [[" .. entitiesArrayP.P61 .. "]]." end
if(entitiesArrayP["P1090"] ~= "") then description = description .. " [[Красное смещение]]: " .. entitiesArrayP.P1090 .. '.' end
if(entitiesArrayP["P2583"] == "full") then
description = description .. " Расстояние от [[Земля|Земли]]: "
for ki, vi in pairs (entitiesArray.distancesFromEarth) do
i=1
if (vi ~= "") then
if(i>1) then description = description .. vi .. " cветовых лет, " i=i+1
else description = description .. vi .. " cветовых лет, " i=i+1 end
end
end
description=description:sub(1, #description - 2)
description = description .. "."
end
if(entitiesArrayP["P6257"] ~= "") then description = description .. " [[Прямое восхождение]]: " .. entitiesArrayP.P6257 .. '.' end
if(entitiesArrayP["P6258"] ~= "") then description = description .. " [[Склонение]]: " .. entitiesArrayP.P6258 .. '.' end
if(entitiesArrayP["P2216"] ~= "") then
if(string.find(entitiesArrayP.P2216, "километр в секунду")) then description = description .. " Радиальная скорость: " .. entitiesArray["radV"] .. " км/c."
else description = description .. " Радиальная скорость: " .. entitiesArrayP["P2216"] .. "." end
end
if(entitiesArrayP["P6259"] ~= "") then description = description .. " [[Эпоха (астрономия)|Эпоха]]: " .. "[[" .. entitiesArrayP.P6259 .. "]]" .. '.' end
if(entitiesArrayP["P528"] == "full") then
description = description .. " <br><br>Код в каталоге: "
for k, v in pairs (entitiesArray.code) do
if(v ~= " ") then
if (entitiesArray["catalog"][k] ~= " ") then description = description .. v .. ' ([[' .. entitiesArray['catalog'][k] .. ']])' .. ", "
else description = description .. v .. ", " end
end
end
description=description:sub(1, #description - 2)
description=description..". "
end
if(entitiesArray["constellation"] ~= "") then
if (string.find(entitiesArray["constellation"], ",") ) then
else categories = categories .. "[[Категория:Галактики созвездия " .. entitiesArray["constellation"] .. "]]" end
end
if(entitiesArrayP["P528"] == "full") then
for k, v in pairs (entitiesArray.code) do
if(v ~= " ") then
if (entitiesArray["catalog"][k] ~= " ") then categories = categories .. "[[Категория:" .. entitiesArray["catalog"][k] .. "]]" end
end
end
end
if(entitiesArrayP["P223"] ~= "") then
if (entitiesArrayP["P223"] ~= "full") then categories = categories .. "[[Категория:" .. entitiesArrayP.P223 .. " (Морфологический тип галактики)]]"
else
for ki, vi in pairs (entitiesArray.galType) do
if (vi ~= "") then categories = categories .. "[[Категория:" .. vi .. " (Морфологический тип галактики)]]" end
end
end
end
end
function AutoDescriptionGalaxy.parseP31(entity)
local p31Statements=mw.wikibase.getAllStatements(entity:getId(), 'P31' )
local ignores={"галактика", "звезда"}
local i=0
if(p31Statements ~= "") then
for ki, vi in pairs (p31Statements) do
if((vi['mainsnak'] ~= nil)) then
local state=mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
if (state ~= "") then for kj, vj in pairs (ignores) do if(vj == state) then state="" end end end
if (state ~= "") then
i=i+1
entitiesArray.InstanceOf[i]=state
end
end
end
if(i>0) then return "full"
else return "галактика" end
end
end
function AutoDescriptionGalaxy.parseP59(entity)
local value = entity:formatPropertyValues("P59",mw.wikibase.entity.claimRanks).value
if(value ~= "") then
entitiesArray["constellation"]=value
return value
else return "" end
end
function AutoDescriptionGalaxy.parseP61(entity)
local value = entity:formatPropertyValues("P61",mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionGalaxy.parseP223(entity)
local valueP=entity:formatPropertyValues("P223", { mw.wikibase.entity.claimRanks.RANK_PREFERRED }).value
local value = entity:formatPropertyValues("P223",mw.wikibase.entity.claimRanks).value
if(valueP ~= "") then return value
elseif(value ~= "") then
p223Statements=mw.wikibase.getBestStatements(entity:getId(), 'P223' )
for ki, vi in pairs (p223Statements) do
local typeG=""
if((vi['mainsnak'] ~= nil)) then typeG=vi['mainsnak']['datavalue']['value'] end
if(typeG ~= "") then
if(string.find(typeG, "E") and entitiesArray.galType.E == "" or string.find(typeG, "cD")) then entitiesArray.galType.E=typeG
elseif(string.find(typeG, "S0")) then
if(entitiesArray.galType.SO == "") then entitiesArray.galType.SO=typeG end
elseif(string.find(typeG, "SB")) then
if(entitiesArray.galType.SB == "") then entitiesArray.galType.SB=typeG end
elseif(string.find(typeG, "S")) then
if(entitiesArray.galType.Sa == "") then entitiesArray.galType.Sa=typeG end
elseif(string.find(typeG, "Irr") and entitiesArray.galType.Irr == "") then entitiesArray.galType.Irr=typeG end
end
end
return "full"
else return "" end
end
function AutoDescriptionGalaxy.parseP528(entity)
local p528Statements=mw.wikibase.getBestStatements(entity:getId(), 'P528' )
i=1
for ki, vi in pairs (p528Statements) do
local catalog=""
local code=""
if(vi['qualifiers'] ~= nil) then
if((vi['qualifiers']['P972'] ~= nil)) then catalog=vi['qualifiers']['P972'][1]['datavalue']['value']['id'] end
if((vi['mainsnak'] ~= nil)) then code=vi['mainsnak']['datavalue']['value'] end
if (catalog ~= "") then entitiesArray["catalog"][i] = mw.wikibase.getLabel(catalog)
else entitiesArray["catalog"][i] = " " end
if (code ~= "") then entitiesArray["code"][i] = code
else entitiesArray["code"][i] = " " end
i=i+1
end
if (catalog ~= "") then
if (catalog == "Q2074058") then entitiesArray["DDO"] = code
elseif (catalog == "Q615925") then entitiesArray["UGC"] = code
else end
end
end
if (i>1) then return "full"
else return "" end
end
function AutoDescriptionGalaxy.parseP575(entity)
local value = entity:formatPropertyValues("P575",mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionGalaxy.parseP1090(entity)
local value = entity:formatPropertyValues("P1090",mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionGalaxy.parseP1215(entity)
local valueP=entity:formatPropertyValues("P1215", { mw.wikibase.entity.claimRanks.RANK_PREFERRED }).value
local valueN=entity:formatPropertyValues("P1215", { mw.wikibase.entity.claimRanks.RANK_NORMAL }).value
if(valueP ~= "") then
entitiesArray["apparentMagnitude"]=MathTonumber.integerModule(valueP)
return valueP
elseif(valueN ~= "") then
entitiesArray["apparentMagnitude"]=MathTonumber.integerModule(valueN)
return valueN
else return "" end
end
function AutoDescriptionGalaxy.parseP2067(entity)
local value = entity:formatPropertyValues("P2067",mw.wikibase.entity.claimRanks).value
if(value ~= "") then
entitiesArray["mass"]=MathTonumber.integerModule(value)
return value
else return "" end
end
function AutoDescriptionGalaxy.parseP2216(entity)
local value = entity:formatPropertyValues("P2216",mw.wikibase.entity.claimRanks).value
if(value ~= "") then
entitiesArray["radV"] = MathTonumber.integerModule(value)
return value
else return "" end
end
function AutoDescriptionGalaxy.parseP2583(entity)
local p2583Statements=entity:getAllStatements("P2583")
local i=1
local j=1
for ki, vi in pairs (p2583Statements) do
local amount=""
local upperBound=""
local erroR=""
if(vi['mainsnak'] ~= nil) then
if(vi['mainsnak']['datavalue']['value']['amount'] ~= nil and vi['rank'] == "normal") then
amount=vi['mainsnak']['datavalue']['value']['amount']
if(vi['mainsnak']['datavalue']['value']['upperBound'] ~= nil) then
upperBound=vi['mainsnak']['datavalue']['value']['upperBound']
erroR=MathTonumber.integerModule(upperBound)-MathTonumber.integerModule(amount)
end
end
if (erroR ~= "") then entitiesArray["distancesFromEarth"][j] = MathTonumber.integerModule(amount).."±"..erroR
else entitiesArray["distancesFromEarth"][j] = MathTonumber.integerModule(amount) end
i=i+1
j=j+1
end
end
if(i>1) then return "full" end
end
function AutoDescriptionGalaxy.parseP6257(entity)
local value = entity:formatPropertyValues("P6257",mw.wikibase.entity.claimRanks).value
if(value ~= "") then
value = string.gsub(value, " градус", '') .. '°'
return value
else return "" end
end
function AutoDescriptionGalaxy.parseP6258(entity)
local value = entity:formatPropertyValues("P6258",mw.wikibase.entity.claimRanks).value
if(value ~= "") then
value = string.gsub(value, " градус", '') .. '°'
return value
else return "" end
end
function AutoDescriptionGalaxy.parseP6259(entity)
local value = entity:formatPropertyValues("P6259",mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
return AutoDescriptionGalaxy