forked from Facenapalm/NapalmBot
/
validstats.py
executable file
·96 lines (81 loc) · 3.3 KB
/
validstats.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env python3
"""
This script collects ruwiki's validation statistics for further plotting.
Statfile structure: first line - any comment (will be ignored), other lines -
values, separated with tabs (date, unrev_main, old_main, unrev_file, old_file,
unrev_template, old_template, unrev_cat, old_cat, unrev_redir, old_redir).
Usage:
python validstats.py statfile
"""
import sys
from pathlib import Path
from datetime import datetime
import pywikibot
from pywikibot.data.api import Request
# manually load the auth
curdir = Path(__file__).parent.parent.absolute()
userfile = curdir / "user-config.py"
exec(compile(userfile.read_text(), str(userfile), 'exec'), vars(pywikibot.config))
DEFAULT_SITE = pywikibot.Site()
def get_urlist(site=DEFAULT_SITE, namespace="0|6|10|14|100|828", redirects="nonredirects"):
"""Get list of unreviewed pages."""
request = Request(site=site,
action="query",
list="unreviewedpages",
urnamespace=namespace,
urfilterredir=redirects,
urlimit="5000")
result = []
while True:
answer = request.submit()
result += [page["title"] for page in answer["query"]["unreviewedpages"]]
if "query-continue" in answer:
request["urstart"] = answer["query-continue"]["unreviewedpages"]["urstart"]
else:
break
return result
def get_orlist(site=DEFAULT_SITE, namespace="0|6|10|14|100|828", redirects="nonredirects"):
"""Get list of oldreviewed pages."""
request = Request(site=site,
action="query",
list="oldreviewedpages",
ornamespace=namespace,
orfilterredir=redirects,
orlimit="5000")
result = []
while True:
answer = request.submit()
result += [page["title"] for page in answer["query"]["oldreviewedpages"]]
if "query-continue" in answer:
request["orstart"] = answer["query-continue"]["oldreviewedpages"]["orstart"]
else:
break
return result
def count(listname, namespace="0|6|10|14|100|828", redirects="nonredirects"):
"""Get element count in list of unreviewed or oldreviewed pages."""
if listname == "unreviewedpages":
return str(len(get_urlist(namespace=namespace, redirects=redirects)))
else:
return str(len(get_orlist(namespace=namespace, redirects=redirects)))
def main():
"""Main script function."""
if len(sys.argv) == 1:
return
DEFAULT_SITE.login()
stats = []
stats.append(datetime.strftime(datetime.utcnow(), "%Y-%m-%d"))
stats.append(count("unreviewedpages", "0"))
stats.append(count("oldreviewedpages", "0"))
stats.append(count("unreviewedpages", "6"))
stats.append(count("oldreviewedpages", "6"))
stats.append(count("unreviewedpages", "10"))
stats.append(count("oldreviewedpages", "10"))
stats.append(count("unreviewedpages", "14"))
stats.append(count("oldreviewedpages", "14"))
stats.append(count("unreviewedpages", redirects="redirects"))
stats.append(count("oldreviewedpages", redirects="redirects"))
with open(sys.argv[1], "a") as statfile:
statfile.write("\t".join(stats))
statfile.write("\n")
if __name__ == "__main__":
main()