[Python] Give Me the Garbage (GMG)

B

He comenzado a trabajar en un proyecto personal para recopilar y analizar comentarios de foros de internet. En esta primera "fase" solo implementaré para mediavida. La idea es que el proyecto sea fácilmente escalable y que el día de mañana el tema de añadir nuevos portales sea lo más sencillo posible.

La idea nace de lo que se hacía antiguamente en canales de IRC, donde un bot recopilaba información y con ella se generaban páginas de estadísticas curiosas como: El usuario que más habla, el que dice más palabrotas, el que comparte más enlaces, al que más nombran, etc... etc...

Web lanzada: https://buzaco.es/

Lado del Servidor

  • PostgreSQL database engine
  • Gunicorn a Python WSGI HTTP Server for UNIX
  • Flask v2.x a lightweight WSGI web application framework
  • NodeJS a JavaScript runtime built on Chrome's V8 JavaScript engine
  • Pillow for generate png images
  • lxml for processing XML and HTML
    • cssselect parses CSS3 Selectors and translate them to XPath 1.0 expressions
  • distro provides information about the OS distribution
  • html2text convert html to text
  • También se usan paquetes como urllib...

Lado del Cliente

  • ChartJS for responsive charts
  • JQuery for easy dom interaction and more...
  • Underscore for useful functional programming helpers

Espero tener datos "curiosos" que mostrar en breve... iré actualizando el hilo.

22
B

Pinta muy interesante, pillo sitio.

Uno de mis objetivos de 2022 es empezar y poder "defenderme" un poco con Python.

1
B

Muy interesante!

1
JuAn4k4

¿ Por que SQLite y JQuery ? ¿ Y porque cssNano y JsMin ? ¿Porque Node y Python ? ¿2 Backends?

4 1 respuesta
B

#4
¿ Por que SQLite y JQuery ?

¿ Y porque cssNano y JsMin ?

  • CSSNano porque es el que recomienda tailwindcss. Antes usaba "cssmin" pero, al menos con la configuración que tenía, se notaba mucho más lento. Tampoco he mirado mucho más.
  • JSmin porque hace lo que quiero. Seguramente termine usando "terser"... la parte del cliente aún recién la estoy haciendo.

¿Porque Node y Python ? ¿2 Backends?

  • Python porque es un lenguaje con el que estoy familiarizado.
  • NodeJS porque las herramientas para generar los assets se apoyan en esta tecnología.
    ** No son dos backends, la aplicación está escrita únicamente en python. El uso de Node tienes que verlo como si se estuviera usando Electron. No es un servicio que queda activo o algo por el estilo. Flask-Assets invoca al programa "X" dándole una entrada y esperando una salida... como esté escrito este programa y que tecnologías use es indiferente siempre que respete lo que se le pasa como entrada y lo que tiene que dar de salida.
2
nobody1

Adelante con el proyecto, interesante descubrir nuevas herramientas.
pd.: Creo que son pocas dependencias/tecnologías, seguro que no quieres añadir más? :scream::joy:

1 1 respuesta
B

#6 Son las justas y necesarias :P ... Igual llama la atención pero es que cuando usas tecnologías peladas es normal ir metiendo capas. Otros frameworks tienen la misma o mas mierda por detrás ;)
Por ejemplo, podría usar "Flask-Diamond" y ya solo listar una dependencia... eso no quita que Flask-Diamond por detrás use 10000 mierdas xD

B

Comentario tonto.

https://bundlephobia.com/package/[email protected]

Hay alternativas a dia de hoy que no son tan pesadas como date-fns. De hecho en la misma doc de moment recomiendan no usar esta libreria.

Iremos siguiendo el hilo :) :thumbsup:

1 1 respuesta
B

#8 Gracias por la info

Pido ayuda "creativa" para completar los diccionarios... palabras que sean usadas, nada extraño o rebuscado... si alguien pone m13rd4 pues no pasa nada, no se contabiliza y a otra cosa xD

