Модуль:RatingFIDE

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
local p = {}

function p.GetRating(frame)
	local args = frame:getParent().args
    local PlayerIDstr = args['ID'] or frame.args['ID']
    local NeedSource = args['Ссылка']=='да' or frame.args['Ссылка']=='да'
    if PlayerIDstr == nil then return "Введите id шахматиста" end
    local PlayerID = tonumber(PlayerIDstr)

	local tabular = mw.ext.data.get("FIDE Standard rating.tab")
	if tabular == nil then return "Нет таблицы с данными" end
	local Rating = nil
	for k,v in pairs(tabular.data) do
		--do return v[1].." ".. v[2] .." ".. PlayerID end
		if v[1] == PlayerID then
			Rating = v[2]
			break 
		end
	end
	if Rating == nil then 
		if args[1]==nil then 
	    	CallSite = mw.wikibase.getEntityObject() 
	    else
	    	CallSite = mw.wikibase.getEntityObject(string.match( args[1], "Q%d+")) 
		end		
		if (CallSite == nil) or (CallSite.claims.P1087 == nil) then
			Rating = "Нет данных"
		else
			
	        local latest, latestTime
	        latestTime = "+1900-01-01T00:00:00Z"
	        for k, v in ipairs(CallSite.claims.P1087) do
	        	--do return v.qualifiers.P585[1].datavalue.value.time end
	            if v.qualifiers.P585[1].datavalue.value.time > latestTime then
	                latest = CallSite.claims.P1087[k].mainsnak.datavalue.value.amount
	                latestTime = v.qualifiers.P585[1].datavalue.value.time
	            end
	        end
			Rating = string.sub(latest, 2) .. " (" .. string.sub(latestTime, 7, 8) .. "." .. string.sub(latestTime, 2, 5) .. ")"
		end
	else
		if NeedSource then Rating = Rating .. frame:callParserFunction{name = '#tag:ref', args = {'['.. tabular.sources ..']'}} end
	end
	return Rating 
end

return p