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