[Python] Give Me the Garbage (GMG)

overflow

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...

Lado del Servidor

Lado del Cliente


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

10
Boiisxu

Pinta muy interesante, pillo sitio.

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

1
Morgrim

Muy interesante!

1
JuAn4k4

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

3 1 respuesta
overflow

#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.
1
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
overflow

#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

Braainus

Comentario tonto.

https://bundlephobia.com/package/moment@2.29.1

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
overflow

#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"
overflow

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.

overflow

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
overflow

#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
hahahahahaha

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
overflow

#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

Usuarios habituales

  • overflow
  • hahahahahaha
  • JuAn4k4
  • Braainus
  • nobody1
  • Morgrim
  • Boiisxu