insults = r"puta|[gj]ilipollas|tont[oa]|est[uú]pid[oa]|subnormal|atontad[oa]|restrasad[oa]|anormal|maguf[oa]|chupamela|pargela|que\s?te\s?den|jodan?|ignorante|analfabet[oa]"
swear_words = r"h?ostia|joder|mierda|[ck]awen|we[bv]os|coño|po(?:ll|y)a|chumino|follar|cipote|maldit[oa]|"
good_words = r"[:;]-?[3\)DB]|\^\^|\bgracias\b|\bagradezco\b|\bcomparto\b|\bfant[aá]stico\b"
love_words = r"\bte\s?quiero\b|\bes\s(?:el|la)\smejor\b|\bes\suna?\scrack\b|\bte\samo\b"
laugh_words = r"xD+|ja(?:ja)+|je(?:je)+|jios|juas|\bl+o+l+\b"
sad_words = r"[:;]-?\(|orf+|estoy\s(?:mal|cansad[oa]|triste)|me\ssiento\s(?:mal|cansad[oa]|triste"
dead_words = r"\bsuicidar\b|\bsuicidio\b|\baca[bv]ar\scon\smi\s[vb]ida\b"
sex_words = r"\bporno\b|\bnopor\b|\bxxx\b|\bsexo\b"
B

