Module:Sandbox/Seudo/Test
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Sandbox/Seudo/Test/doc
Code
local p = {}
local presidents_all = {
"Q23", "Q76", "Q91", "Q207", "Q1124",
"Q6279", "Q8007", "Q8612", "Q9582", "Q9588",
"Q9640", "Q9696", "Q9916", "Q9960", "Q11613",
"Q11806", "Q11812", "Q11813", "Q11815", "Q11816",
"Q11817", "Q11820", "Q11869", "Q11881", "Q11891",
"Q11896", "Q12306", "Q12312", "Q12325", "Q22686",
"Q23505", "Q23685", "Q33866", "Q34296", "Q34597",
"Q34836", "Q35041", "Q35171", "Q35236", "Q35286",
"Q35498", "Q35648", "Q35678", "Q35686", "Q36023"
}
local presidents_tests = {
"Q8612", "Q76"
}
function p.get_first_statement(item, pid)
statements = item:getBestStatements(pid)
if statements and #statements > 0 then
return statements[1]
end
return nil
end
function p.parse_date(tim)
return {
0+string.sub(tim, 2, 5),
0+string.sub(tim, 7, 8),
0+string.sub(tim, 10, 11)
}
end
function p.get_date(item, pid)
dat = p.get_first_statement(item, pid)
if dat then
tim = dat.mainsnak.datavalue.value.time
return p.parse_date(tim)
else
return nil
end
end
function p.add_dates_function(structure, func, libelle)
startdate = nil
enddate = nil
if func.qualifiers then
dat = func.qualifiers["P580"]
if dat and #dat > 0 then
startdate = p.parse_date(dat[1].datavalue.value.time)
end
dat = func.qualifiers["P582"]
if dat and #dat > 0 then
enddate = p.parse_date(dat[1].datavalue.value.time)
end
table.insert(structure, {
["type"] = libelle,
["startdate"] = startdate,
["enddate"] = enddate
})
end
end
function p.cmpdat(a, b)
if a["startdate"][1] < b["startdate"][1] then return 1
elseif a["startdate"][1] > b["startdate"][1] then return -1 end
if a["startdate"][2] < b["startdate"][2] then return 1
elseif a["startdate"][2] > b["startdate"][2] then return -1 end
if a["startdate"][3] < b["startdate"][3] then return 1
elseif a["startdate"][3] > b["startdate"][3] then return -1 end
return 0
end
function dat2json(dat)
return "[" .. dat[1] .. ", " .. dat[2] .. ", " .. dat[3] .. "]"
end
function p.getPresidents()
res = ""
presidents = {}
for _, presid in pairs(presidents_all) do
item = mw.wikibase.getEntity(presid)
president = {
["name"] = item:getLabel(),
["birth"] = p.get_date(item, "P569"),
["death"] = p.get_date(item, "P570"),
["dates"] = {}
}
-- Activités
-- Parfois (ex. Biden), la fonction "president" est "preferred"
functions = item:getAllStatements("P39")
for _,func in pairs(functions) do
if not(func["rank"] == "deprecated") then
funcid = func.mainsnak.datavalue.value.id
-- funclibelle = func.mainsnak.datavalue.value.text
if funcid == "Q11696" then
p.add_dates_function(president["dates"], func, "president")
elseif funcid == 'Q13218630' then
p.add_dates_function(president["dates"], func, "representative")
elseif funcid == 'Q11699' then
p.add_dates_function(president["dates"], func, "vicepresident")
elseif funcid == 'Q889821' then
p.add_dates_function(president["dates"], func, "governor")
elseif funcid == 'Q13218630' then
p.add_dates_function(president["dates"], func, "representative")
elseif funcid == 'Q4416090' then
p.add_dates_function(president["dates"], func, "senator")
else
funcitem = mw.wikibase.getEntity(funcid)
label = string.lower(funcitem:getLabel())
found = false
for _,elem in pairs(funcitem:getBestStatements("P361")) do
if elem.mainsnak.datavalue.value.id == "Q66096" then
-- Sénat des États-Unis
p.add_dates_function(president["dates"], func, "senator")
found = true
break
elseif elem.mainsnak.datavalue.value.id == "Q11701" then
-- Chambre des Représentants
p.add_dates_function(president["dates"], func, "representative")
found = true
break
end
end
for _,elem in pairs(funcitem:getBestStatements("P279")) do
if elem.mainsnak.datavalue.value.id == "Q889821" then
-- Gouverneur d'État
p.add_dates_function(president["dates"], func, "governor")
found = true
break
end
end
end
end
end
--table.sort(president["dates"], p.cmpdat)
table.insert(presidents, president)
end
json = '['
for k, president in pairs(presidents) do
if k > 1 then json = json .. ',\n\t' end
json = json .. '\n{\n\t"name": "' .. president.name .. '"'
if president.birth then
json = json .. ',\n\t"birth": ' .. dat2json(president.birth)
end
if president.death then
json = json .. ',\n\t"death": ' .. dat2json(president.death)
end
json = json .. ',\n\t"activities": [\n\t\t'
for k2, activity in pairs(president.dates) do
if k2 > 1 then json = json .. ',\n\t\t' end
json = json .. '{"type": "' .. activity.type .. '"'
if activity.startdate then
json = json .. ', "start": ' .. dat2json(activity.startdate)
end
if activity.enddate then
json = json .. ', "end": ' .. dat2json(activity.enddate)
end
json = json .. '}'
end
json = json .. '\n\t\]\n}'
end
json = json .. '\n]'
return json
end
return p