Usuário:Chicocvenancio/ChicoBot.py

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

Código[editar | editar código-fonte]

<source lang="python">

  1. -------------------------------------------------------------------------------
  2. Name: ChicoBot
  3. Purpose: Rodar as funções do ChicoBot dentro da Wikipédia
  4. Author: Chico Venancio
  5. Created: 25/02/2012
  6. Copyright: (c) Chico Venancio 2012
  7. Licence: GNU General Public License
  8. See http://www.gnu.org/licenses/gpl.txt for full text of the license
  9. -------------------------------------------------------------------------------

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

nome do artigo

Wikipédia:Fontes fiáveis/Central de fiabilidade/nome do artigo na Central da Fiabilidade e na PD do artigo"""

    1. 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')
    1. 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']]

{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', u'Robô: Adicionando

[[' + caso._title[48:] + u']]

{{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']]

{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', u'Robô: Adicionando

[[' + caso._title[48:] + u']]

{{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']]

{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', u'Robô: Adicionando

[[' + caso._title[48:] + u']]

{{Wikipédia:Fontes fiáveis/Central de fiabilidade/' + caso._title[48:] + u'}}', botflag=False)

    1. print (u'colocaria \n

      [[' + caso._title[48:] + u']]

{{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()