Module:Sourdant/wikidata
Apparence
I gn a nén co di dzo-pådje /doc pol notule d’ esplikêyes. Clitchîz cial po l’ ahiver.
-- get informations about a reference from Wikidata
local p = {}
local wd = require("Module:Wikidata")
-- return the table of a reference with data from Wikidata
-- or false if reference doesn't exist
function p.get_reference(QID)
entity = wd.getEntity(QID);
if entity ~= nil then
local nat = entity:getClaims('P31')
if nat ~= nil then
-- if it's a person Q5 (as Leon Bernus)
if nat:hasValue("Q5") then
local data = {}
data.author = entity:getLabel()
-- iw links
data.wikisource = entity:getSitelink( 'wawikisource' )
data.wikipedia = entity:getSitelink( 'wawiki' )
-- image
local img = entity:getBestStatements('P18')
if img[1] ~= nil and img[1].mainsnak.datavalue ~= nil then
data.image = img[1].mainsnak.datavalue.value
end
-- birth and death date
local birthdate = p.get_year_from_date(entity:getBestStatements('P569'))
local deathdate = p.get_year_from_date(entity:getBestStatements('P570'))
data.year = table.concat({birthdate, ' — ', deathdate})
return data
-- if it's an edition, an article, a dictionary or a magazine
elseif nat:hasValue("Q3331189") or
nat:hasValue("Q7725634") or
nat:hasValue("Q191067") or
nat:hasValue("Q88392887")or
nat:hasValue("Q41298") or
nat:hasValue("Q23622") then
local data = {}
data.author = {}
local authors = entity:getBestStatements('P50')
local i = 1
while( authors[i] ~= nil and authors[i].mainsnak.datavalue ~= nil ) do
table.insert(data.author, wd.getLabel(authors[i].mainsnak.datavalue.value.id))
i = i + 1
end
local authors_str = entity:getBestStatements('P2093')
local i = 1
while( authors_str[i] ~= nil and authors_str[i].mainsnak.datavalue ~= nil ) do
table.insert(data.author, authors_str[i].mainsnak.datavalue.value)
i = i + 1
end
data.title = entity:getBestStatements('P1476')[1].mainsnak.datavalue.value.text
data.year = p.get_year_from_date(entity:getBestStatements('P577'))
-- image
local img = entity:getBestStatements('P18')
if img[1] ~= nil and img[1].mainsnak.datavalue ~= nil then
data.image = img[1].mainsnak.datavalue.value
else
local imgFS = entity:getBestStatements('P996')
if imgFS[1] ~= nil and imgFS[1].mainsnak.datavalue ~= nil then
data.image = imgFS[1].mainsnak.datavalue.value
end
end
-- iw links
data.wikisource = entity:getSitelink( 'wawikisource' )
data.wikipedia = entity:getSitelink( 'wawiki' )
return data
end
end
end
return nil
end
function p.get_year_from_date(dateWD)
if dateWD == nil or dateWD[1] == nil then dateWD = "?" else
if dateWD[1].mainsnak.datavalue.value.precision == 7 then
dateWD = (tonumber(string.sub(dateWD[1].mainsnak.datavalue.value.time, 2, 3))+1).."<sup>inme</sup> sièke"
elseif dateWD[1].mainsnak.datavalue.value.precision == 8 then
dateWD = string.sub(dateWD[1].mainsnak.datavalue.value.time, 2, 4).."x"
else
dateWD = string.sub(dateWD[1].mainsnak.datavalue.value.time, 2, 5)
end
end
return dateWD
end
return p