En l'anterior article vam veure d'on i com obtenir els valors dels usuaris actius i les seves interaccions durant la setmana actual.
Ara veurem com obtenir els mateixos dos valors que recordem té Redis però des de Python.

L'script Python que aprofitaré és el de Josef Kenny a Github. Usercount és un bot escrit en Python que publica estadístiques a Mastodon. Dic aprofitaré per que ja el tinc funcionant des de febrer d'enguany. Un exemple dels toots que fa, adaptat per mi per a mastodont.cat, és aquest:


Un cop seguides les instruccions de com instal·lar i fer funcionar aquest bot em d'editar el fitxer usercount.py per afegir-hi el nostre codi capaç de comunicar-se amb Redis i demanar-li si us plau i favor els dos valors que necessitem.

I ara ve la pregunta de sempre. Com es fa? Com es connecta Python a Redis?

Pregunto a Internet i em respon que cal que afegeixi 'import redis' al principi del script per tenir accés a la llibreria Redis i així poder definir els paràmetres de connexió, connectar-hi i obtenir els valors que vull:

El codi és el següent:

redis_host = "localhost"
redis_port = 6379
redis_password = ""
r = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password, decode_responses=True)

interaccions = r.get("activity:interactions:"+setmana_actual)
if interaccions == None:
   interaccions = 0
print("Interaccions d'aquesta setmana: %s "% interaccions)
actius = r.pfcount("activity:logins:"+setmana_actual)
print("Usuaris actius aquesta setmana: %s "% actius)

Ei un moment! d'on surt la variable 'setmana_actual'? Ara ho explico:

No puc posar el número de la setmana actual directament en la línia 'interaccions = r.get("activity:interactions:"+43)' per que funcionarà però cada setmana hauria d'editar el fitxer de nou per a modificar-ho. És mala idea, oi? Que ho calculi Python que sap fer aixó i moltíssimes coses més. Com?

setmana_actual = str(datetime.datetime.now().isocalendar()[1])

'datetime.datetime.now().isocalendar()' retorna una matriu de tres elements, que conté l'any ISO, el número de setmana ISO i el dia de la setmana ISO. Per a obtenir el número de la setmana cal posar '[1]' al final, que correspon al segon element de la matriu (el primer és el [0]).
La primera setmana d'un any ISO és la primera setmana del calendari ISO (Gregorià) que conté un dijous.
Sí, no estàs equivocat quan penses que aquesta sintaxi no me la sabia pas de memòria. Cercant per internet em va ajudar aquesta pàgina. Continuem.
Ja tenim el número de la setmana actual, bàsic per a preguntat a Redis quina activitat hi ha des de les 00:00 d'aquest dilluns fins ara. Aquesta línia de codi de dalt ha d'anar abans de que connectem amb Redis (obvi) de manera que ens quedaría així:

redis_host = "localhost"
redis_port = 6379
redis_password = ""
setmana_actual = str(datetime.datetime.now().isocalendar()[1])
r = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password, decode_responses=True)
interaccions = r.get("activity:interactions:"+setmana_actual)
if interaccions == None:
  interaccions = 0
print("Interaccions d'aquesta setmana: %s "% interaccions)
actius = r.pfcount("activity:logins:"+setmana_actual)
print("Usuaris actius aquesta setmana: %s "% actius)

Fet! L'script Python usercount.py ja sap els valors que volia!
Aquí veiem la demostració:

Codi en Python obtenint l'activitat setmanal de l'instància mastodont.cat

Nota: he posat aquest codi en l'apartat "GET THE DATA" del fitxer usercount.py. Té la seva lógica.
I com es fa per publicar aquest dos nous comptadors en la meva instància?
Ho veurem en un següent article ;-)