Proyecto para crear un Bot que informe en nuestro canal de IRC cada vez que alguien modifique una pagina de este wiki

Tareas

  1. Encontrar la seccion de codigo en moin que se ejecuta al dar click sobre Guardar Cambios

  2. Buscar una API para conectarse al IRC usando Python o en su defecto algo de documentacion sobre como hacerlo con sockets
    1. A Simple Python IRC Client de 27 Lineas

    2. Aunque hecho en php Calibot es otro ejemplo pequeño, que deberiamos ver.

    3. python-irclib Python IRC library

Notas

Si nuestro wiki "el-directorio.org" está corriendo en version de Escritorio puede que cuando alguien haya creado una nueva página esta es representada como un fichero dentro de la estructura del moin, por ejemplo en el sistema puede quedar así ../Programas/Wiki/Moin/EdicionEscritorio/1.5.3-1/wiki/data/pages/PaginaCreada y allí mismo se crearia un fichero llamado edit-log el cual nos va a indicar quien hizo el cambio o si es nueva la página quien la creó y tambien queda registrado el comentario y otras lineas mas tal como el numero de la revision y maquina IP ../Programas/Wiki/Moin/EdicionEscritorio/1.5.3-1/wiki/data/pages/PaginaCreada/edit-log por ejemplo:

si alguien creó una página y despues la editó debe salir algo como estó en el fichero mencionado.

1156467444000000        00000001        SAVENEW PepitoPerez     201.244.254.156       localhost.localdomain 1156467048.02.33588               nueva página!
1156468298000000        00000002        SAVE    PepitoPerez     201.244.254.156       localhost.localdomain 1156467048.02.33588               nueva edición!

Entonces podria servir de algo esta informacion a la hora de crear nuestro Bot en #el-directorio en irc.freenode.net

Tambien puede servir saber que cuando activamos un evento, el fichero ...Programas/Wiki/Moin/EdicionEscritorio/1.5.3-1/wiki/data/event-log guarda la informacion de si el evento fue un SAVEPAGE o VIEWPAGE

Por ejemplo si creamos la página Bot nos debe aparecer al final del fichero algo como:

...
1156552844000000  SAVEPAGE  pagename=Bot&HTTP_USER_AGENT=Mozilla/5.0+%28X11%3B+U%3B+Linux+i686%3B+es-ES%3B+
rv%3A1.7.8%29+Gecko/20060628+Debian/1.7.8-1sarge7.1&
HTTP_REFERER=http%3A//undominio.com%3A8080/Bot&REMOTE_ADDR=127.0.0.1

Entonces seria nuestro condicional para la notificacion del Bot dentro del irc.

Estaria bien tener en cuenta la parte de codigo en ...Programas/Wiki/Moin/EdicionEscritorio/1.5.3-1/MoinMoin/server/standalone.py

   1 class SimpleServer(BaseHTTPServer.HTTPServer):
   2         ...
   3         ...
   4         def serve_forever(self):
   5              """Handle one request at a time until we die """
   6              while not self._abort:
   7                  self.handle_request()

La cual se comunica con /usr/lib/python2.3/BaseHTTPServer.py atravez del metodo handle_request() mostrandonos la acción realizada en el servidor por salida estandar.

   1 # Contenido en /usr/lib/python2.3/BaseHTTPServer.py
   2 
   3 class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler):
   4         ...
   5         ...
   6         def log_message(self, format, *args):
   7                ...
   8                ...
   9                sys.stderr.write("%s - - [%s] %s\n" %
  10                          (self.address_string(),
  11                           self.log_date_time_string(),
  12                           format%args))
  13 
  14                # Es posible hacer uso de esta parte en el Bot?
  15                print self.log_date_time_string(), args[0][:4]

Este ultimo fragmento de codigo lo que hace es mostrar por salida estandar la accion que hemos ejecutado en el servidor, tal como un evento de guardar cambios, crear una página o simplemente visualizarla.

La salida que se ha probado por ahora es la de mostrar si es un POST (comando) o un GET (comando), cuando se hace una previsualizacion de cambios trata con el mismo comando POST, pero cuando visualizamos se trata de GET, por ejemplo:

el-directorio.org - - [27/Aug/2006 14:05:42] "GET /CambiosRecientes HTTP/1.1" 200 -
27/Aug/2006 14:05:42 GET

Entonces cuando damos en la accion de editar, primero nos aparece el siguiente mensaje:

el-directorio.org - - [27/Aug/2006 14:07:23] "GET /Bot?action=edit&editor=text HTTP/1.1" 200 -
27/Aug/2006 14:07:23 GET

Y para confirmar los Cambios Guardados en la página deberia aparecer algo como:

el-directorio.org - - [27/Aug/2006 14:24:17] "POST /Bot HTTP/1.1" 200 -
27/Aug/2006 14:24:17 POST

y enseguida un GET:

el-directorio.org - - [27/Aug/2006 14:24:20] "GET /OtraPagina HTTP/1.1" 200 -
27/Aug/2006 14:24:20 GET

ó

el-directorio.org - - [27/Aug/2006 14:32:51] "GET /Bot?action=show HTTP/1.1" 200 -
27/Aug/2006 14:32:51 GET

Aquí se habrá confirmado el cambio en la ultima página.

La información que se llevaba antes en el documento, no tiene que ser tan indispensable ya que se sabe que el moinmoin maneja los contenidos por medio de ficheros simples xml, tambien llamados RSS o RDF y que prestan el servicio de informar los ultimos cambios en determinada página, que en nuestro caso seria CambiosRecientes para comunicarlo con el canal IRC. Información encontrada en http://wiki.python.org/moin/RssLibraries

La interacción que se ha hecho por el momento es la de modificar el bot de Manuel Alejandro Cerón Estrada que cumple la función de dar comunicados desde un canal a otro por medio del promt IRC.

Por ahora la modificación consiste en que cuando se le da dicho comunicado, lo que se muestra en el otro canal en nuestro caso #el-directorio sea la información del ultimo cambio hecho en la página de CambiosRecientes, se adjunta el fichero fuente del bot.

Hay que tener en cuenta que si ejecutas el bot debes saber que habrá que importar las funciones que trae el fichero feedparser.py que vendria a descargarse en la misma ruta donde se ejecutó el bot. Para hacer estas pruebas se recomienda descarguar en .zip desde http://sourceforge.net/projects/feedparser/ para descomprimirlo todo en dicha ruta del bot. Es necesario instalar el paquete python2.3-xml en una distribución Debian con el comando:

# apt-get install python2.3-xml


CategoryProyectos

Bot (last edited 2008-04-20 14:37:43 by localhost)