User:Magister Mathematicae/mblock.py
Created by es:Orgullomoore
Usage:
python mblock.py -archivo:wikis.txt -usuario:user-or-ip -plazo:"2 months" -motivo:"rationale"
- -archivo: a file with a list of wikis in the format:
aa.wikipedia af.wikibooks nah.wikipedia
- -usuario: user to be blocked
- -plazo: block duration
- -motivo: block summary
multiblock.py[edit]
# -*- coding: utf-8 -*-
import wikipedia, httplib, sys, codecs, urllib
def urlencode(query):
"""This can encode a query so that it can be sent as a query using
a http POST request"""
l=[]
for k, v in query:
k = urllib.quote(k)
v = urllib.quote(v)
l.append(k + '=' + v)
return '&'.join(l)
def block(usuario, sitio, plazo, motivo):
if usuario == None:
usuario = input(u'Usuario que quieres bloquear')
usuario = usuario.encode(sitio.encoding())
answer = 'y'
if answer in ['y', 'Y', 's', 'S']:
host = sitio.hostname()
address = 'http://'+host+'/w/index.php?title=Special:Blockip&action=submit&uselang=en'
print "\n************************************"
print "BLOCKING" , usuario , "IN", host
print "(",address,")"
print "************************************\n"
sitio.forceLogin(sysop = True)
token = sitio.getToken(sysop = True)
print token
predata = [
('wpBlockAddress', usuario),
('wpBlockExpiry', 'other'),
('wpBlockOther', plazo),
('wpBlockReasonList', 'other'),
('wpBlockReason', motivo),
('wpCreateAccount', '1'),
('wpEnableAutoblock', '1'),
('wpBlock', 'Block this user')
]
if token:
predata.append(('wpEditToken', token))
data = urlencode(tuple(predata)).replace('%20', '+')
print data
conn = httplib.HTTPConnection(host)
conn.putrequest("POST", address)
conn.putheader('Content-Length', str(len(data)))
print str(len(data))
conn.putheader("Content-type", "application/x-www-form-urlencoded")
conn.putheader("User-agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0")
if sitio.cookies(sysop = True):
conn.putheader('Cookie', sitio.cookies(sysop = True))
conn.endheaders()
conn.send(data)
response = conn.getresponse()
data = response.read()
conn.close()
if data != '':
data = data.decode(sitio.encoding())
try:
ibegin = data.index('<!-- start content -->') + 22
iend = data.index('<!-- end content -->')
except ValueError:
# if begin/end markers weren't found, show entire HTML file
wikipedia.output(data)
else:
# otherwise, remove the irrelevant sections
data = data[ibegin:iend]
wikipedia.output(data)
return False
def blockall(archivo, usuario, plazo, motivo):
f=codecs.open(archivo, 'r', 'utf-8')
lista=f.read().split('\n')
if "" in lista: lista.remove("")
f.close()
for li in lista:
if 'commons' in li:
sitio=wikipedia.Site('commons', 'commons')
elif 'meta' in li:
sitio=wikipedia.Site('meta', 'meta')
else:
chuleta=li.split('.')
chuleta[1]=chuleta[1].replace("\r","")
sitio=wikipedia.Site(chuleta[0], chuleta[1]) #('wikipedia','es')
block(usuario, sitio, plazo, motivo)
argumentos=sys.argv[1:]
argumentos=' '.join(argumentos)
argumentos=argumentos.split(' -')
print argumentos
for argumento in argumentos:
if argumento.lower().startswith('-archivo:'):
archivo=argumento.split('-archivo:')[1]
elif argumento.lower().startswith('usuario:'):
usuario=argumento.split('usuario:')[1]
elif argumento.startswith('plazo:'):
plazo=argumento.split('plazo:')[1]
elif argumento.startswith('motivo:'):
motivo=argumento.split('motivo:')[1]
blockall(archivo, usuario, plazo, motivo)