Mòdul:Llistawikidatacompletesa/proves
Aparença
Podeu crear la pàgina d'ús per documentar aquest mòdul Lua. |
-- Shamelessly copied from [[Module:WikimediaCEETable]]: builds a list of articles based on information from Wikidata
-- Sample use: {{#invoke:BBC100Women2019Table|table|Q1|Q2|Q3|Q4|Q5}}
-- Can be used to list 400+ articles on 1 page
-- by User:Medol, with additions by Halibutt, Braveheart, Jura1, Vall
-- Original at https://meta.wikimedia.org/wiki/Module:WikimediaCEETable. Please contribute amendments there and keep copies in sync with that version.
--
local langTable = {'ca'}
local WD = require('Module:Wikidades')
local p = {}
function p.table(frame)
-- header/init
local resultTable = '{| class="wikitable sortable" width=100%\n|-\n! № !! style="width:18%"|Article !! class="sortable" | ca !! Σ <br> !! Wikidata !! <span title="number of main statements on item">st.</span> !! \n|-'
local index = 1
local ctt = {}
local statementst = 0
local coords = 0
local images = 0
local wqsitems = ""
local qids = ""
local timeline = 0
local mylang = frame:preprocess('{{int:lang}}')
local mylang_obj = mw.language.new(mylang)
for langCount = 1, #langTable do
ctt[langCount] = 0
end
-- rows
local idinternal = "P373, P948, P935, P460, P856, P910, P213, P1343, P973, P345, P227, P244, P1612, P1472, P1325"
local commonsp = 'P18 P10 P14 P15 P41 P51 P94 P109 P117 P154 P158 P181 P207 P242 P367 P373 P443 P491 P692 P935 P948 P989 P990 P996 P1442 P1472 P1543 P1612 P1621 P1766 P1801 P1846 P1943 P1944'
while frame.args[index] do
if index > 220 then
resultTable = resultTable .. '\n|-\n|colspan=2|<b>Listed only first 200 rows</b>\n'
break
end
local Id = frame.args[index]
if not mw.wikibase.entityExists(Id) then
return '<b>Entity ' .. Id .. ' not found</b>'
end
local Label = mw.wikibase.getLabelByLang(Id, 'ca')
if not Label then
Label = 'en'
end
local ensitelink = mw.wikibase.getSitelink(Id, 'enwiki')
if ensitelink then
if Label == '' then
Label = ensitelink
end
end
local result2 = ''
local ct = 0
wqsitems = wqsitems .. "wd%3A" .. Id .. "%20"
qids = qids .. string.sub(Id, 2) .. ","
-- columns per row
for langCount = 1, #langTable do
local sitelink = mw.wikibase.getSitelink(Id, langTable[langCount] .. 'wiki' )
if sitelink then
local iw = langTable[langCount]
if iw == "be_x_old" then iw = "be-tarask" end
local bytes = 0
if mw.wikibase.getGlobalSiteId() == langTable[langCount] .. 'wiki' then
bytes = string.len(mw.title.new(sitelink):getContent() or '')
end
result2 = result2 .. '\n| style="background:#cfc;" data-sort-value=' .. bytes .. '|' .. '[[:' .. iw .. ':' .. sitelink .. '| ✔️]]'
result2 = result2 .. ' ' .. mylang_obj:formatNum(bytes)
ct = ct + 1
ctt[langCount] = ctt[langCount] + 1
if Label == '' then
Label = sitelink
end
else
result2 = result2 .. '\n| -'
end
end
-- first cells of row
local result1 = '|-\n|align=right|' .. index .. '\n|'
if ensitelink then
result1 = result1 .. '[[:en:' .. ensitelink .. '|' .. Label ..']]'
else
result1 = result1 .. Label
end
-- for humans (Q5)
local p31 = WD.claim{item=Id, property='P31', formatting='raw'}
if p31 == 'Q5' then
-- icon for females
local p21 = WD.claim{item=Id, property='P21', formatting='raw'}
if p21 == 'Q6581072' or p21 == 'Q1052281' then
result1 = result1 .. ' [[File:Female Icon.svg|18px]]'
end
-- years for humans
local p569 = WD.claim{item=Id, property='P569', formatting='Y', list=false, editicon=false}
if p569 then
local p570 = WD.claim{item=Id, property='P570', formatting='Y', list=false, editicon=false}
if p570 then
result1 = result1 .. ' <span style="font-size:smaller;font-weight:100">(' .. p569 .. '-' .. p570 .. ')</span> '
else
result1 = result1 .. ' <span style="font-size:smaller;font-weight:100">(b. ' .. p569 .. ')</span>'
end
else
result1 = result1 .. ' <span style="font-size:smaller;font-weight:100">(?)</span>'
end
else
local p625_lat = WD.claim{item=Id, property='P625', formatting='latitude', list=false, editicon=false}
if p625_lat then
local p625_lon = WD.claim{item=Id, property='P625', formatting='longitude', list=false, editicon=false}
result1 = result1 .. " [[File:Geographylogo.svg|18px|view on maps|link=https://tools.wmflabs.org/geohack/geohack.php?language=en&pagename=" .. mw.uri.encode( Label, "PATH" ) .. "¶ms=" .. p625_lat .. "_N_" .. p625_lon .. "_E]]"
coords = coords + 1
end
end
if timeline <=2 and WD.claim{item=Id, property='P580 P569 P571 P582 P576 P577'} then
timeline = timeline + 1
end
if images == 0 and WD.validProperty{item=Id, 'P18'} then
images = images + 1
end
-- last cells of row
index = index + 1
local commons = false
local statements = 0
--if WD.claim{item=Id, property=idinternal} == nil then
-- statements = statements + 1
--end
if WD.claim{item=Id, property=commonsp} then
commons = true
end
-- todo : check for Commons sitelinks
local commonsstr = ""
if commons then
commonsstr = '<span title="Wikidata item includes Commons resources">+</span>'
-- commonsstr = "[https://commons.wikimedia.org/w/index.php?fulltext=1&search=".. mw.uri.encode( Label, "PATH" ) .. " +]"
end
statementst = statementst + statements
if statements == 0 then
bgcolor = ''
else
bgcolor = 'background:#cfc;'
end
resultTable = resultTable .. result1 .. result2 ..'\n| align=right style="font-size:smaller;"| ' .. ct .. '\n| style="background:#cfc;" data-sort-value="' .. string.sub(Id, 2) .. '"|[[d:' .. Id .. '|' .. Id .. ']] \n|style="' .. bgcolor .. 'font-size:smaller;" align=right title="number of main statements on Wikidata item"|'.. statements .. '\n|style="background:#cfc;"|' .. commonsstr .. '\n'
end
-- footer
tline = ""
if timeline > 2 then
tline = "[https://tools.wmflabs.org/wikidata-timeline/#/timeline?query=" .. mw.uri.encode("items[" .. qids .. "]", "PATH" ) .. " → timeline]"
end
local mapme = ""
if coords > 0 or images > 0 then
mapme = "[https://query.wikidata.org/#%23%20click%20%22Execute%22%20to%20run%20the%20query%2C%20then%20%28on%20the%20right%20side%29%20below%20%22Display%22%20select%20the%20link%20%22Map%22%20or%20%22Image%20Grid%22%0ASELECT%20%0A%09%3Fitem%20%0A%09%3FitemLabel%20%0A%09%28GROUP_CONCAT%28DISTINCT%28%3FinstanceLabel%29%3B%20separator%3D%22%2C%20%22%29%20as%20%3Finstance_of%29%0A%09%28SAMPLE%28%3Fcoord%29%20as%20%3Fcoordinates%29%0A%09%28SAMPLE%28%3Fimg%29%20as%20%3Fimage%29%0AWHERE%0A{%0A%09VALUES%20%3Fitem%20{%20" .. wqsitems .. "%20}%09OPTIONAL%20{%3Fitem%20wdt%3AP625%20%3Fcoord1%20}%20.%0A%20%20%09OPTIONAL%20{%3Fitem%20wdt%3AP131%2Fwdt%3AP625%20%3Fcoord2%20}%20.%0A%20%20%09OPTIONAL%20{%3Fitem%20wdt%3AP276%2Fwdt%3AP625%20%3Fcoord3%20}%20.%0A%09BIND%28IF%28!BOUND%28%3Fcoord1%29%2C%28IF%28!BOUND%28%3Fcoord2%29%2C%3Fcoord3%2C%3Fcoord2%29%29%2C%3Fcoord1%29%20as%20%3Fcoord%29%0A%20.%20%20%0A%09OPTIONAL%20{%3Fitem%20wdt%3AP31%20%3Finstance%20}%20.%20%20%20%0A%20%20%09OPTIONAL%20{%3Fitem%20wdt%3AP18%20%3Fimg%20}%20.%20%20%20%0A%09SERVICE%20wikibase%3Alabel%20{%20bd%3AserviceParam%20wikibase%3Alanguage%20%22" .. mylang .. "%2Cen%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.%20%3Fitem%20rdfs%3Alabel%20%3FitemLabel%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.%20%3Finstance%20rdfs%3Alabel%20%3FinstanceLabel%20}%0A}%0AGROUP%20BY%20%3Fitem%20%3FitemLabel%20 →"
if coords > 0 then
mapme = mapme .. " map"
end
if images > 0 then
mapme = mapme .. " gallery"
end
mapme = mapme .. "]"
end
local autolist = "[https://tools.wmflabs.org/autolist/?language=" .. mylang .. "&project=wikipedia&wdq=" .. mw.uri.encode("items[" .. qids .. "]", "PATH" ) .. "&run=Run&mode_manual=or&mode_cat=or&mode_wdq=not&mode_wdqs=or&mode_find=or&chunk_size=10000 → Autolist]"
result1 = '|- align=right style="font-size:smaller" class="sortbottom"\n! Σ \n|' .. autolist .. mapme .. tline
result2 = ''
ct = 0
for langCount = 1, #langTable do
result2 = result2 .. '\n |' .. ctt[langCount]
ct = ct + ctt[langCount]
end
resultTable = resultTable .. result1 .. result2 ..'\n| ' .. ct .. '\n| data-sort-value="999999999999"| avg: <span title="average number of language versions (of ' .. #langTable .. ') per article">' .. math.floor(ct/(index-1)+0.5) .. '</span>\\<span title="average number of articles (of ' .. (index-1) .. ') per language">' .. math.floor(ct / #langTable + 0.5) .. '</span>\\<span title="overall in percent (all: '.. (#langTable * (index-1)) .. ')">' .. math.floor( ct / #langTable / (index-1)*100 + 0.5) .. '%</span>\n|' .. statementst .. '\n| [[File:Commons-logo.svg|16px|Wikimedia Commons]]'
resultTable = resultTable .. '\n|}\n'
return resultTable
end
-- WikimediaCEETable.count: counts articles from the list in certain wiki
-- Sample use: {{#invoke:WikimediaCEETable|count|lang|Q1|Q2|Q3|Q4|Q5}}
-- based on previous "table" function stripped from all the table formatting.
function p.count(frame)
resultText = ''
anum = 2
wikianum = 0
ctt = {}
for langCount = 1, #langTable do
ctt[langCount] = 0
end
while frame.args[anum] do
Id = frame.args[anum]
anum = anum + 1
local entity = mw.wikibase.getEntityObject(Id)
-- if not entity or not entity.sitelinks then
if not entity then
return '<b>Entity ' .. Id .. ' not found</b>'
end
for langCount = 1, #langTable do
local sitelink = entity:getSitelink( langTable[langCount] .. 'wiki' )
if sitelink then
iw = langTable[langCount]
if iw == "be_x_old" then iw = "be-tarask" end
ctt[langCount] = ctt[langCount] + 1
end
end
end
anum = anum - 2
-- number of articles in certain wiki. Straight...
for langCount = 1, #langTable do
if langTable[langCount] == frame.args[1] then wikianum = ctt[langCount] end
end
resultText = wikianum .. '/' .. anum -- result is two numbers with '/' separator
return resultText
end
-- WikimediaCEETable.count: counts articles from the list in certain wiki
-- Sample use: {{#invoke:WikimediaCEETable|count|lang|Q1|Q2|Q3|Q4|Q5}}
-- based on previous "table" function stripped from all the table formatting.
function p.count(frame)
resultText = ''
anum = 2
wikianum = 0
ctt = {}
for langCount = 1, #langTable do
ctt[langCount] = 0
end
while frame.args[anum] do
Id = frame.args[anum]
anum = anum + 1
local entity = mw.wikibase.getEntityObject(Id)
-- if not entity or not entity.sitelinks then
if not entity then
return '<b>Entity ' .. Id .. ' not found</b>'
end
for langCount = 1, #langTable do
local sitelink = entity:getSitelink( langTable[langCount] .. 'wiki' )
if sitelink then
iw = langTable[langCount]
if iw == "be_x_old" then iw = "be-tarask" end
ctt[langCount] = ctt[langCount] + 1
end
end
end
anum = anum - 2
-- number of articles in certain wiki. Straight...
for langCount = 1, #langTable do
if langTable[langCount] == frame.args[1] then wikianum = ctt[langCount] end
end
resultText = wikianum .. '/' .. anum -- result is two numbers with '/' separator
return resultText
end
return p