Module:Adresse
Apparence
La documentation pour ce module peut être créée à Module:Adresse/doc
local p = {}
local wikidata =require('Module:Wikidata')
local function formatStreet(streetname, housenumber, area) -- à faire
local numberafter = 'DEU AUT' --pays dans lesquels le numéro de rue est avant le num
if area and string.find(numberafter, area .. ' ') then
return streetname .. ' ' .. housenumber
else
return housenumber .. ' ' .. streetname
end
end
function p.formatAddress(streets, postcode, city, formattingarea)
-- streets est une table de {streetname, number, }
-- formatting area est le lieu, normalement plus large que "city" qui détermine le formatage de la rue et du code postal
if (not streets or #streets == 0) and (not postcode) and (not city) then
return nil
end
local streetstring = ''
for i, j in pairs(streets) do
if j.number then
j = formatStreet(j.name, j.number)
else
j = j.name
end
streetstring = streetstring .. j .. '<br />'
end
if (not postcode) and (not area) then
return streetstring
end
return streetstring .. (postcode or '') .. ' ' .. (area or '')
end
local function numberFromClaim(claim)
if not claim.qualifiers or not claim.qualifiers.P670 then
return nil
end
local vals = {}
for i, j in pairs(claim.qualifiers.P670) do
table.insert(vals, wikidata.formatSnak(j))
end
return table.concat(vals)
end
local function streetFromClaims(claim)
if not claim.mainsnak.snaktype == 'value' then
return nil
end
return wikidata.formatSnak(claim.mainsnak)
end
function p.wikidataAddress(item)
-- en priorité la propriété P669, datatype: item
local streetclaims = wikidata.getClaims{item=item, property = 'P669'}
-- sinon, p969: datatype: string
if not streetclaims then
streetclaims = wikidata.getClaims{item=item, property = 'P669'}
end
local streets = {}
if streetclaims then
for i, j in pairs(streetclaims) do
local streetname = streetFromClaims(j)
if streetname then
local number = numberFromClaim(j)
table.insert(streets, {name = streetname, number = number })
end
end
end
local postcode = wikidata.getClaims{item=item, property= 'P281'}
if postcode and #postcode > 1 then -- s'il y a plusieurs codes postaux, il y a sans doute plusieurs adresses différentes, c'est difficile de savoir lequel correspond à laquelle
postcode = nil
elseif postcode then
postcode = wikidata.formatSnak(postcode[1].mainsnak)
end
-- faaut-il essayer d'ajouter la ville par P131 ? Souvent on en veut pas (par exemple en infobox)
return p.formatAddress(streets, postcode)
end
return p