Materia
Ejercicios


Tarea 3: La red social tuitón

Objetivos de aprendizaje

Después de resolver la tarea 3, usted será capaz de:

  • Operar sobre un archivo con una estructura pre-definida de datos,
  • realizar procesamiento de texto sobre datos con un formato específico,
  • conocer código html para el desarrollo de una página web,
  • guardar datos en un archivo.

Enunciado

En esta tarea usted deberá implementar de manera básica una red social similar a twitter en un entorno web. La red social la llamaremos tuitón. Las funcionalidades que deberá realizar esta red social son:

  • publicar un mensaje en la red social que sea visto por todos los usuarios,
  • detectar si un usuario es mencionado, crear hipervínculos y ver el perfil del usuario,
  • detectar si existen hashtag dentro del mensaje, crear hipervínculos y ver el detalle,

Se les entregará un conjunto de archivos que les proveerá de algunas funciones ya implementadas y otras que deben implementar con su equipo de trabajo.

Antes de partir

¿Qué es una mención en twitter?: Cuando el mensaje de un usuario incluye el nombre de otro usuario precedido del arroba (@nombredeusuario) se entiende que es una mención. Ejemplo:

@pepito escribio:
hoy estudie con @dani programacion.

¿Qué es un hashtag en twitter?: son etiquetas que se colocan en los tweets con el símbolo # y sirve para ver otros tweets relacionados con un mismo tema. De esta manera, se pueden encontrar otras personas que estén opinando sobre un tema específico. Ejemplo:

@pepito escribio:
me fue bien en #c2 de programacion.

¿Qué es trending topic (TT)?: Son temas frecuentes, es un hashtag que esta siendo utilizado por mucha gente al mismo tiempo.

Para esta tarea no es necesario aprender el lenguaje HTML pero hay algunas funciones que requieren textos en formato HTML. Para que no esté tan perdido, acá adjuntamos una breve ayuda del lenguaje HTML que puede ser de su interés.

Archivos

Los archivos que se le entregarán los puede descargar acá y cada uno de ellos se describe a continuación:

  • bottle.py, este archivo sirve para hacer correr un servicio web (para poder ver página web) de manera local en su computador. No modificar.

  • definiciones.py, archivo que contiene definiciones de encabezados, pie de página y otros en formato HTML.

  • t3.py, este archivo contiene en la parte inicial algunas funciones ya implementadas, luego más abajo están las funciones que usted debe implementar (en el mismo archivo está comentado).

  • tuiteos.txt, archivo de texto contiene los tuits con el formato:

    [2010-10-23 10:50:45.4353234]:@usuario: mensaje del usuario

    El formato de la fecha y hora es: [año-mes-día hora:min:segs]. Note los paréntesis cuadrados y el espacio entre la fecha y la hora. Además hay un espacio después de los dos puntos ”:”. Este formato es importante de considerar, y no lo puede cambiar.

Nota

Todos estos archivos deben estar en el mismo directorio de trabajo.

Funcionamiento

Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo python t3.py. Se mostrará algo como lo que sigue:

Bottle v0.11.dev server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

Esto significa que el servidor web está funcionando de manera local. Abra su navegador preferido (chrome, internet explorer, safari u otro) y escriba la dirección http://localhost:8080/, se debería mostrar la página web que aparece en el video.

En el archivo t3.py hay varias funciones al comienzo. Esas funciones lo que hacen es responder a ciertas páginas web como por ejemplo (vaya mirando el código para que se entienda mejor):

  • Al escribir http://localhost:8080/ o http://localhost:8080/tuiteos, se ejecutará la función index().
  • Al escribir http://localhost:8080/usuario/jperez se ejecutará la función tuiteos(u) donde u es el usuario que se escribe en el navegador.
  • Al escribir http://localhost:8080/htag/c2 se ejecutará la función hashtag(htag) donde htag es el nombre del hashtag a procesar.

Hay varias otras funciones en t3.py que usted puede emplear.

Note que en las funciones index(), publicado(), hashtag(htag) y tuiteos(u) se realiza la siguiente implementación. Se crea una lista contenido y se agrega a la lista la cabeza de la página (definida en definiciones.py), luego todo el contenido de la página en lenguaje HTML (el cuerpo principal de la página) y finalmente una cola. Al final se retorna toda la lista aplicando la función join para juntar todo el código HTML. De esta manera se retorna un string muy largo con todo el contenido en lenguaje HTML para ser deplegado por el navegador.

Qué hay que implementar

