Modulo:Eruçión

Da Wikipedia

La documentazione per questo modulo può essere creata in Modulo:Eruçión/man

--[[
* Modulo che ritorna le informazioni presenti su Wikidata riguardo alla eruzione
* più recente di un vulcano, come l'indice VEI o la data di inizio dell'eruzione.
]]

require('Modulo:No globals')
local mWikidata = require('Modulo:Wikidata')

-- Q-number validi come "istanza di" per un vulcano
local volcanoIds = { 'Q8072', 'Q159954', 'Q169358', 'Q190869', 'Q212057', 'Q332614',
					 'Q674775', 'Q1197120', 'Q1200524', 'Q1491559', 'Q17171019' }
-- Q-number validi come "istanza di" per una eruzione
local eruptionIds = { 'Q7692360', 'Q611880', 'Q747501', 'Q1060842', 'Q1199175',
					  'Q1639789', 'Q2546109', 'Q2703194', 'Q5943937' }
-- Item da correggere su Wikidata
local trackingCategory = '[[Categoria:Vulcani con proprietà P793 errata su Wikidata]]'
-- Numero massimo di item da analizzare per evento chiave (P793)
local maxItemsP793 = 50

local p = {}

local function getLatestEruption(from)
	local latestEruption, ids, cat
	
	volcanoIds.from = from
	if not mWikidata._instanceOf(volcanoIds) then
		return nil
	end

	ids = mWikidata._getProperty( { 'P793', formatting = 'raw', from = from }, true ) or {}
	if #ids > maxItemsP793 then
		return nil
	end
	
	for _, entityId in ipairs(ids) do
		if entityId == 'Q7692360' then
			cat = trackingCategory
		else
			eruptionIds.from = entityId
			if mWikidata._instanceOf(eruptionIds) then
				local eruption = {
					rawStart = mWikidata._getProperty( { 'P580', n = 1, formatting = 'raw', from = entityId } ),
					start = mWikidata._getProperty( { 'P580', n = 1, from = entityId } ),
					VEI = mWikidata._getProperty( { 'P1903', n = 1, formatting = 'raw', from = entityId } )
				}
				if eruption.rawStart and (not latestEruption or eruption.rawStart > latestEruption.rawStart) then
					latestEruption = eruption
				end
			end
		end
	end

	return latestEruption, cat
end

function p.data(frame)
	local latestEruption, cat = getLatestEruption(frame.args[1])
	return (latestEruption and latestEruption.start or '') .. (cat or '')
end

function p.VEI(frame)
	local latestEruption, cat = getLatestEruption(frame.args[1])
	return ((latestEruption and latestEruption.VEI) and latestEruption.VEI or '') .. (cat or '')
end

return p