a small tool for Wikipedia article quality inspection using ORES
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

113 lines
3.8 KiB

#!/usr/bin/env python3
import os, time, json
from sys import stdin, stderr, stdout
from pprint import pprint
import subprocess
import mwclient
from datetime import datetime
site = mwclient.Site('en.wikipedia.org')
print(site)
previous_result = '' # keep track of changes, only print when there are new results (when the wikipage changed)
timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
log = open('sandbox-score-revids.txt', 'a+')
log.write('''* * * * * * * * * * * * * * * * * * * * * * * * * *
Logging sandbox-score-revids.py {}
* * * * * * * * * * * * * * * * * * * * * * * * * *'''.format(timestamp))
while True:
page = site.Pages['User:Trustinformationws/sandbox']
# print(page)
revid = list(page.revisions())[0]['revid']
# model = 'draftquality'
# model = 'damaging'
# model = 'goodfaith'
model = 'goodfaith draftquality damaging'
# model = 'wp10'
cmd = "echo '{\"rev_id\": "+str(revid)+"}' | ores score_revisions https://ores.wikimedia.org enwiki "+model
# print(cmd)
sub = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = sub.communicate()[0]
# print('>>> this is the current output', output)
output = str(output)
output = output.split('\\n')[2]
result = json.loads(output)
# pprint(result)
if result != previous_result:
if model == 'damaging':
true = result['score']['damaging']['score']['probability']['true']
false = result['score']['damaging']['score']['probability']['false']
x = '''\nLatest revid: {}. This edit is ...
... {} likely to be goodfaith,
... {} likely badfaith.'''.format(revid, true, false)
if model == 'draftquality':
ok = result['score']['draftquality']['score']['probability']['OK']
vandalism = result['score']['draftquality']['score']['probability']['vandalism']
spam = result['score']['draftquality']['score']['probability']['spam']
attack = result['score']['draftquality']['score']['probability']['attack']
x = '''\nLatest revid: {}. It is ...
... {} likely to be OK,
... {} likely to be vandalism,
... {} likely to be spam,
... {} likely to be an attack.'''.format(revid, ok, vandalism, spam, attack)
if model == 'wp10':
pprint(result)
if model == 'goodfaith':
true = result['score']['goodfaith']['score']['probability']['true']
false = result['score']['goodfaith']['score']['probability']['false']
x = '''\nLatest revid: {}. This edit is ...
... {} likely to be goodfaith,
... {} likely badfaith.'''.format(revid, true, false)
if model == 'goodfaith draftquality damaging':
# pprint(result)
goodfaith = result['score']['goodfaith']['score']['probability']['true']
badfaith = result['score']['goodfaith']['score']['probability']['false']
warning = ''
goodfaith_prediction = result['score']['goodfaith']['score']['prediction']
if goodfaith_prediction == False:
warning = '\n*THIS PLAYER IS OUT OF THE GAME*\n'
damaging = result['score']['damaging']['score']['probability']['true']
nondamaging = result['score']['damaging']['score']['probability']['false']
ok = result['score']['draftquality']['score']['probability']['OK']
vandalism = result['score']['draftquality']['score']['probability']['vandalism']
spam = result['score']['draftquality']['score']['probability']['spam']
attack = result['score']['draftquality']['score']['probability']['attack']
x = '''\nLatest revid: {}.
The last edit is ...
... {} likely to be goodfaith,
... {} likely damaging.\n
Some extra information:
The article quality ...
... {} likely to be OK,
... {} likely to be vandalism,
... {} likely to be spam,
... {} likely to be an attack.\n
{}'''.format(revid, goodfaith, damaging, ok, vandalism, spam, attack, warning)
print(x)
log.write(x)
previous_result = result
time.sleep(10)
log.close()