Aller au contenu

Module:Adresse

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 1 octobre 2014 à 21:09 et modifiée en dernier par Zolo (discuter | contributions) (création rudimentaire). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

 Documentation[voir] [modifier] [historique] [purger]

Ce module permet l'extraction d'une adresse depuis Wikidata et sa mise en forme.

Utilisation

Fonctions exportables

  • streetAddress(item, area) – Met en forme l'adresse partielle avec le numéro de rue et la rue ;
  • adminDivList(item, country) – Retourne la liste des subdivisions territoriales (commune, départements, cantons,… ) du pays en paramètre selon les données entrées dans Module:Adresse/Formats ;
  • cityLine(item, country, divlist, postcode) – Met en forme l'adresse partielle avec le nom de la ville, les noms des subdivisions territoriales et le code postal ;
  • fullAddress(item, country, divs, streetstr, divstr, showcountry, postcode) – Met en forme l'adresse complète contenant numéro de rue, nom de rue, nom de la ville, noms des subdivisions territoriales, code postal et nom du pays et ajoute la catégorie Catégorie:Page utilisant une adresse fournie par Wikidata ;
  • wikidataAddress(item, country) – Reprend l'adresse de rue issue de streetAddress et y ajoute la catégorie Catégorie:Page utilisant une adresse fournie par Wikidata.

Modules externes et autres éléments dont ce module a besoin pour fonctionner

  • mw.ustring.gsub – Remplace toutes les occurrences d'un motif dans une chaîne de caractères par une chaîne de remplacement ;
  • mw.text.listToText – Joint les éléments d'une liste pour former une chaîne de caractères ;
  • mw.text.trim – Enlève les espaces et autres caractères au début et à la fin d'une chaine de caractères ;
  • Module:Wikidata – Module contenant des fonctions de récupération des données depuis Wikidata ;
  • Module:Linguistique – Module contenant des fonctions de mise en forme et d'analyse basique d'une chaîne de caractères ;
  • Module:Country data – Module de mise en forme des noms de lieux et des nationalités.

Module en sous-page

Modules lua utilisant ce module

Modèles appelant directement ce module

Aucun

Exemples

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