Wikiproyecto:Bots/Repositorio/usuarios-activos.py

De Wikipedia, la enciclopedia libre

actualizar · discusión · código desprotegido  

Información de fichero
  • Nombre del fichero: usuarios-activos.py
  • Lenguaje: Python
  • Estado: no protegido
Detalles de edición
  • Detalles:
Script de BOTijo (disc. · contr. · bloq.) para actualizar Wikipedia:Usuarios activos y Wikipedia:Usuarios muy activos. Originalmente tarea022.py
# -*- coding: utf-8 -*-

# Copyright (C) 2009 emijrp
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import wikipedia,re,sys,os,gzip,time, datetime
import tarea000

def percent(c):
    if c % 1000 == 0:
        wikipedia.output(u'Llevamos %d' % c)

site=wikipedia.Site('es', 'wikipedia')

bots=[u'.snoopybot.', u'Acebot', u'Addbot', u'Addihockey10 (automated)', u'AddihockeyBot', u'Africanus', u'AHbot', u'AibdescalBOT', u'Aibot', u'Albambot', u'Alecs.bot', u'Alexbot', u'Alirezabot', u'AlleborgoBot', u'Almabot', u'AlnoktaBOT', u'Alph Bot', u'Amirobot', u'Amolbot', u'Apocatequil', u'ArshavaBot', u'ArthurBot', u'AsgardBot', u'AstaBOTh15', u'AStarBot', u'AttoBot', u'AVBOT', u'AVdiscuBOT', u'AVIADOR-bot', u'AvicBot', u'AvocatoBot', u'AwOcBot', u'AxelBot', u'B1m-bot', u'Baifito', u'Barnacaga', u'BatBOT', u'Bean49Bot', u'BejaraBot', u'BelbBot', u'BendelacBOT', u'BenzolBot', u'BetBot', u'Bigsus-bot', u'Bocianski.bot', u'BodhisattvaBot', u'BokimBot', u'Bot', u'Bot flashero', u'Bot que revierte', u'Bot vh16', u'Bot-chan', u'BOT-NT-5', u'Bot-Schafter', u'BOT-Superzerocool', u'Bot0811', u'BOT8A', u'BOTafumeiro', u'BOTamon', u'BOTarate', u'Botarel', u'BOTella', u'Botellín', u'Botghex', u'BOTijo', u'Botiquín', u'BOTirithel', u'BOTito', u'Botito777', u'BotMultichill', u'Boto a Boto', u'BOToCG', u'BotOn', u'Botones', u'BOTonete', u'BOTpolicia', u'BOTrychium', u'BotSottile', u'BOTticeli', u'Botx', u'BOTzilla', u'Byrialbot', u'C-3POrao', u'Caiserbot', u'CalakBot', u'CardoBOT', u'CarsracBot', u'CatBot', u'Caypartisbot', u'CekPotBot', u'Cem-auxBOT', u'CEM-bot', u'CeraBot', u'CestBOT', u'Chabbot', u'ChayitaBOT', u'ChayoBot', u'ChenzwBot', u'ChessBOT', u'Chevebot', u'Chlewbot', u'Chobot', u'Chrisbot', u'ChuispastonBot', u'Chuli', u'CleanerBOT', u'ClemBOTerol', u'CoBot', u'CocuBot', u'CommonsDelinker', u'CSBot', u'CVBOT', u'CVNBot', u'CyeZBot', u"D'ohBot", u'DaimondBot', u'DanBot', u'DarafshBot', u'Darkicebot', u'Dbot', u'DEagleBot', u'Der Bot', u'DestruBOT', u'Dexbot', u'Dfergbot', u'DiegoFb', u'DiegusjaimesBOT', u'Dinamik-bot', u'Dinybot', u'DirlBot', u'DixonDBot', u'Dlyons493Bot', u'Don Bot', u'DorganBot', u'Dpkbot', u'DragonBot', u'Dreitbot', u'DrFO.Tn.Bot', u'Drinibot', u'DSisyphBot', u'DumZiBoT', u'EABOT', u'Ebrambot', u'EdmenBot', u'EdoBot', u'EdwardsBot', u'Egmontbot', u'EivindBot', u'El bot de la dieta', u'El bot de las chucherías', u'EleferenBot', u'ElMeBot', u'ElphiBot', u'Elvisor', u'EmausBot', u'EmBOTellado', u'EmiduronteBot', u'EnlazaBOTquote', u'EnzaiBot', u'ErfgoedBot', u'EroBot', u'Escarbot', u'Eskimbot', u'Estirabot', u'FaiBOT', u'Fajrbot', u'FaleBot', u'FANSTARbot', u'FariBOT', u'Ficbot', u'Fidelbotquegua', u'FiriBot', u'FirmaBOT', u'Fitosteroid', u'FlaBot', u'FloggerBot', u'FoZhBot', u'Francosrodriguez', u'FrescoBot', u'Further (bot)', u'GameOnBot', u'GedawyBot', u'Gerakibot', u'GhalyBot', u'Ginosbot', u'Gizbot', u'GnawnBot', u'Grillitus', u'GrouchoBot', u'Guikibot', u'Gusbot', u'H2Bot', u'HerculeBot', u'HikaruBOT', u'HipaBOT', u'HiW-Bot', u'Homobot', u'Hoo User Page Bot', u'HrAd-ATO', u'HRoestBot', u'HUBOT', u'Hxhbot', u'Idioma-bot', u'IluvatarBot', u'Imperator-KaiserBOT', u'IncrediBOT', u'IndvTbot', u'InflaBOT', u'InfoBot', u'Innocent iwbot', u'InteliBOT', u'Invadibot', u'JackBot', u'JackieBot', u'JakeukalaneBOT', u'JAnDbot', u'Jembot', u'JesúsDbot', u'JhsBot', u'Johnbot', u'Jotterbot', u'Justincheng12345-bot', u'JVbot', u'JYBot', u'K.J.Bot', u'KamikazeBot', u'Kasirbot', u'Kaspobot', u'Kasymbot', u'Ken123BOT', u'KErosEnE BOT', u'Kgsbot', u'KidsBot', u'Kikobot', u'KLBot', u'KLBot2', u'Knedlik-Pod', u'KnightRider', u'KocjoBot', u'KojBot', u'KvedBOT', u'Kwjbot', u'Kyle the bot', u'LaberintoBOT', u'LauraBot', u'Le Pied-bot', u'Legobot', u'LeonardoRob0t', u'LMLMbis', u'Lockalbot', u'Locobot', u'LoliBot', u'LoquBot', u'LordboT', u'Louperibot', u'Loveless', u'Lucia Bot', u'LucienBOT', u'Luckas-bot', u'MaatyBot', u'MacaBot', u'MafoBOT', u'MAfotBOT', u'MagnusA.Bot', u'Mahabot', u'MahdiBot', u'Maitenboot', u'Makecat-bot', u'MalarzBOT', u'MarmaseBot', u'MastiBot', u'MauritsBot', u'MelancholieBot', u'Memty Bot', u'MenoBot', u'Mentibot', u'MerlBot', u'MerlIwBot', u'MerlLinkBot', u'MetroBot', u'MetsBot', u'Miguillen-bot', u'Minsbot', u'Mjbmrbot', u'MondalorBot', u'MonoBot', u'Movses-bot', u'MSBOT', u'Muro Bot', u'MystBot', u'Nallimbot', u'Nat Bot', u'NixBot', u'NjardarBot', u'NobelBot', u'NodBot', u'Nono le petit robot', u'NTBot', u'NyappyBOT', u'Obersachsebot', u'OboeBot', u'OctraBot', u'Orgullobot', u'PaintBot', u'Panderine!', u'PasabaUnBotPorAqui', u'Patrick87-Bot', u'PatruBOT', u'PCbot', u'Peter17-Bot', u'Peti610bot', u'PhpBOT', u'Pinobot', u'PipepBot', u'PixelBot', u'PkchBot', u'Pokbot', u'PolarBot', u'Polyglottos', u'Prabot', u'PsBot', u'Ptbotgourou', u'Purbo T', u'QualiaBot', u'R2Bot', u'Ralgisbot', u'Rameshngbot', u'RebelRobot', u'RedBot', u'RedTonBot', u'Rei-bot', u'ReigneBOT', u'Rembiapo pohyiete (bot)', u'Renabot', u'Rezabot', u'Riad.Bot', u'Riccardobot', u'Ripchip Bot', u'RizoBot', u'RjpBot', u'Robbot', u'Robo-bot', u'Robocito', u'RoboDick', u'RoboServien', u'Robotito', u'RobotJcb', u'RobotQuistnix', u'RollbackerBOT', u'RonaldB', u'RotlinkBot', u'Rubbot', u'Rubinbot', u'Sahimrobot', u'SamuraiBot', u'SantoBOT', u'SantoshBot', u'SassoBot', u'SavhBot', u'SebrevBOT', u'Shuaib-bot', u'SieBot', u'SilverBOT', u'SilvonenBot', u'Soulbot', u'SoxBot', u'SpBot', u'SpeedyGonzalez', u'SpillingBot', u'SreeBot', u'StarBOT', u'STBot', u'SteenthIWbot', u'StigBot', u'SuperBOT', u'Synthebot', u'Tahir-bot', u'Tanhabot', u'TAP Bot', u'TARBOT', u'Thehelpfulbot', u'Thijs!bot', u'Thollybot', u'Thot Bot', u'TiriBOT', u'TjBot', u'TobeBot', u'TokBOT', u'Toolserver', u'Torrente', u'TottyBot', u'TronaBot', u'Tsunderebot', u'TuHan-Bot', u'TuvicBot', u'TXiKiBoT', u'Ugur Basak Bot', u'Vagobot', u'Ver-bot', u'Vini 17bot5', u'ViskonBot', u'VolkovBot', u'WarddrBOT', u'WhiBot', u'WhiteBot', u'Wiki-Bot', u'WikiBotas', u'WikiDreamer Bot', u'WikitanvirBot', u'WLMPACommonscatBot', u'Wwbot', u'Wybot', u'X-Bot', u'Xilesabot', u'Xqbot', u'XwBot', u'XZeroBot', u'YFdyh-bot', u'YonaBot', u'Yonidebot', u'Yrbot', u'YurikBot', u'ZéroBot', u'ZiyadBot', u'Zwobot', u'Zxabot', u'Zyxwvut-Bot', u'タチコマ robot']
admins=tarea000.adminList(site)
users={}
limite=7

