Contador de click en GNU/Linux

¿Sábe cuántos click pulsa usted en el día?

Esta pregunta me la hice hace unos días y para responderla me di a la tarea de implemntar un sencillo programa que calcula la cantidad de click que se da en un ordenador en el día, notificando en cada momento por donde va esta cifra.

Esta aplicación esta escrita en Python y sólo funciona en sistemas con GNU/Linux, además utiliza el comando notify-send para la notificación cada cierto tiempo de este contador.

Para almacenar este contador se utilizó SQlite como base de datos.
Esta solución requiere de la librería pymouse para el trabajo con el dispositivo de entrada. (pip install pymouse)

Código a implementar

1- Creamos un fichero llamado db.py.

import datetime
import sqlite3
import uuid
def salvar(count):
    conn = sqlite3.connect('db.db')
    c = conn.cursor()
    table_name = "mouse"
    sql = 'create table if not exists ' + table_name + ' (id VARCHAR PRIMARY KEY, count INTEGER,created_at VARCHAR)'
    c.execute(sql)
    now = datetime.datetime.now().date()
    c.execute("SELECT id FROM "+table_name+" WHERE created_at='"+str(now)+"'")
    list=c.fetchall()
    if len(list) == 0:
        c.execute("INSERT INTO "+table_name+" (id,count,created_at) VALUES ('"+str(uuid.uuid4())+"','"+str(count)+"','"+str(now)+"')")
    else:
        id = list[0][0]
        c.execute("Update " + table_name + " SET count='"+str(count)+"' WHERE id='"+str(id)+"' AND created_at='"+str(now)+"'")
    conn.commit()
    c.close()
    conn.close()
def mostrar(date):
    conn = sqlite3.connect('db.db')
    c = conn.cursor()
    table_name = "mouse"
    sql = 'create table if not exists ' + table_name + ' (id VARCHAR PRIMARY KEY, count INTEGER,created_at VARCHAR)'
    c.execute(sql)
    count=0
    c.execute("SELECT count FROM "+table_name+" WHERE created_at='"+str(date)+"'")
    list=c.fetchall()
    if len(list) != 0:
        count = list[0][0]
    conn.commit()
    c.close()
    conn.close()
    return count

2- Creamos un fichero llamado demonio.py.

#!/usr/bin/python
import os
from datetime import datetime
from pymouse import PyMouseEvent
import db
class event(PyMouseEvent):
    def __init__(self):
        super(event, self).__init__()
    def click(self, x, y, button, press):
        if press and (button==1 or button==2):
            count = db.mostrar(datetime.now().date())
            db.salvar(count+1)
            if count % 10 == 0:
                os.system("notify-send \"Usted ha dado "+str(count)+" clicks hoy.\"")
e = event()
e.capture = False
e.daemon = False
e.start()

Listo, cuando enciendas el ordenador ejecuta en una consola el fichero demonio.py

python demonio.py

Leave a Reply

Your email address will not be published. Required fields are marked *