Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Import table
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
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,rawlabel end local function tidystring(string) local tidy = mw.ustring.gsub(string,"%<ref.+%<%/ref%>","") -- remove any references with <ref .. </ref> tidy = mw.ustring.gsub(tidy,"%<ref.+%/%>","") -- remove any references with <ref .. /> tidy = mw.text.trim(tidy) -- trim spaces return tidy end function p.import(frame) local tab = "|" local wikiqid = "Q328" -- QID for English Wikipedia local eol = "<br>" -- 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,"|-",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 ' .. 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] == "wikilink" then local val = resolveqid(col) if val then v2 = addtov2(config[cn][2],val) end elseif 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] == "quantity" then local val = string.gsub(col,",","") -- remove any commas val = string.match(val,"%d+%.?%d*") -- extract value, possibly from inside convert template if val then if string.upper(string.sub(config[cn][3],1,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] == "text" then if col ~= "" then v2 = addtov2(config[cn][2],'"' .. col .. '"') 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 v2 end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Module other
(
edit
)
Template:Module rating
(
edit
)
Template:Ombox
(
edit
)
Template:Para
(
edit
)
Template:Sandbox other
(
edit
)
Template:Tl
(
edit
)
Module:Arguments
(
edit
)
Module:Import table/doc
(
edit
)
Module:Message box
(
edit
)
Module:Message box/configuration
(
edit
)
Module:Message box/ombox.css
(
edit
)
Module:String
(
edit
)
Module:Yesno
(
edit
)