Usuário:Chicocvenancio/ChicoBot.py
Código
[editar | editar código-fonte]<source lang="python">
- -------------------------------------------------------------------------------
- Name: ChicoBot
- Purpose: Rodar as funções do ChicoBot dentro da Wikipédia
- Author: Chico Venancio
- Created: 25/02/2012
- Copyright: (c) Chico Venancio 2012
- Licence: GNU General Public License
- See http://www.gnu.org/licenses/gpl.txt for full text of the license
- -------------------------------------------------------------------------------
import wikipedia import catlib import pagegenerators import add_text import cPickle import re
site = wikipedia.getSite() def listar_mediations():
"""listar os casos de mediação presentes em Categoria:Casos novos de mediação e Categoria:Casos a espera de mediação dentro da subpágina de mediação"""
pagina = wikipedia.Page(site, u'Wikipédia:Mediação/Casos') #pagina = wikipedia.Page(site, u'Usuário:chicocvenancio/teste') #para testes #conteudo a ficar na pagina acima dos casos novos conteudo = u'=== Casos novos ===\n' texto_casos_novos = u'*Casos novos:0 (Pedidos feitos recentemente)\n' texto_casos_espera = u'* Casos a espera:0 (Pedidos a mais de uma semana sem ter a mediação iniciada)\n' casos_novos = set() casos_espera= set() espera_listados=set() novos_listados=set() diferenca = {'novosmais':0, 'esperamais':0, 'novosmenos':0, 'esperamenos':0}
#adicionar casos novos ao conteudo
for Page in pagegenerators.CategorizedPageGenerator(catlib.Category(site, "%s:%s" % (site.namespace(14), u'Casos novos de mediação'))): texto_casos_novos += u'::' + Page.title() + '\n' casos_novos.add(Page) #adicionar casos a espera ao conteudo for Page in pagegenerators.CategorizedPageGenerator(catlib.Category(site, "%s:%s" % (site.namespace(14), u'Casos a espera de mediação'))): texto_casos_espera += u'::' + Page.title() + u'\n' casos_espera.add(Page)
texto_casos_novos += u'\n' texto_casos_espera += u'\n' conteudo += texto_casos_novos + texto_casos_espera
novos_na_pagina = pagina.get().split( u)[1].replace( '', '').replace(u'\n', '' '::').replace('', ).split('::') espera_na_pagina = pagina.get().split( u)[3].replace( '', '').replace(u'\n', '' '::').replace('', ).split('::')
for Caso in pagegenerators.PagesFromTitlesGenerator([x for x in novos_na_pagina if x]): novos_listados.add(Caso)
for Caso in pagegenerators.PagesFromTitlesGenerator([x for x in espera_na_pagina if x]): espera_listados.add(Caso)
sumario = u'Robô ' #escrevendo sumário if casos_novos != novos_listados: for Caso in casos_novos - novos_listados: diferenca['novosmais']+= 1 for Caso in novos_listados - casos_novos: diferenca['novosmenos']+= 1 if casos_espera != espera_listados: for Caso in casos_espera - espera_listados: diferenca['esperamais']+=1 for Caso in espera_listados - casos_espera: diferenca['esperamenos']+=1 if diferenca['novosmais']: sumario+= u'Adicionando ' + str(diferenca['novosmais'])+ u' caso(s) novo(s)' + ', ' if diferenca['novosmenos']: sumario+= u'Removendo ' + str(diferenca['novosmenos'])+ u' caso(s) novo(s)' + ', ' if diferenca['esperamais']: sumario+= u'Adicionando ' + str(diferenca['esperamais'])+ u' caso(s) a espera(s)' + ', ' if diferenca['esperamenos']: sumario+= u'Removendo ' + str(diferenca['esperamenos'])+ u' caso(s) a espera(s)' + ', '
#conteudo que fica abaixo dos casos a espera conteudo += '=== Casos abertos ===' + pagina.get().split('=== Casos abertos ===', 1)[1] if pagina.get() != conteudo: #só mexer se for diferente pagina.put(conteudo, sumario, botflag=False) wikipedia.showDiff(pagina.get(), conteudo) # para testes, apresenta o diff no output if sumario == u'Robô ': print u'não foram encontradas mudanças a fazer' else: print sumario
def central_de_fiabilidade():
"""inserir automaticamente
[ver]
Wikipédia:Fontes fiáveis/Central de fiabilidade/nome do artigo na Central da Fiabilidade e na PD do artigo"""
- lista ={} #para testes
#abrir o arquivo do dicionário try: with open('dicionario.txt') as dicionario: cPickle.Unpickler(dicionario) lista = cPickle.load(dicionario) except IOError: #se o arquivo de dicionário der erro print (u'dicionário não presente, criando novo') #Gerar lista mesmo que tiver erro no arquivo lista = {}
#nunca mexer nessas subpáginas lista [wikipedia.Page(site, u'Wikipédia:Fontes fiáveis/Central de fiabilidade/InputInit', site)._title] = 1 lista [wikipedia.Page(site, u'Wikipédia:Fontes fiáveis/Central de fiabilidade/instruções', site)._title] = 1 for caso in pagegenerators.PrefixingPageGenerator(u'Wikipédia:Fontes fiáveis/Central de fiabilidade/'): se_tiver = '(Predefinição:(f)' central = wikipedia.Page(site, u'Wikipédia:Fontes fiáveis/Central de fiabilidade')
- central = wikipedia.Page(site, u'Usuário:Chicocvenancio/teste2') #para testes
pd = wikipedia.Page(site, u'Discussão:' + caso._title[48:]) if caso._title not in lista: lista[caso._title] = 0 if lista[caso._title] == 0: if not re.search(se_tiver, central.get()):
central.put(central.get() + u'\n
[[' + caso._title[48:] + u']]
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', u'Robô: Adicionando
[[' + caso._title[48:] + u']]
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', botflag=False)
try: if not re.search(se_tiver, pd.get()):
pd.put(pd.get() + u'\n
[[' + caso._title[48:] + u']]
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', u'Robô: Adicionando
[[' + caso._title[48:] + u']]
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', botflag=False)
except wikipedia.NoPage: if pd.toggleTalkPage().exists():
pd.put(u'\n
[[' + caso._title[48:] + u']]
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', u'Robô: Adicionando
[[' + caso._title[48:] + u']]
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', botflag=False)
- print (u'colocaria \n
[[' + caso._title[48:] + u']]
- print (u'colocaria \n
[[{{fullurl:Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}} ver]]
{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}' )
#gravar mudanças no arquivo do dicionário with open('dicionario.txt', 'w') as dicionario: cPickle.Pickler(dicionario) cPickle.dump(lista, dicionario)
if __name__ == "__main__":
try: listar_mediations() central_de_fiabilidade() finally: wikipedia.stopme()