Las funciones que usted debe implementar con su equipo de trabajo son las siguientes:

  • obtener_tuiteos(): esta función debe capturar todos los registros del archivo tuiteos.txt y retornar una lista de tuplas con todos los tuits. Cada tupla debe tener el siguiente formato:

    ('aperez', 'este es mi primer tuit', '2012-10-23 12:33')
    

    Note que no es necesario utilizar los segundos.

  • cantidad_de_menciones(usuario): esta función debe retornar la cantidad de menciones que tiene el usuario @usuario.

  • cantidad_de_tuits(usuario): esta función debe retornar la cantidad de tuits que ha realizado el usuario @usuario.

  • agregar_tuit(usuario, mensaje): esta función debe agregar un nuevo registro al final del archivo tuiteos.txt con el usuario, el mensaje y la fecha actual. Recuerde mantener el formato del archivo. Esta función no debe retornar nada, simplemente realizar la operación de inserción del registro dentro del archivo.

  • poner_hipervinculos(mensaje): esta función deberá retornar el mensaje de un tuit con los hipervínculos de menciones o hashdag. Apóyese de las funciones hipervinculo_usuario() e hipervinculo_hashtag(). Por ejemplo, un texto extraído del archivo: @jmunoz, este es el primer tuit que hago en #progra, debería crear un hipervínculo en jmunoz y en #progra. Si no sabe lo que es un hipervínculo, es porque probablemente no ha leído la ayuda con HTML que hemos dispuesto.

  • momento_del_tuit(fecha_tuit): esta función retorna uno de los siguientes mensajes que dependen de cuando fue escrito el tuit:

    • “publicado hace un momento”: si es que el tuit fue escrito hace menos de una hora atrás.
    • “publicado hoy”: si es que el tuit fue escrito durante el día de hoy, pero hace más de una hora.
    • “publicado hace NN dias”: si es que el tuit fue escrito hace más de un día. En este caso debe retornar el texto con el número de días (NN).

    Apóyese con la función fecha_hora_actual().

Nota

Usted puede implementar más funciones o más funcionalidades a la tarea. Lo importante es que cumpla con lo básico que se pide en el enunciado.

Consideraciones

  • Dentro del mensaje de un tuit pueden existir sólo los siguientes caracteres: letras, números, ":", ".", ";", "()", "-". Por ejemplo:

    @pepito escribio:
    Gano chile a argentina: 3-1 ;) .
  • Por simplicidad en el formato no utilice acentos ni eñes (ñ) en los mensajes.

  • Dentro de un mensaje puede haber más de un hashtag y/o más de una mención. Por ejemplo:

    @pepito escribio:
    Hoy #chile gano el partido por las #clasificatorias, pero #argentina
    jugo mejor, saludos a @jperez.
  • Cuando el usuario agregue una mención o hashtag dentro de un mensaje, no agregue los hipervínculos al archivo. Recuerde que el archivo debe ser siempre de sólo texto, sin código HTML.

  • [Agregado el 3 nov] Asuma que los nombres de usuario de tuitón están escritos con minúsculas. Por ejemplo: @pepito, @asegovia, etc.

Bonificación

Se otorgará puntaje adicional si el equipo de trabajo implementa correctamente las funciones de arriba y además la siguiente funcionalidad.

Usted debe mostrar las 5 palabras más repetidas de todos los tuits al final de la página web con la cantidad de veces que aparece. La palabra más repetida también puede ser un hashtag. Por ejemplo:

Los temas del momento son:

* justin (12) * #BotonDePanico (10) * chile (8) * elecciones (5) * huracan (5)

Ayuda

Usted puede hacerse miembro del grupo facebook Tarea 3: la red social tuitón. Ahí habrá ayudantes y profesores que podrían ayudarlo con dudas o consultas de la tarea.

Entrega

La fecha de entrega es el domingo 18 de noviembre a las 23:00.

La tarea debe ser resuelta en equipos de dos o tres personas. De lo contrario habrá penalización en la nota.

Sólo uno de los integrantes del equipo debe subir la tarea en la sección Aula Virtual de la plataforma Moodle, ingresando al campus que corresponda. ¡No la suba a la sección de su paralelo!

Se debe entregar un archivo comprimido (.zip) con todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT por el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-3-18000123.zip.

Al principio del archivo t3.py se debe poner un comentario indicando los RUT de los integrantes del equipo, como en el siguiente ejemplo:

# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria

No se puede subir ningún archivo adicional.

Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.

No se recibirá tareas fuera de plazo, ni por correo electrónico.

Recuerde que para que todos los miembros del equipo sean evaluados, deben estar matriculados en “Alumnos de CAMPUS” (donde CAMPUS es el campus al cual usted pertenece).

Los equipos de trabajo pueden ser los mismos de la tarea anterior, pero recuerde que deben ser de 2 ó 3 personas.

Políticas de copia

Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.

Las políticas de copia de la asignatura rigen para la tarea.

En caso de tener problemas con el desarrollo de la tarea, consulte a su profesor o asista a las ayudantías.