Module:Sandbox/Jc86035/2

From blackwiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Sandbox/Jc86035/2/doc

local p = {}

-- CHARTS TABLE – Wikidata entity IDs for each chart.
local charts = {
	-- AUSTRALIA
	['ARIA SINGLES CHART'] = 'Q30916704',
	['ARIA SINGLES'] = 'Q30916704',
	['AU-SINGLES'] = 'Q30916704',
	['ARIA ALBUMS CHART'] = 'Q30916708',
	['ARIA ALBUMS'] = 'Q30916708',
	['AU-ALBUMS'] = 'Q30916708',

	-- CANADA
	['CANADIAN HOT 100'] = 'Q472737',
	['CA100'] = 'Q472737',
	['CA-SINGLES'] = 'Q472737',
	['CANADIAN ALBUMS CHART'] = 'Q680355',
	['CANADIAN ALBUMS'] = 'Q680355',
	['CA-ALBUMS'] = 'Q680355',

	-- IRELAND
	['IRISH SINGLES CHART'] = 'Q1056800',
	['IRISH SINGLES'] = 'Q1056800',
	['IE-SINGLES'] = 'Q1056800',
	['IRISH ALBUMS CHART'] = 'Q1094973',
	['IRISH ALBUMS'] = 'Q1094973',
	['IE-ALBUMS'] = 'Q1094973',

	-- NEW ZEALAND
	['NZ TOP 40 SINGLES'] = 'Q1407678',
	['NZ SINGLES'] = 'Q1407678',
	['NZ-SINGLES'] = 'Q1407678',
	['NZ TOP 40 ALBUMS'] = 'Q55767591',
	['NZ-ALBUMS'] = 'Q55767591',
	['NZ-ALBUMS'] = 'Q55767591',

	-- UNITED KINGDOM
	['UK SINGLES CHART'] = 'Q193259',
	['UK SINGLES'] = 'Q193259',
	['UK-SINGLES'] = 'Q193259',
	['GB-SINGLES'] = 'Q193259',
	['UK ALBUMS CHART'] = 'Q719415',
	['UK ALBUMS'] = 'Q719415',
	['GB-ALBUMS'] = 'Q719415',

	-- UNITED STATES
	['BILLBOARD HOT 100'] = 'Q180072',
	['BILLBOARD 100'] = 'Q180072',
	['BB100'] = 'Q180072',
	['US-SINGLES'] = 'Q180072',
	['BILLBOARD 200'] = 'Q188819',
	['BB200'] = 'Q188819',
	['US-ALBUMS'] = 'Q188819',
}

local getArgs = require('Module:Arguments').getArgs

local function makeInvokeFunction(funcName)
	-- makes a function that can be returned from #invoke, using
	-- [[Module:Arguments]].
	return function (frame)
		local args = getArgs(frame, {parentFirst = true})
		return p[funcName](args, frame)
	end
end

p._main = function(args, frame)
	local chart = mw.ustring.upper(args[1])
	local qid = args[2]
	if charts[chart] then chart = charts[chart] end
	
	local result = '–'
	local highest, references
	
	local entity = mw.wikibase.getEntity(qid)
	if entity and entity.claims then
		local data = entity.claims['P2291']
		if data and data[1] then
			for i, v in ipairs(data) do
				if v.mainsnak.datavalue.value.id == chart then
					local tmp = tonumber(v.qualifiers.P1352[1].datavalue.value.amount)
					if tmp and (not highest or tmp < highest) then
						highest = tmp
						references = i
					end
				end
			end
			references = references and data[references].references
		end
	end
	
	result = highest and tostring(highest) or result
	
	return result
end

p.main = makeInvokeFunction('_main')

return p