Moduuli:NUMBEROF
Malline:Documentation subpage Malline:Used in system
Käyttää Lua-kielellä ohjelmoitua moduulia: Module:NUMBEROF |
NUMBEROF shows statistics for a language.project (eg. en.wikipedia, cs.wikiquote, commons, etc.). Statistics update every 6 hours, except for your local wiki (en.wiki) which are real-time.
Projects tracked include:
|
Statistics are available for:
|
Usage
[muokkaa wikitekstiä]There are 2 required parameters, and an optional third:
- First parameter:
articles
,pages
,edits
,users
,activeusers
,admins
orfiles
- Second parameter (lang.project):
en.wikipedia
,en.wikiquote
,commons
, etc.. if there is no ".<project_name>" it defaults to.wikipedia
thusen
oruk
are acceptable shortcuts - Third parameter: If not empty (such as 'N') it will add a comma. For example "1000" becomes "1,000". For Wikis that use non-Latin digits, 'N' will also display numbers in the native script.
Examples
[muokkaa wikitekstiä]To show the number of articles of the French Wikipedia in format raw:
- {{NUMBEROF|articles|fr}}
To show the number of pages on Commons with comma:
- {{NUMBEROF|pages|commons|N}}
Totals
[muokkaa wikitekstiä]Totals for first parameter stats (articles
, pages
, edits
, users
, activeusers
, admins
or files
) are available in three types: totalactive
, totalclosed
and total
(ie. totalactive + totalclosed). "Active" or "closed" indicate the status of the Wikipedia, as some wikis are no longer active, but old stats are still available.
To show the total of all active sites, on wikipedia, for pages:
- {{NUMBEROF|pages|totalactive.wikipedia|N}}
There is also a special total.all
which is all projects (eg. wikipedia, wikiquote) that are active or closed.
- {{NUMBEROF|pages|total.all|N}}
Meta statistics
[muokkaa wikitekstiä]Information about the number of Wiki sites is available. Three types of stats: active
, closed
and languages
(ie. active + closed).
This allows for creating dynamic sentences for example: As of {{CURRENTMONTHNAME}} {{CURRENTYEAR}} there are {{NUMBEROF|languages|wikipedia}} Wikipedia sites of which {{NUMBEROF|active|wikipedia}} are active and {{NUMBEROF|closed|wikipedia}} are closed.
which produces: "As of joulukuu 2024 there are 352 Wikipedia sites of which 339 are active and 13 are closed."
Rankings
[muokkaa wikitekstiä]Site rankings are available. See {{Wikipedia rank by size}}
Depth
[muokkaa wikitekstiä]Depth is available. Example:
- {{NUMBEROF|depth|fr}}
See meta:Wikipedia article depth for the meaning of depth.
How it works
[muokkaa wikitekstiä]- The statistics are retrieved by Module:NUMBEROF from Commons:Data:Wikipedia_statistics/data.tab and Commons:Data:Wikipedia_statistics/meta.tab
- The rankings are retrieved from Commons:Data:Wikipedia_statistics/rank/wikipedia.tab and wikibooks.tab etc.. one for each of 8 sister projects.
- The bot Numberof runs 4x daily updating data.tab and the ranking tabs based on a site list generated by API:SiteMatrix and statistics from API:Siteinfo
- The bot runs on Toolforge from
/data/project/botwikiawk/numberof
by
How to install on other wikis
[muokkaa wikitekstiä]Copy and paste these pages:
- Template:NUMBEROF
- Module:NUMBEROF
- Module:NUMBEROF/data
This is all that is required for basic installation.
Optionally copy-paste the full package which includes documentation, a rank template and meta statistics.
- Template:NUMBEROF/doc .. optionally use shorter Template:NUMBEROF/basicdoc renamed as "/doc"
- Module:NUMBEROF/doc
- Module:NUMBEROF/rank .. for rankings
- Module:NUMBEROF/other .. for rankings
- Module:NUMBEROF/meta .. for meta statistics
- {{Wikipedia rank by size}} .. optionally translate template name
- {{Wikipedia rank by size/WP}} .. variation on the template
- {{Wikipedia rank by size/doc}}
Edit 'languages link' (left column) for:
- Template:NUMBEROF
- Module:NUMBEROF
- Template:Wikipedia rank by size (if installed)
Link to the enwiki version. This allows for easier upgrades later.
See also
[muokkaa wikitekstiä]- {{Wikipedia rank by size}}
- Numberof bot at GitHub
local aliases = {
wikidata = 'www.wikidata',
meta = 'meta.wikimedia',
commons = 'commons.wikimedia',
foundation = 'foundation.wikimedia',
wikimania = 'wikimania.wikimedia',
wikitech = 'wikitech.wikimedia',
}
local function trimArg(arg, i)
arg = mw.text.trim(arg or '')
if arg == '' then
if i then
error('Parameter ' .. i .. ' is missing. See template documentation')
end
return nil
end
return mw.ustring.lower(arg)
end
local function getValue(stats, action, map)
if action == 'depth' then
-- https://meta.wikimedia.org/wiki/Wikipedia_article_depth
-- This gives silly results if, for example, the number of articles is small.
local n = { 'articles', 'edits', 'pages' }
if map then
for i, v in ipairs(n) do
n[i] = map[v]
end
end
for i, v in ipairs(n) do
n[i] = stats[v] or 0
end
local articles, edits, pages = n[1], n[2], n[3]
if pages == 0 or articles == 0 then
return 0
end
return math.floor((edits/pages) * ((pages - articles)/articles)^2)
end
if map then
action = map[action]
end
return stats[action]
end
local function getIfLocal(site, action)
-- If wanted site is the local site where module is running,
-- return numberof result for given action, or nil.
-- This is faster than reading the cached table, and gives the current value.
local localSite = string.match(mw.site.server, '.*//(.*)%.org$') -- examples: 'af.wikipedia', 'commons.wikimedia'
if site == localSite then
if action == 'activeusers' then
action = 'activeUsers'
end
return getValue(mw.site.stats, action)
end
end
local function main(frame)
local metaWords = { active = true, closed = true, languages = true, }
local args = frame:getParent().args
local action = trimArg(args[1], 1) -- activeusers, admins, articles, edits, files, pages, users, depth, active, closed, languages
if action:sub(1, 8) == 'numberof' then -- numberofX is an alias for X
action = trimArg(action:sub(9), 1)
end
local wantMeta = metaWords[action]
local site = trimArg(args[2], 2)
site = aliases[site] or site
if not wantMeta and not site:find('.', 1, true) then
-- site is like "af" or "af.wikipedia" or "af.wikiquote" etc., including "total"
site = site .. '.wikipedia'
end
local wantComma = trimArg(args[3]) -- nil for no commas in output; "N" or anything nonblank inserts commas
local result
if wantMeta then
local data = mw.loadData('Module:NUMBEROF/meta')
local nrActive = data.nrActive[site]
local nrClosed = data.nrClosed[site]
if nrActive or nrClosed then
-- If either is set, site is valid but there may not be an entry for both active and closed.
nrActive = nrActive or 0
nrClosed = nrClosed or 0
if action == 'active' then
result = nrActive
elseif action == 'closed' then
result = nrClosed
elseif action == 'languages' then
result = nrActive + nrClosed
end
end
else
result = getIfLocal(site, action)
if not result then
local data = mw.loadData('Module:NUMBEROF/data')
local map = data.map
data = data.data
result = data[site]
if result then
result = getValue(result, action, map)
end
end
end
if result then
if wantComma then
result = mw.language.getContentLanguage():formatNum(result)
end
return result -- number or formatted string
end
return -1
end
local function rank(frame)
-- Rank sites in a specified sister project by their number of articles.
local args = frame:getParent().args
local parm = trimArg(args[1], 1) -- a number like 12 or a site name like "af" (not "af.wikipedia")
local base = trimArg(args[2]) or 'wikipedia' -- base of full site name like "wikipedia" or "wikiquote"
local wantComma = trimArg(args[3])
local data = mw.loadData('Module:NUMBEROF/' .. (base == 'wikipedia' and 'rank' or 'other'))
data = data[base]
if data then
local result
parm = tonumber(parm) or parm
if type(parm) == 'number' then
result = data.rankByIndex[parm]
else
result = data.rankBySite[parm]
if result and wantComma then
result = mw.getContentLanguage():formatNum(result)
end
end
if result then
return result -- number or string
end
end
return -1
end
return {
main = main,
rank = rank,
}