Module:Adresse

De Lagny-sur-Marne Wiki
Version datée du 1 octobre 2014 à 19:09 par 0x010D (discussion | contributions) (création rudimentaire)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

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 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 .. '
' 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