« Module:Adresse » : différence entre les versions
Apparence
Modèle:Infobox>Zolo Aucun résumé des modifications |
Modèle:Infobox>Zolo Aucun résumé des modifications |
||
| Ligne 2 : | Ligne 2 : | ||
local wikidata =require('Module:Wikidata') | local wikidata =require('Module:Wikidata') | ||
local afterstreetname = {} -- à remplir : les zones dans lesquelles le numéro de l'immeuble est affiché après le nom de la rue | |||
local function formatStreet(streetname, housenumber, area) -- à faire | local function formatStreet(streetname, housenumber, area) -- à faire | ||
if afterstreetname[area] then | |||
if area | |||
return streetname .. ' ' .. housenumber | return streetname .. ' ' .. housenumber | ||
else | else | ||
| Ligne 18 : | Ligne 19 : | ||
return nil | return nil | ||
end | end | ||
local | |||
local addresslines = {} -- lignes à mettre dans l'adresse : rue, codepostal + ville etc. | |||
if streets then | |||
table.insert(addresslines, mw.text.listToText(streets)) | |||
end | end | ||
if ( | if postcode or formattingarea then | ||
table.insert(addresslines, (postcode or '') .. ' ' .. (formattingarea or '')) | |||
end | end | ||
return | return table.concat(addresslines, '<br />') | ||
end | end | ||
local function numberFromClaim(claim) | local function numberFromClaim(claim) -- récupère le numéro de l'immeuble à partir d'un qualificatif P670 d'une affirmation Wikidata | ||
if not claim.qualifiers or not claim.qualifiers.P670 then | if not claim.qualifiers or not claim.qualifiers.P670 then | ||
return nil | return nil | ||
| Ligne 44 : | Ligne 41 : | ||
end | end | ||
local function streetFromClaims(claim) | local function streetFromClaims(claim) -- réupère le nom de la rue à partir d'une affirmation P669 Wikidata | ||
if not claim.mainsnak.snaktype == 'value' then | if not claim.mainsnak.snaktype == 'value' then | ||
return nil | return nil | ||
| Ligne 51 : | Ligne 48 : | ||
end | end | ||
function p.wikidataAddress(item) | local function wikidatastreet(claim , area) --formate des données sur la rue à partir d'une affirmation Wikidata | ||
local streetname = streetFromClaims(j) | |||
local housenumber = numberFromClaim(j) | |||
-- | return formatStreet(streetname, housenumber, area) | ||
end | |||
function p.wikidataAddress(item) -- fprùate l'intégralité d'une adresse à partir des données contenues dans une élément Wikidata | |||
local | -- essaye la propriété P669 (données de type 'élément' | ||
-- TODO : récupérer la zone géographique pour le formatage | |||
local streetclaims = wikidata.getClaims{item=item, property = 'P669', item=item} | |||
local streetstrings = {} | |||
if streetclaims then | if streetclaims then | ||
for i, j in pairs(streetclaims) do | for i, j in pairs(streetclaims) do | ||
streetstrings[i] = wikidatastreet(i) | |||
end | end | ||
else | |||
-- sinon,essaye p969: datatype: string | |||
streetclaims = wikidata.getClaims{property = 'P969', item=item} | |||
if streetclaims then for i, j in pairs(streetclaims) do streetstrings[i] = wikidata.formatStatement(j) end end | |||
end | end | ||
local postcode = wikidata.getClaims{ | -- code postal | ||
local postcode = wikidata.getClaims{property= 'P281', item=item} | |||
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 | 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 | postcode = nil | ||
elseif postcode then | elseif postcode then | ||
postcode = wikidata. | postcode = wikidata.formatStatement(postcode[1]) | ||
end | end | ||
-- faaut-il essayer d'ajouter la ville par P131 ? Souvent on en veut pas (par exemple en infobox) | -- faaut-il essayer d'ajouter la ville par P131 ? Souvent on en veut pas (par exemple en infobox) | ||
local val = p.formatAddress(streetstrings, postcode) | |||
if val then return | |||
val .. '[[Category:Page utilisant une adresse fournie par Wikidata]]' | |||
end | |||
end | end | ||
return p | return p | ||
Version du 27 décembre 2014 à 11:18
La documentation pour ce module peut être créée à Module:Adresse/doc
local p = {}
local wikidata =require('Module:Wikidata')
local afterstreetname = {} -- à remplir : les zones dans lesquelles le numéro de l'immeuble est affiché après le nom de la rue
local function formatStreet(streetname, housenumber, area) -- à faire
if afterstreetname[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 addresslines = {} -- lignes à mettre dans l'adresse : rue, codepostal + ville etc.
if streets then
table.insert(addresslines, mw.text.listToText(streets))
end
if postcode or formattingarea then
table.insert(addresslines, (postcode or '') .. ' ' .. (formattingarea or ''))
end
return table.concat(addresslines, '<br />')
end
local function numberFromClaim(claim) -- récupère le numéro de l'immeuble à partir d'un qualificatif P670 d'une affirmation Wikidata
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) -- réupère le nom de la rue à partir d'une affirmation P669 Wikidata
if not claim.mainsnak.snaktype == 'value' then
return nil
end
return wikidata.formatSnak(claim.mainsnak)
end
local function wikidatastreet(claim , area) --formate des données sur la rue à partir d'une affirmation Wikidata
local streetname = streetFromClaims(j)
local housenumber = numberFromClaim(j)
return formatStreet(streetname, housenumber, area)
end
function p.wikidataAddress(item) -- fprùate l'intégralité d'une adresse à partir des données contenues dans une élément Wikidata
-- essaye la propriété P669 (données de type 'élément'
-- TODO : récupérer la zone géographique pour le formatage
local streetclaims = wikidata.getClaims{item=item, property = 'P669', item=item}
local streetstrings = {}
if streetclaims then
for i, j in pairs(streetclaims) do
streetstrings[i] = wikidatastreet(i)
end
else
-- sinon,essaye p969: datatype: string
streetclaims = wikidata.getClaims{property = 'P969', item=item}
if streetclaims then for i, j in pairs(streetclaims) do streetstrings[i] = wikidata.formatStatement(j) end end
end
-- code postal
local postcode = wikidata.getClaims{property= 'P281', item=item}
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.formatStatement(postcode[1])
end
-- faaut-il essayer d'ajouter la ville par P131 ? Souvent on en veut pas (par exemple en infobox)
local val = p.formatAddress(streetstrings, postcode)
if val then return
val .. '[[Category:Page utilisant une adresse fournie par Wikidata]]'
end
end
return p