module:resolveEntityId

local p = {}

function p._id(idOrTitle, alt)

local function checkId(id)

if id and mw.wikibase.entityExists(id) then

local sitelink = mw.wikibase.getSitelink(id)

if sitelink then

return mw.wikibase.getEntityIdForTitle(sitelink) or mw.wikibase.getEntity(id).id

end

return mw.wikibase.getEntity(id).id

else

return alt

end

end

if type(idOrTitle) == 'string' then

idOrTitle = mw.ustring.upper(mw.ustring.sub(idOrTitle, 1, 1)) .. mw.ustring.sub(idOrTitle, 2)

if mw.wikibase.isValidEntityId(idOrTitle) then

-- idOrTitle is in the proper format for a Wikidata entity ID

return checkId(idOrTitle)

else

local eid = mw.wikibase.getEntityIdForTitle(idOrTitle)

if eid then

-- idOrTitle is a title that matches a Wikidata entity

local instanceOf = mw.wikibase.getBestStatements(eid, 'P31')[1] --instance of

if not instanceOf or instanceOf.mainsnak.datavalue.value.id ~= 'Q4167410' then

-- instance-of value is missing or is not "disambiguation"

return checkId(eid)

end

else

-- idOrTitle is a title, but no wikidata item exists for that title

local page = mw.title.new(idOrTitle)

if page then -- valid title

local rtarget = page.redirectTarget

if rtarget then -- title is a Wikipedia redirect

return p._id(rtarget.fullText, alt)

end

end

end

end

end

return alt

end

function p.entityid(frame)

return p._id(frame.args[1], frame.args[2])

end

return p