모듈:Wd

최근 편집: 2023년 5월 13일 (토) 00:15

문서와 연결된 위키베이스 항목이 있고 그 항목에 위키데이터 항목 정보가 있다면 이를 토대로 위키데이터 정보를 가져오는 모듈입니다.

wikipedia:Module:Wd와 사용법이 동일합니다.


local wbGetEntity = mw.wikibase.getEntity
local wbGetEntityIdForTitle = mw.wikibase.getEntityIdForTitle

--- https://phabricator.wikimedia.org/T330562
local function convertTo1IndexedArray(array)
	local newArray = {}

	local zeroIndexed = array[0] ~= nil
	for k, v in pairs(array) do
		if type(v) == 'table' then
			v = convertTo1IndexedArray(v)
		end
		local newK = zeroIndexed and type(k) == 'number' and k+1 or k
		newArray[newK] = v
	end
	return newArray
end

local function getWikidataEntityIdForEntity(entity)
  if entity == nil then return nil end
  local statements = entity:getBestStatements( 'P64' )
  if #statements == 0 then return nil end
  
  return statements[1].mainsnak.datavalue.value
end

mw.wikibase.getEntityIdForCurrentPage = function()
  local entity = wbGetEntity()
  return getWikidataEntityIdForEntity(entity)
end

mw.wikibase.getEntityIdForTitle = function(pageTitle)
  local id = wbGetEntityIdForTitle(pageTitle)
  local entity = wbGetEntity(id)
  return getWikidataEntityIdForEntity(entity)
end

mw.wikibase.entityExists = function( id )
  return mw.ext.UnlinkedWikibase.getEntity( id ) ~= nil
end

mw.wikibase.getEntity = function( id )
  if id == nil then
    return mw.wikibase.getEntityIdForCurrentPage()
  end
  return convertTo1IndexedArray(mw.ext.UnlinkedWikibase.getEntity( id ))
end

mw.wikibase.getLabelByLang = function( id, languageCode )
  local entity = mw.wikibase.getEntity(id)
  local labels = entity.labels
  if labels[languageCode] ~= nil then
    return labels[languageCode].value
  end
  if labels.en ~= nil then
    return labels.en.value
  end
  return ''
end

-- mw.wikibase.getSitelink = function( itemId, globalSiteId )
--   return 'todo'
-- end
-- mw.wikibase.getDescription = function( id )
--   return 'todo'
-- end

return require('Module:@en/Wd')