Mòdul:Proves/Toniher

De Viquipèdia
Salta a la navegació Salta a la cerca
--[[
	Mòdul d'exemple per demostrar com funciona Scribunto i Lua
	
	{{#invoke:Proves/Toniher|densitat|valor_poblacio|valor_habitants|valor_superficie}}
	{{#invoke:Proves/Toniher|densitatwikidata|codi=valor_codi|superficie=valor_superficie}}
]]

local p = {}
 
function p.densitat( frame )
	local densitat = 0
	local poblacio = frame.args[1]
	local habitants = tonumber(frame.args[2])
	local superficie = tonumber(frame.args[3])
	if superficie ~= nil and superficie ~= "" then
		densitat = habitants / superficie
	end
	local str = "La densitat de poblacio a "..poblacio.." és "..densitat.." km2"
    return str
end

function p.densitatwikidata( frame )
	local densitat = 0
	local superficie = 1 -- Evita divisió per 0
	local str = ""
	if frame.args.codi ~= nil and frame.args.codi ~= "" then
		local codi = frame.args.codi
		local label = mw.wikibase.label( codi )
		local poblacio = agafaWikiData( codi, 'P1082' ) -- codi de població: https://www.wikidata.org/wiki/Property:P1082
		
		if poblacio == nil then
			str = "No tenim dades de població de "..label
		else
			if frame.args.superficie ~= nil and frame.args.superficie ~= "" then
				superficie = tonumber(frame.args.superficie)
				densitat = tonumber( poblacio ) / superficie
				str = label.."".." té una densitat de: "..densitat
			else
				str = label.."".." té una població de: "..poblacio	
			end
		end
	end
	return str
end

function agafaWikiData( codi, propietat ) 
	-- Basat en https://ca.wikipedia.org/wiki/M%C3%B2dul:Wikibase
	-- Problema actual https://www.wikidata.org/wiki/Wikidata:Project_chat/Archive/2014/09#How_to_use_arbitrary_access.3F
	-- Hack
	-- return frame:preprocess(  '{{data|property='..propietat..'|item='..codi..'}}' )

	-- De forma neta
	-- local entity = mw.wikibase.getEntityObject( codi )
	-- if not entity then return nil end
	-- if not entity.claims then return nil end
	
	--local hasProp = entity.claims[propietat]
	
	--if not hasProp then return nil end
	-- return hasProp[0].mainsnak.datavalue.value
	return 1000
end

return p