os.system('mysql -h eswiki-p.db.toolserver.org -e "use eswiki_p;select rc_user_text from recentchanges where (rc_namespace=0 or rc_namespace=104) and rc_type=0 and rc_bot=0 and rc_timestamp>=date_add(now(), interval -%d day);" > /home/emijrp/temporal/ultimasedicionesrc.txt' % limite)
f=open('/home/emijrp/temporal/ultimasedicionesrc.txt', 'r')
c=0
print 'Cargando ediciones de cambios recientes'
for line in f:
    if c==0: #saltamos la primera linea q es el describe de sql
        c+=1
        continue
    line=unicode(line, 'utf-8')
    line=line[:len(line)-1] #evitamos \n
    line=re.sub('_', ' ', line)
    trozos=line.split('    ')
    if len(trozos)==1:
        rc_user_text=trozos[0]
        
        if users.has_key(rc_user_text):
            users[rc_user_text]+=1
        else:
            users[rc_user_text]=1
        
        c+=1
        percent(c)
f.close()

users_list = [(v, k) for k, v in users.items()]
users_list.sort()
users_list.reverse()
users_list = [(k, v) for v, k in users_list]

c=0
multiplicador=10
s=u"{{/begin|%s|%s}}\n" % (limite, multiplicador)
for user, edits in users_list:
    if edits>=limite*multiplicador and bots.count(user)==0:
        c+=1
        #wikipedia.output(u'%d) %s - %d' % (c, user, edits))
        if admins.count(user):
            s+=u'|-\n| %s || [[User:%s|%s]] <span style="font-size: 90%%;">(biblio)</span> || [[User talk:%s|Discusión]] || [[Special:Contributions/%s|%d]] \n' % (str(c),user,user,user,user,edits)
        else:
            s+=u"|-\n| %s || [[User:%s|%s]] || [[User talk:%s|Discusión]] || [[Special:Contributions/%s|%d]] \n" % (str(c),user,user,user,user,edits)

s+=u"{{/end}}"
if c != 0:
	page=wikipedia.Page(site, u'Wikipedia:Usuarios muy activos')
	page.put(s, "Bot: [[User:Invadibot/Tareas|19]] - Actualizando lista de usuarios muy activos [%d]" % c)

c=0
multiplicador=2
s=u"{{/begin|%s|%s}}\n" % (limite, multiplicador)
for user, edits in users_list:
    if edits>=limite*multiplicador and bots.count(user)==0:
        c+=1
        #wikipedia.output(u'%d) %s - %d' % (c, user, edits))
        if admins.count(user):
            s+=u'|-\n| %s || [[User:%s|%s]] <span style="font-size: 90%%;">(biblio)</span> || [[User talk:%s|Discusión]] || [[Special:Contributions/%s|%d]] \n' % (str(c),user,user,user,user,edits)
        else:
            s+=u"|-\n| %s || [[User:%s|%s]] || [[User talk:%s|Discusión]] || [[Special:Contributions/%s|%d]] \n" % (str(c),user,user,user,user,edits)

s+=u"{{/end}}"
if c != 0:
	page=wikipedia.Page(site, u'Wikipedia:Usuarios activos')
page.put(s, "BOT - Actualizando lista de usuarios activos [%d]" % c)