Su pinga madre... he cambiado ya a postgresql, tengo el sistema de "bootstrapping" propio y pantentado (patentado con pan) el cual es tan sencillo como poner un "data-component='tiojilito'" y ya se instancia la clase oportuna para poder tomar el control de ese elemento... simple, sencillo y para toda la familia (Todo con su descendencia y mierdas varias).
Ahora ya si espero ir más rápido y tener unas graficas mierder.... estoy con la duda de si seguir tirando con charjs ( https://www.chartjs.org/ ) o roughViz ( https://github.com/jwilber/roughViz ) por las risas.

Esto lo hago en mis ratos libres y no en todos mis ratos me da por picar teclas xD

P.D: Gracias por la ayuda con mi anterior post pingue pingosos ¬¬ al final me he dado una lectura por posts de FEDA y he ido sacando palabras/expresiones.

1
B

Ya voy teniendo algo... espero que para el próximo finde tenga ya algo "interesante" que ofrecer:

** Los datos no son representativos... son solo 30 mins o así de captura.
** Algunas partes están traducidas y otras no... no es que me haya dado por mezclar idiomas por la cara xD

3 1 respuesta
JuAn4k4

#11 Siempre puedes tirar a la basura jquery ya y tirar por react y te quitas tus componentes y cosas raras

1 respuesta
B

#12 Esta clarinete que podría usar soluciones OOTB y quitarme de historias... pero esto lo hago por "gusto" y me gusta hacer mierdas lo más "artesanales" que pueda (siempre en un equilibrio claro... voy a seguir comprando las tijeras y no ir a la mina a picar y luego a la factoría a planchar el metal xD).

Vamos... que es un proyecto sin "deadlines" ni nada... ¿que me equivoco y tengo que retroceder 4 pasos? los retrocedo.

Respecto al tema "reactivo" igual le hago algo con "Proxy Objects".

P.D: Tampoco tengo ganas de aprender ningún otro framework... con el que uso en el curro me llega y basta joisjsiojs

1
B

Por si te ayuda (veo que usas muchas patatas).

Yo me he montado algún scrapper para MV. Ruby, SQLite/texto plano y arreando. Lo que hice fue usar una librería que simulase un navegador. Creo recordar que con un sleep de 5 segundos por consulta va que chuta. Si vas muy rápido te capan, pero tampoco te capa tres consultas en tres segundos. No banean la IP (a mí no me pasó) para siempre, por lo que si falla otro sleep de 5 minutos (¿o una hora? ve probando) y listo.

Sirvió aprenderme las rutas y minar lo que necesitase para completarlas del CSS de los HTMLs (con el selector del objeto que enumeraba las páginas, por ejemplo, podía saber cuántas iteraciones tenía que hacer).

La estructura siempre es la misma: foros/subforo/página de subforo/hilo/página de hilo/mensaje. En los perfiles de los usuarios puedes usar su ruta de posts para filtrar por user en lugar de la mandanga anterior. Y las rutas para editar un post son siempre las mismas, así que puedes editar en bulk si sacas todos los mensajes de todos los posts de un user.

1 1 respuesta
B

#14 Se agradecen los comentarios.
En mi caso he pasado a usar postgresql por motivos de facilitarme la vida con las consultas al permitir funciones más potentes que sqlite. Todo era hermoso con sqlite hasta que tuve que manejar fechas... corriendo a postgresql!! :P

Tal y como tengo el capturador de mensajes su funcionamiento es el siguiente:

  • Cada 3 minutos se consulta la sección "spy" los hilos con fecha mayor o igual a la ultima fecha en la que se miró la sección spy
  • Ya con hilos, entro y reviso la penúltima y última página con comentarios... creando nuevos registros para los mensajes o actualizando los datos como numero de votaciones etc...
  • Por cada mensaje se analiza el contenido:
    • Por un lado los metadatos: Autor, si ha sido editado, fechas de creación y edición, votos, etc...
    • Por otro lado un analisis de las palabras usadas
    • Por otro lado un analisis de los enlaces compartidos
    • Por otro lado se mira a que usuarios se ha mencionado
    • Por otro lado se analizan las respuestas a mensajes, para esto se consulta la página donde está el mensaje que se está respondiendo y se realiza todo el proceso mencionado para esa página (y así en bucle hasta que todo quede resuelto).

Todo tiene su modelo: AnalyzerUser, AnalyzerThreadCategory, AnalyzerThread, AnalyzerPost, AnalyzerPostStat, AnalyzerPostMedia, ...

** Como contra-medida para evitar floodeos, siempre existe un delay de 3 segundos entre consulta y consulta dentro de un mismo hilo y de 5 segundos por cada hilo.
** No pueden existir dos tareas programadas para el mismo foro (mediavida) ejecutándose a la vez, en caso de lanzar una nueva tarea para un sitio que ya este realizando un trabajo, se esperará a que este trabajo termine antes de permitir la creación de nuevas tareas.
** Dentro del tiempo de ejecución de una tarea programada las páginas se cachean.

Donde más me estoy demorando es en hacer el lado del cliente... maquetar y tal es menos divertido xD y entre semana no toco nada de esto :/ así que a ver si mañana y este finde en general dejo el resto de páginas aunque sea empezadas.

2
9 días después
B

Continuo con esto! de momento no es abandonwared :P

He tenido que refinar un poco la captura y el tratamiento de las fechas (el puto flask te auto-parsea los datetime en un ISO mierdero, por suerte te permite definir un parser personalizado)... pero bueno, una necesidad una solución. "piano piano si arriva lontano".

¿Quien vigila al vigilante? yo! :B

** No lleva una semana mirando eh... lleva hoy unos 20-30mins.

Algunos números (no puedo decir en cuanto tiempo... pero unos 3 días unas horas al día y las fechas de los mensajes muy dispares):
-- Se han visto aproximadamente 2141 usuarios
-- Se han compartido aproximadamente 3182 videos/música/imágenes/etc..
-- Se han escrito aproximadamente 11.469 mensajes repartidos en 206 hilos
---- Se han escrito aproximadamente 1.039 insultos
---- Se han escrito aproximadamente 1106 palabras malsonantes
---- Se han escrito aproximadamente 205 palabras de cortesía (gracias, comparto, fantástico, ...)
---- Se han reído aproximadamente 1584 veces
** Pronto tendré más desgranado

Inception! Cuando el software de análisis analiza el hilo que trata sobre el mismo y contiene un mensaje que habla sobre el software de análisis que ha analizado su propio hilo...

1
7 días después
B

Ya voy teniendo la página por usuario...

1 2 respuestas
JuAn4k4

#17 joder que mal royo me ha dado

1 respuesta
desu

#17 con ganas de ver la mia en /dev

1 respuesta
B

#18 Cada vez va cobrando más fuerza el querer hacer algo para "concienciar" de lo que se podría hacer por otros "organismos", mostrando una pequeña porción de realidad de lo que se puede sacar de lo que decimos por internet. Me gustaría meterme en temas de predicciones en plan... ¿Puedo estimar la edad según los comentarios? ¿Puedo estimar el sexo? ¿Puedo estimar algo?
Tengo otras ideas en la recámara pero esto es infinito y no quiero entrar en un bucle de "esto podría mejorarlo"... primero sacar algo "funcional y curioso" y ya ir ampliando. Espero tener un VPS funcionando este fin de semana para que ya esté 24/7 recopilando mensajes y se puedan ir consultando cosillas.

1
GeGe

Pff, muy curioso. Muy lindo trabajo lo sigo de cerca

1
JuAn4k4

#19 No hay tamaño de letra suficiente para poner fperos en tu wordcloud

2 1 respuesta
desu

#22 estoy seguro que mis palabras mas usadas son todas positivas y de animo. porque me rio mucho del fpero medio pero sobretodo animo a los chavales a esforzarse y cumplir sus sue;os porque creo en ellos.

a ver si nos libera esta preciosa info algun dia el jefe.

xArtiic

Por aquí me quedo, suena muy interesante ánimo.

1
B

Se agradece el interés por este modesto proyecto :)

