Перейти к содержанию

Модуль:PopulationWikidata

Материал из Wikivoyage

Модуль для получения актуальной численности населения из Викиданных.

Из getBestStatements (все значения с предпочтительным рангом при их наличии, если их нет — все с нормальным рангом) выбирается значение с наиболее актуальным годом.

Значения без указанной даты игнорируются.


local p = {}

function p.population(frame)
    local entity = ''
	if frame.args["id"] and frame.args["id"] ~= '' then
		entity = mw.wikibase.getEntityObject(frame.args["id"])
	else
		entity = mw.wikibase.getEntityObject()
	end	
	local populationStatements = entity:getBestStatements('P1082')

	if populationStatements then
	    local bestYear = nil
	    local bestPopulation = nil
	    
	    for a, statement in ipairs(populationStatements) do
	        if statement.qualifiers and statement.qualifiers.P585 then  
	            for b, qualifier in ipairs(statement.qualifiers.P585) do
	                local year = qualifier.datavalue.value.time:match('^(%+?%-?%d+)')
	                year = tonumber(year)
	                if year and (bestYear == nil or year > bestYear) then
	                    bestYear = year
	                    bestPopulation = statement.mainsnak
	                end
	            end
	        end
	    end
	    
	    if bestPopulation then
	        return mw.wikibase.renderSnak(bestPopulation) .. ' чел. ('.. bestYear .. ')'
	    else
	        return ''
	    end
	else
	    return ''
	end
end

return p;