Modulo:Eruzione
Quiste jè 'nu module scritte cu 'u Lua. Le 'struziune ca stonne, avènene condenute jndr'à sottopàgene Modulo:Eruzione/man (modifica · cunde)
Sandbox: Modulo:Eruzione/sandbox (cange · cunde) · Test: Modulo:Eruzione/test (cange · cronologia · Lange)
Modulo per leggere da Wikidata la data e il VEI dell'ultima eruzione di un vulcano.
Su Wikidata le singole eruzioni di un vulcano sono elencate come elementi della proprietà evento chiave (P793). Il modulo utilizza perciò la funzionalità dell'accesso arbitrario per leggere l'indice di esplosività vulcanica e data di inizio di ciascuna eruzione, stabilendo al contempo qual'è la più recente.
Funzioni
La funzioni accettano un unico parametro posizionale facoltativo, per specificare l'id dell'elemento wikidata relativo al vulcano. Se non inserito, verrà utilizzato l'elemento collegato alla pagina in cui è usato il modulo.
data
Questa funzione ritorna la data della eruzione più recente.
Per esempio con {{#invoke:Eruzione|data|Q1451}}
(Q1451 è il Pinatubo) si otterrà → febbràre 1993
VEI
Questa funzione ritorna il VEI della eruzione più recente. Su Wikidata il VEI accetta valori di tipo elemento (otto, uno per ogni valore da 0 a 8), e questa funzione ne ritorna il relativo id.
Per esempio con {{#invoke:Eruzione|VEI|Q1451}}
si otterrà → Q19988064.
--[[
* 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('strict')
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