require("strict")local p =
local function resolveqid(label) local resolveEntity = require("Module:ResolveEntityId")._id local qid local rawlabel if label then rawlabel = string.match(label,'%[%[([^%|%]]+)%|') or string.match(label,'%[%[([^%|%]]+)%]%]') if rawlabel then qid = resolveEntity(rawlabel) else rawlabel = label end end return qid,rawlabelend
local function tidystring(string) local tidy = mw.ustring.gsub(string,"%[1] tidy = mw.ustring.gsub(tidy,"%[2]
function p.import(frame) local tab = "|" local wikiqid = "Q328" -- QID for English Wikipedia local eol = "
" -- end of line string local coord2text = require("Module:Coordinates/sandbox")._coord2text local args = frame.args or frame:getParent.args if not args.page then return "No page specified." end if not args.config then return "No configuation." end local config = for c1,col in ipairs(mw.text.split(args.config,",")) do config[c1] = mw.text.split(col,"-") end local common = if args.common then for c1,prop in ipairs(mw.text.split(args.common,",")) do common[c1] = mw.text.split(prop,"-") common[common[c1][1]] = common[c1][2] -- create index, e.g. common["P31"]=Q39715 end end local content = mw.title.new(args.page):getContent -- read page specified content = string.match(content,"%") -- keep table only content = string.gsub(content,"||","\n|") -- use \n| for column breaks local rows = mw.text.split(content,"|-\n",true) -- split table into rows table.remove(rows,1) -- remove table definition table.remove(rows,1) -- remove heading row local output = "" local v2 = "" for rn,row in ipairs(rows) do local columns = mw.text.split(row,"\n|") -- split table rom into columns table.remove(columns,1) -- remove content before the first \n| character local label = columns[1] if label then label = tidystring(label) local qid qid,label = resolveqid(label) -- resolve qid if first column is link if not qid then qid = string.match(label,"Q%d+") -- check if QID is specified in first column end local entity if qid then entity = mw.wikibase.getEntity(qid) else v2 = v2 .. "CREATE" .. eol qid = "LAST" -- creating new item, so use LAST v2 = v2 .. qid .. tab .. 'Len' .. tab .. '"' .. label .. '"' .. eol if common["P31"] then -- create auto-description v2 = v2 .. qid .. tab .. 'Den' .. tab .. '"' .. mw.wikibase.getLabel(common["P31"]) if common["P17"] then -- add country v2 = v2 .. ' in ' if common["P131"] then v2 = v2 .. mw.wikibase.getLabel(common["P131"]) .. ", " end v2 = v2 .. mw.wikibase.getLabel(common["P17"]) end v2 = v2 .. '"' .. eol end for c = 1,#common do v2 = v2 .. qid .. tab .. common[c][1] .. tab .. common[c][2] .. eol end end local function addtov2(prop,val) v2 = v2 .. qid .. tab .. prop .. tab .. val .. tab .. "S143" .. tab .. wikiqid .. eol return v2 end for cn,col in ipairs(columns) do if config[cn] then local import = true if entity then if config[cn][2] then if entity:getAllStatements(config[cn][2])[1] then -- statement already present for this property import = false end else -- no property specified to import to import = false end end if import then col = tidystring(col) if config[cn][1]
"year" then local val = string.match(col,"%d%d%d%d") if val then v2 = addtov2(config[cn][2],"+" ..val .. "-00-00T00:00:00Z/9") end elseif config[cn][1]
"Q" then config[cn][3] = string.sub(config[cn][3],2) end v2 = addtov2(config[cn][2],val .. "U" .. config[cn][3]) end elseif config[cn][1]
"coord" then if col ~= "" then local val = mw.getCurrentFrame:preprocess(col) v2 = addtov2(config[cn][2],"@" .. coord2text(val,"lat") .. "/" .. coord2text(val,"long")) end end end end end end end return v2end
return p