Module:Adresse : Différence entre versions
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 à 09: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