<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thegoonshow.co.uk/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ARotten_Tomatoes_data</id>
	<title>Module:Rotten Tomatoes data - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.thegoonshow.co.uk/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ARotten_Tomatoes_data"/>
	<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Rotten_Tomatoes_data&amp;action=history"/>
	<updated>2026-04-25T09:42:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Rotten_Tomatoes_data&amp;diff=4987&amp;oldid=prev</id>
		<title>Kurt: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Rotten_Tomatoes_data&amp;diff=4987&amp;oldid=prev"/>
		<updated>2022-07-22T16:40:48Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:40, 22 July 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Kurt</name></author>
	</entry>
	<entry>
		<id>https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Rotten_Tomatoes_data&amp;diff=4986&amp;oldid=prev</id>
		<title>en&gt;Aidan9382: Issues have been solved. Removing category. An explanation can be found at User talk:Indagate#Template care</title>
		<link rel="alternate" type="text/html" href="https://www.thegoonshow.co.uk/wiki/index.php?title=Module:Rotten_Tomatoes_data&amp;diff=4986&amp;oldid=prev"/>
		<updated>2022-05-14T21:14:26Z</updated>

		<summary type="html">&lt;p&gt;Issues have been solved. Removing category. An explanation can be found at &lt;a href=&quot;/wiki/index.php?title=User_talk:Indagate&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Indagate (page does not exist)&quot;&gt;User talk:Indagate#Template care&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Error = require('Module:Error')&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local months = {'January', 'February', 'March', 'April', 'May', 'June',&lt;br /&gt;
	'July', 'August', 'September', 'October', 'November', 'December'}&lt;br /&gt;
