Ya disponible en https://odiometro.es
Este es un proyecto que ayuda a medir el nivel de odio que se genera en Twitter en tiempo real.
El objetivo de este proyecto es hacernos conscientes del nivel de debate que se produce en España, y el amplio uso de insultos, descalificaciones, etc. que se producen en Twitter. También recoge tweets de otros países hispanoparlantes.
La web hace uso de las siguientes tecnologías:
- NodeJS / Express
- Socket.io
- MySQL (if having problems, stick to 5.x; see mysqljs#1962)
- VueJS
- SASS
- Grunt
- (opcional) Docker
- Clonar el repositorio
git clone git@github.com:ojoven/odiometro.git
Para instalar en un contenedor de Docker…
-
Configurar las credenciales de la API de Twitter con las environment variables
APP_TWITTER_
, endocker-compose.yml
. -
En docker-compose.yml, asegúrate de que
INIT_DB_NAMES
lista los nombres de la base de datos a inicializar, separados por una coma (por ejemplo,INIT_DB_NAMES=odiometro,amorometro
). -
Ejecute
docker-compose up
desde el directorio raíz del proyecto. NOTE: Necesitas tener Docker ya instalado. Si tienes problemas, abre un issue o intenta la configuración manual.
Por defecto, el
docker-compose.yml
está configurado para inicializar: 1 contenedor de base de datos (compartido entre instancias) 1..N contenedores, para cada versión de la aplicación (odómetro, amorómetro u otros). Comente los servicios no deseados, o configúrelos para su versión personalizada. Cada instancia de la aplicación puede ser alcanzada en una porta diferente (3001, 3002; seePORT
env variable).
- Accede a la aplicación de odiometro en http://localhost:8081, y a la aplicación de amorometro en http://localhost:8082
Nota: Los file de configuración correspondientes a cada bot deben existir; por ejemplo, para odiometro crea database_odiometro.json
y twitter_odiometro.json
y odiometro.json
. Los dos primeros pueden dejarse vacíos ({}
), cuando se utilizan variables del sistema.
De lo contrario, siga los pasos a continuación para instalar en la máquina local.
-
Configurar las credenciales de la API de Twitter en
/config/twitter_odiometro.json
(otwitter_[dbname].json
) -
Desde la raíz del proyecto (instalará express, socket y otras librerías)
npm install
-
También desde la carpeta
/public
(instalará grunt y plugins, vue)cd public && npm install
-
Crear una base de datos y configurar la aplicación para acceder a ella
5.2 Configure les credenciales de tu DB desde /config/database_odiometro.json
; o database_[dbname].pais.json
, si estás creando el odiómetro en tu país)
5.3 Importar el esquema a su base de datos
mysql -u [username] -p [dbname] < db/app-schema.sql
-
Corre el grunt desde /public
grunt
-
Lanza la app
node app.js
-
Si has creado tu propia versión de país (o de otro estilo tipo amorómetro)
node app.js [nombredebot]
. Alternativamente, configura la variable de sistemaAPP_BOT_NAME
, en .env.
Tendrás que crear una app en Twitter y rellenar los datos de consumer key y secret, y access_token y secret en twitter_odiometro.json o twitter_odiometro.pais.json.
No sé bien cómo funciona la API de Twitter ahora, ya que estuvieron implementando bastantes restricciones que igual no afectan a apps antiguas pero sí a las nuevas. Si tienes algún problema o sabes cómo va, no dudes en escribir en las Issues.
- Los componentes Vue del frontend se encuentran en
js/src/app/components
- Otros archivos interesantes son:
- bus.js -> Lo utilizamos como bus de eventos para emitir / recibir eventos
- lib.js -> Una instancia Vue que nos sirve como librería de funciones (para funcionalidades compartidas entre componentes)
- socket.js -> Simplemente inicializa socket.io en el frontend
- store.js -> Una clase "store" donde almacenamos variables que serán compartidas por varios componentes
- vue-instance.js -> Inicializa la instancia Vue principal
- en
vendor/smoothie.js
tenemos la librería que renderiza la gráfica en tiempo real - si tienes sugerencias sobre cómo optimizar el código, hacerlo más legible, refactorizar, etc. las sugerencias y los pull requests son bienvenidos.
Si tienes alguna duda, sugerencia, crítica o palabra de odio, puedes contactarme en https://twitter.com/ojoven