@desu solo tengo 9 mensajes analizados tuyos... se ve que de algún foro de vacunas porque las palabras con más peso son todas "vacunas", "arnm", "vaccines", "virus", etc... xDD y no da para saber el "estado" de tu cuenta (si eres tóxico, afable, etc...)... yo creo que me dará tóxico en cuanto tenga algo de donde rascar :P
*** Me acabo de dar cuenta con esto que tengo un fallo... estoy contabilizando palabras de los quotes como palabras dichas por el usuario que responde. Estará solucionado para este finde :B

1
hda

Qué proyecto tan interesante, @overflow . Me recuerda a un futuro proyecto que tengo. En algún momento pienso recorrer todos mis mensajes y hacerme un corpus para afinar algún modelo (NLP-Transformers) con mi forma de escribir, de modo que pueda hacer mensajes similares a los que suelo hacer jaja. No tengo tanto texto mío centralizado en ningún otro lado.

Seguiré este proyecto de cerca :D

1
Pertazeta

Que pasada, guardado en favoritos

1
16 días después
B

Tras una rascada de webales extrema ya me he puesto con esto de nuevo y lo tengo corriendo en un VPS 24/7 (Internet <-> Traefik <-> FlaskApp <-> Postgres).
Este finde compartiré dominio y quien quiera entrar a curiosear y/o romper que entre :)

3
B

Según mis datos hoy está el día crispado en mediavida... ya me da que está confortable :3

Mediavida se va a dormir entre las 01:00 - 02:00 y se despierta entre las 09:00 - 10:00 ... entre las 13:00 y 14:00 está a tope.

2
B

Pues acabo de lanzar https://buzaco.es/ ... está completamente limpio así que no encontraréis nada de interés hasta pasados unos días.

¿De donde viene buzaco? Del gallego:

Que actúa sin razonar haciendo uso de la fuerza física.

Aún tengo mucho que mejorar/hacer:

  • Acabo de acordarme de que no he traducido la web jejeje
  • La sección de "informes" tengo que terminarla (o empezarla... según como se mire)
  • La sección multimedia tengo que darle una mejora visual... ahora está en plan para salir del paso
  • Como podréis observar la parte de diseño no es lo mío... pero a ver si le pongo unos estilos un poco más bonitejos (se intentará)
  • Otras cosas que quiero ir haciendo....
1 2 respuestas