&lt;br /&gt;
local aliasesQ = {&lt;br /&gt;
    RottenTomatoes          = &amp;quot;Q105584&amp;quot;,&lt;br /&gt;
    RottenTomatoesScore     = &amp;quot;Q108403393&amp;quot;,&lt;br /&gt;
    RottenTomatoesAverage   = &amp;quot;Q108403540&amp;quot;,&lt;br /&gt;
    Fandango                = &amp;quot;Q5433722&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local aliasesP = {&lt;br /&gt;
	RottenTomatoesId        = &amp;quot;P1258&amp;quot;,&lt;br /&gt;
	reviewScore             = &amp;quot;P444&amp;quot;,&lt;br /&gt;
	reviewScoreBy           = &amp;quot;P447&amp;quot;,&lt;br /&gt;
	numberOfReviews         = &amp;quot;P7887&amp;quot;,&lt;br /&gt;
	pointInTime             = &amp;quot;P585&amp;quot;,&lt;br /&gt;
	determinationMethod     = &amp;quot;P459&amp;quot;,&lt;br /&gt;
    author                  = &amp;quot;P50&amp;quot;,&lt;br /&gt;
    publisher               = &amp;quot;P123&amp;quot;,&lt;br /&gt;
    statedIn                = &amp;quot;P248&amp;quot;,&lt;br /&gt;
    language                = &amp;quot;P407&amp;quot;,&lt;br /&gt;
    retrieved               = &amp;quot;P813&amp;quot;,&lt;br /&gt;
    referenceURL            = &amp;quot;P854&amp;quot;,&lt;br /&gt;
    archiveURL              = &amp;quot;P1065&amp;quot;,&lt;br /&gt;
    title                   = &amp;quot;P1476&amp;quot;,&lt;br /&gt;
    formatterURL            = &amp;quot;P1630&amp;quot;,&lt;br /&gt;
    archiveDate             = &amp;quot;P2960&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Helper functions ------------------------------------------------------------&lt;br /&gt;
local function falsy(x)&lt;br /&gt;
	return x == false or x == nil or x == '' or x == 0 or type(x) == 'table' and next(x) == nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- copied from Module:wd&lt;br /&gt;
local function parseDate(dateStr, precision)&lt;br /&gt;
    precision = precision or &amp;quot;d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local i, j, index, ptr&lt;br /&gt;
    local parts = {nil, nil, nil}&lt;br /&gt;
&lt;br /&gt;
    if dateStr == nil then&lt;br /&gt;
        return parts[1], parts[2], parts[3]  -- year, month, day&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 'T' for snak values, '/' for outputs with '/Julian' attached&lt;br /&gt;
    i, j = dateStr:find(&amp;quot;[T/]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if i then&lt;br /&gt;
        dateStr = dateStr:sub(1, i-1)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local from = 1&lt;br /&gt;
&lt;br /&gt;
    if dateStr:sub(1,1) == &amp;quot;-&amp;quot; then&lt;br /&gt;
        -- this is a negative number, look further ahead&lt;br /&gt;
        from = 2&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    index = 1&lt;br /&gt;
    ptr = 1&lt;br /&gt;
&lt;br /&gt;
    i, j = dateStr:find(&amp;quot;-&amp;quot;, from)&lt;br /&gt;
&lt;br /&gt;
    if i then&lt;br /&gt;
        -- year&lt;br /&gt;
        parts[index] = tonumber(mw.ustring.gsub(dateStr:sub(ptr, i-1), &amp;quot;^\+(.+)$&amp;quot;, &amp;quot;%1&amp;quot;), 10)  -- remove '+' sign (explicitly give base 10 to prevent error)&lt;br /&gt;
&lt;br /&gt;
        if parts[index] == -0 then&lt;br /&gt;
            parts[index] = tonumber(&amp;quot;0&amp;quot;)  -- for some reason, 'parts[index] = 0' may actually store '-0', so parse from string instead&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if precision == &amp;quot;y&amp;quot; then&lt;br /&gt;
            -- we're done&lt;br /&gt;
            return parts[1], parts[2], parts[3]  -- year, month, day&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        index = index + 1&lt;br /&gt;
        ptr = i + 1&lt;br /&gt;
&lt;br /&gt;
        i, j = dateStr:find(&amp;quot;-&amp;quot;, ptr)&lt;br /&gt;
&lt;br /&gt;
        if i then&lt;br /&gt;
            -- month&lt;br /&gt;
            parts[index] = tonumber(dateStr:sub(ptr, i-1), 10)&lt;br /&gt;
&lt;br /&gt;
            if precision == &amp;quot;m&amp;quot; then&lt;br /&gt;
                -- we're done&lt;br /&gt;
                return parts[1], parts[2], parts[3]  -- year, month, day&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            index = index + 1&lt;br /&gt;
            ptr = i + 1&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if dateStr:sub(ptr) ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        -- day if we have month, month if we have year, or year&lt;br /&gt;
        parts[index] = tonumber(dateStr:sub(ptr), 10)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return parts[1], parts[2], parts[3]  -- year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nil dates precede all reasonable dates since year becomes 1&lt;br /&gt;
local function datePrecedesDate(aY, aM, aD, bY, bM, bD)&lt;br /&gt;
    aY, aM, aD = aY or 1, aM or 1, aD or 1&lt;br /&gt;
    bY, bM, bD = bY or 1, bM or 1, bD or 1&lt;br /&gt;
    if aY &amp;lt; bY then return true end&lt;br /&gt;
    if aY &amp;gt; bY then return false end&lt;br /&gt;
    if aM &amp;lt; bM then return true end&lt;br /&gt;
    if aM &amp;gt; bM then return false end&lt;br /&gt;
    if aD &amp;lt; bD then return true end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- format options: 'dmy', 'mdy', 'ymd', 'iso'&lt;br /&gt;
local function format_date(Y, M, D, format)&lt;br /&gt;
	format = format or 'MDY'&lt;br /&gt;
	local s = (D or '') .. (months[M] or '') .. (Y or '')&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{title='Date', args={s, format}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Returns either QID, true, or ErrorString, false&lt;br /&gt;
local function getentityID(args)&lt;br /&gt;
	local entityID = args.qid&lt;br /&gt;
	if falsy(entityID) then&lt;br /&gt;
		local title = args.title&lt;br /&gt;
		if falsy(title) then&lt;br /&gt;
			local currentID = mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
			if currentID then&lt;br /&gt;
				return currentID, true&lt;br /&gt;
			end&lt;br /&gt;
			return Error.error({'No Wikidata item connected to current page. Need qid or title argument.'}), false&lt;br /&gt;
		else&lt;br /&gt;
			-- if not mw.title.makeTitle(0, title).exists then&lt;br /&gt;
			-- 	return Error.error({'Article ' .. title .. ' does not exist.'}), false&lt;br /&gt;
			-- end&lt;br /&gt;
			entityID = mw.wikibase.getEntityIdForTitle(title)&lt;br /&gt;
			if not entityID then&lt;br /&gt;
				return Error.error({'Article &amp;quot;' .. title .. '&amp;quot; does not exist or has no Wikidata item.'}), false&lt;br /&gt;
			end&lt;br /&gt;
			return entityID, true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	--At this point we should have an entityID. Check if valid.&lt;br /&gt;
	if not mw.wikibase.isValidEntityId(entityID) then&lt;br /&gt;
		return Error.error({'Invalid Q-identifier.'}), false&lt;br /&gt;
	end&lt;br /&gt;
	if not mw.wikibase.entityExists(entityID) then&lt;br /&gt;
		return Error.error({'Wikidata item ' .. entityID .. ' does not exist.'}), false&lt;br /&gt;
	end&lt;br /&gt;
	return entityID, true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function point_in_time(statement)&lt;br /&gt;
	if not statement.qualifiers then&lt;br /&gt;
		return nil, nil, nil&lt;br /&gt;
	end&lt;br /&gt;
	local pointintime = statement.qualifiers[aliasesP.pointInTime]&lt;br /&gt;
	if pointintime then&lt;br /&gt;
		return parseDate(pointintime[1].datavalue.value.time)&lt;br /&gt;
	end&lt;br /&gt;
	return nil, nil, nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function access_date(statement)&lt;br /&gt;
	if statement.references then&lt;br /&gt;
		local accessdate = statement.references[1].snaks[aliasesP.retrieved]&lt;br /&gt;
		if accessdate then&lt;br /&gt;
			return parseDate(accessdate[1].datavalue.value.time)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil, nil, nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function date_from_statement(statement)&lt;br /&gt;
	local Y, M, D = point_in_time(statement)&lt;br /&gt;
	if Y then&lt;br /&gt;
		return Y, M, D&lt;br /&gt;
	end&lt;br /&gt;
	Y, M, D = access_date(statement)&lt;br /&gt;
	if Y then&lt;br /&gt;
		return Y, M, D&lt;br /&gt;
	end&lt;br /&gt;
	if statement.rank == 'preferred' then&lt;br /&gt;
		return 1, 1, 3&lt;br /&gt;
	elseif statement.rank == 'normal' then&lt;br /&gt;
		return 1, 1, 2&lt;br /&gt;
	end&lt;br /&gt;
	return 1, 1, 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function reviewedby_RT(statement)&lt;br /&gt;
	if not statement.qualifiers then return false end&lt;br /&gt;
	local x = statement.qualifiers[aliasesP.reviewScoreBy]&lt;br /&gt;
	return x and x[1].datavalue.value.id == aliasesQ.RottenTomatoes&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function score_type(statement)&lt;br /&gt;
	local x = nil&lt;br /&gt;
	if statement.qualifiers then&lt;br /&gt;
		x = statement.qualifiers[aliasesP.determinationMethod]&lt;br /&gt;
	end&lt;br /&gt;
	if x then&lt;br /&gt;
		x = x[1].datavalue.value.id&lt;br /&gt;
	end&lt;br /&gt;
	local y = ''&lt;br /&gt;
	if statement.mainsnak.snaktype == 'value' then&lt;br /&gt;
		y = statement.mainsnak.datavalue.value&lt;br /&gt;
	end&lt;br /&gt;
	if x == aliasesQ.RottenTomatoesScore then&lt;br /&gt;
		return 'percent'&lt;br /&gt;
	elseif x == aliasesQ.RottenTomatoesAverage then&lt;br /&gt;
		return 'average'&lt;br /&gt;
	elseif string.match(y, '^[0-9]%%$') or string.match(y, '^[1-9][0-9]%%$') or string.match(y, '^100%%$') then&lt;br /&gt;
		return 'percent'&lt;br /&gt;
	elseif string.match(y, '^[0-9] percent$') or string.match(y, '^[1-9][0-9] percent$') or string.match(y, '^100 percent$') then&lt;br /&gt;
		return 'percent'&lt;br /&gt;
	elseif string.match(y, '^%d/10$') or string.match(y, '^%d%.%d%d?/10$') then&lt;br /&gt;
		return 'average'&lt;br /&gt;
	elseif string.match(y, '^%d out of 10$') or string.match(y, '^%d%.%d%d? out of 10$') then&lt;br /&gt;
		return 'average'&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function most_recent_score_statement(entityID, scoretype)&lt;br /&gt;
	scoretype = scoretype or 'percent'&lt;br /&gt;
	local score_statements = mw.wikibase.getAllStatements(entityID, aliasesP.reviewScore)&lt;br /&gt;
	local newest, nY, nM, nD&lt;br /&gt;
	for i, v in ipairs(score_statements) do&lt;br /&gt;
		local Y, M, D = date_from_statement(v)&lt;br /&gt;
		if v.rank ~= 'deprecated' and v.mainsnak.snaktype == 'value'&lt;br /&gt;
				and reviewedby_RT(v) and score_type(v)==scoretype&lt;br /&gt;
				and not datePrecedesDate(Y, M, D, nY, nM, nD) then&lt;br /&gt;
			nY, nM, nD = Y, M, D&lt;br /&gt;
			newest = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return newest&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_score(entityID, scoretype)&lt;br /&gt;
	scoretype = scoretype or 'percent'&lt;br /&gt;
	local x = most_recent_score_statement(entityID, scoretype)&lt;br /&gt;
	if x == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return x.mainsnak.datavalue.value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_count(entityID, args)&lt;br /&gt;
	local x = most_recent_score_statement(entityID)&lt;br /&gt;
	if x == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local y = x.qualifiers[aliasesP.numberOfReviews]&lt;br /&gt;
	if y == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local retval = string.match(y[1].datavalue.value.amount, '%d+') -- dont get sign&lt;br /&gt;
	if args ~= nil and args.spell then&lt;br /&gt;
		local s = {[1]=retval}&lt;br /&gt;
		for key, val in pairs(args) do&lt;br /&gt;
			if key == 1 or key == 'qid' or key == 'title' then&lt;br /&gt;
&lt;br /&gt;
			elseif type(key) == 'number' then&lt;br /&gt;
				&lt;br /&gt;
			else&lt;br /&gt;
				s[key] = val&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return mw.getCurrentFrame():expandTemplate{title='Spellnum per MOS', args=s}&lt;br /&gt;
	end&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_rtid(entityID, noprefix)&lt;br /&gt;
	local rtid_statements = mw.wikibase.getBestStatements(entityID, aliasesP.RottenTomatoesId)&lt;br /&gt;
	local newest, nY, nM, nD&lt;br /&gt;
	for i, v in ipairs(rtid_statements) do&lt;br /&gt;
		local Y, M, D = date_from_statement(v)&lt;br /&gt;
		if not datePrecedesDate(Y, M, D, nY, nM, nD) then&lt;br /&gt;
			nY, nM, nD = Y, M, D&lt;br /&gt;
			newest = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if newest == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	newest = newest.mainsnak.datavalue.value&lt;br /&gt;
	if noprefix then&lt;br /&gt;
		newest = string.sub(newest, string.find(newest, '/') + 1)&lt;br /&gt;
	end&lt;br /&gt;
	return newest&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_url(entityID)&lt;br /&gt;
	local rtid = get_rtid(entityID)&lt;br /&gt;
	if rtid == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local x = mw.wikibase.getBestStatements(aliasesP.RottenTomatoesId, aliasesP.formatterURL)&lt;br /&gt;
	return (string.gsub(x[1].mainsnak.datavalue.value, '$1', rtid))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_date(entityID, part, format)&lt;br /&gt;
	local z = most_recent_score_statement(entityID)&lt;br /&gt;
	if z == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local Y, M, D = date_from_statement(z)&lt;br /&gt;
	if     part == 'year' then&lt;br /&gt;
		return Y or ''&lt;br /&gt;
	elseif part == 'month' then&lt;br /&gt;
		return months[M] or ''&lt;br /&gt;
	elseif part == 'day' then&lt;br /&gt;
		return D or ''&lt;br /&gt;
	end&lt;br /&gt;
	return format_date(Y, M, D, format)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_access_date(entityID, format)&lt;br /&gt;
	local z = most_recent_score_statement(entityID)&lt;br /&gt;
	if z == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local Y, M, D = access_date(z)&lt;br /&gt;
	if not Y then&lt;br /&gt;
		Y, M, D = point_in_time(z)&lt;br /&gt;
	end&lt;br /&gt;
	return format_date(Y, M, D, format)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_asof(entityID, args)&lt;br /&gt;
	local s = {}&lt;br /&gt;
	for key, val in pairs(args) do&lt;br /&gt;
		if key == 1 or key == 'qid' or key == 'title' then&lt;br /&gt;
			&lt;br /&gt;
		elseif key == 2 then&lt;br /&gt;
			s[1] = get_date(entityID, 'year')&lt;br /&gt;
		elseif key == 3 then&lt;br /&gt;
			s[2] = get_date(entityID, 'month')&lt;br /&gt;
		elseif key == 4 then&lt;br /&gt;
			s[3] = get_date(entityID, 'day')&lt;br /&gt;
		elseif type(key) == 'number' then&lt;br /&gt;
			s[key-1] = val&lt;br /&gt;
		else&lt;br /&gt;
			s[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{title='As of', args=s}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_rtprose(entityID, args)&lt;br /&gt;
	local s = {get_score(entityID), get_score(entityID, 'average'), get_count(entityID)}&lt;br /&gt;
	s[1] = string.match(s[1], '%d+')&lt;br /&gt;
	s[2] = string.match(s[2], '%d%.%d%d?') or string.match(s[2], '%d')&lt;br /&gt;
	s[&amp;quot;access-date&amp;quot;] = get_access_date(entityID, args.df)&lt;br /&gt;
	for key, val in pairs(args) do&lt;br /&gt;
		if key == 1 or key == 'qid' or key == 'title' then&lt;br /&gt;
			&lt;br /&gt;
		elseif type(key) == 'number' then&lt;br /&gt;
			s[key + 2] = val&lt;br /&gt;
		else&lt;br /&gt;
			s[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{title='Rotten Tomatoes prose', args=s}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_edit_icon(entityID)&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{title='EditAtWikidata', args={qid=entityID, pid='P444'}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_table(entityID)&lt;br /&gt;
	return get_score(entityID) .. ' (' .. get_count(entityID) .. ' reviews)'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		wrappers = 'Template:Rotten Tomatoes data',&lt;br /&gt;
		removeBlanks = false,&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local entityID, is_good = getentityID(args)&lt;br /&gt;
	if not is_good then&lt;br /&gt;
		return entityID -- which is the error message in this case&lt;br /&gt;
	end&lt;br /&gt;
	local command = args[1]&lt;br /&gt;
	if falsy(command) then&lt;br /&gt;
		return Error.error({'Missing command.'})&lt;br /&gt;
	end&lt;br /&gt;
	command = string.lower(command)&lt;br /&gt;
	local retval&lt;br /&gt;
	if     command == 'score' then&lt;br /&gt;
		retval = get_score(entityID, 'percent')&lt;br /&gt;
	elseif command == 'average' then&lt;br /&gt;
		retval = get_score(entityID, 'average')&lt;br /&gt;
	elseif command == 'count' then&lt;br /&gt;
		retval = get_count(entityID, args)&lt;br /&gt;
	elseif command == 'rtid' then&lt;br /&gt;
		retval = get_rtid(entityID, args.noprefix)&lt;br /&gt;
	elseif command == 'url' then&lt;br /&gt;
		retval = get_url(entityID)&lt;br /&gt;
	elseif command == 'date' then&lt;br /&gt;
		retval = get_date(entityID, 'date', args.df)&lt;br /&gt;
	elseif command == 'year' then&lt;br /&gt;
		retval = get_date(entityID, command)&lt;br /&gt;
	elseif command == 'month' then&lt;br /&gt;
		retval = get_date(entityID, command)&lt;br /&gt;
	elseif command == 'day' then&lt;br /&gt;
		retval = get_date(entityID, command)&lt;br /&gt;
	elseif command == 'access date' or command == 'accessdate' or command == 'access-date' then&lt;br /&gt;
		retval = get_access_date(entityID, args.df)&lt;br /&gt;
	elseif command == 'as of' or command == 'asof' then&lt;br /&gt;
		retval = get_asof(entityID, args)&lt;br /&gt;
	elseif command == 'prose' then&lt;br /&gt;
		retval = get_rtprose(entityID, args)&lt;br /&gt;
	elseif command == 'edit' then&lt;br /&gt;
		retval = get_edit_icon(entityID)&lt;br /&gt;
	elseif command == 'table' then&lt;br /&gt;
		retval = get_table(entityID)&lt;br /&gt;
	else&lt;br /&gt;
		return Error.error({'Invalid command.'})&lt;br /&gt;
	end&lt;br /&gt;
	if falsy(retval) then&lt;br /&gt;
		return Error.error({'RT data for &amp;quot;' .. command .. '&amp;quot; unavailable.'})&lt;br /&gt;
	end&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;Aidan9382</name></author>
	</entry>
</feed>