Ajuda:Página de testes/1

Origem: Wikipédia, a enciclopédia livre.

Esboço de código em Python para monitorar o desempenho dos filtros de edições.

A fazer

  • Considerar a criação de bancos de dados no tool labs para manter um registro dessas informações ao longo do tempo.
  • Gerar tabelas como as da wiki em inglês.

Código em Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Licença: GNU General Public License 3.0 (GPL V3) e Creative Commons Attribution/Share-Alike 3.0 (CC-BY-SA)
import urllib2
import re
import datetime
# FIXME: Get this from command line
wiki = 'pt.wikipedia.org'
# FIXME: Get this by means of an API request such as
# https://pt.wikipedia.org/w/api.php?action=query&list=abusefilters&format=json&abflimit=max&abfprop=id
filterCount = 125
reFilterStats = r'\(abusefilter-edit-status: ([\d,]+), ([\d,]+), (\d+\.\d+), (\d+\.\d+), ([\d,]+)\)'
reGlobalStats = r'\(abusefilter-status: ([\d,]+), ([\d,]+), (\d+\.\d+), ([\d,]+), ([\d,]+), (\d+\.\d+)\)'

def getStats( filterId = None ):
    if filterId:
        page = 'Special:AbuseFilter/' + str( filterId )
        status = re.compile( reFilterStats )
    else:
        page = 'Special:AbuseFilter'
        status = re.compile( reGlobalStats )
    url = 'http://' + wiki + '/wiki/' + page + '?uselang=qqx'
    lines = urllib2.urlopen( url ).readlines()
    for line in lines:
        m = re.search( status, line )
        if m:
            return m.groups()
        elif re.search( 'abusefilter-edit-denied', line ):
            return '0', '0', '0', '0', '0','0'
    print( 'Falha ao consultar dados sobre o filtro.' )
    return '0', '0', '0', '0', '0','0'

def addToGlobalStatsDB( timestamp, actions, reachedLimit, limit, matched ):
    # TODO: Implement this
    print( timestamp, actions, reachedLimit, limit, matched )

def addToSpecificStatsDB( timestamp, filterId, actions, matched, time, conditions ):
    # TODO: Implement this
    print( timestamp, filterId, actions, matched, time, conditions )

timestamp = datetime.datetime.utcnow().isoformat()
s = getStats()
addToGlobalStatsDB( timestamp, s[0], s[1], s[3], s[4] )

for id in range( 1, filterCount + 1 ):
    #FIXME: Wait a few moments before making a new request?
    timestamp = datetime.datetime.utcnow().isoformat()
    s = getStats( id )
    addToSpecificStatsDB( timestamp, id, s[0], s[1], s[3], s[4])