« Module:Adresse » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Aucun résumé des modifications
0x010D (discussion | contributions)
Aucun résumé des modifications
Ligne 31 : Ligne 31 :


local function numberFromClaim(claim) -- récupère le numéro de l'immeuble à partir d'un qualificatif P670 d'une affirmation Wikidata
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 or not claim.qualifiers or not claim.qualifiers.P670 then
return nil
return nil
end
end

Version du 7 janvier 2015 à 15:06

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, '
') 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 or 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 or 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 .. end end return p