Mettre en place un bot « User Count » pour son instance Mastodon
Il est possible de mettre en place des bots pour Mastodon, et tout admin d’instance qui se respecte se doit d’avoir un bot « User Count » pour son instance !
Pour installer une instance de Mastodon, je vous renvoie à mon article précédent.
Le tutoriel qui suit est fait pour Debian 8, mais c’est très facilement adaptable pour d’autres OS. 🙂
Première étape : Créer un compte sur l’instance de votre choix (ce n’est pas forcément la même que celle dont vous voulez tooter les stats)
On installe les dépendances sur le serveur :
apt install gnuplot5 python-pip python2.7 pip install Mastodon.py
Ensuite, on va récupérer tout ce qu’il faut pour communiquer avec l’API, grâce à ce script.
nano mastodon_get_access.py
Collez ce qui suit en adaptant les valeurs à votre compte.
#!/usr/bin/env python from mastodon import Mastodon mastodon_url = "https://your.instance.com" mastodon_bot_login = "[email protected]" mastodon_bot_password = "youR_B0t_P4ssw0rD" m_client_id, m_client_secret = Mastodon.create_app(client_name="serverstatus", api_base_url=mastodon_url) masto = Mastodon(client_id=m_client_id, client_secret=m_client_secret, api_base_url=mastodon_url) access_token = masto.log_in(mastodon_bot_login, mastodon_bot_password) print("uc_client_id: " + m_client_id + "\nuc_client_secret: " + m_client_secret + "\nuc_access_token: " + access_token)
On lance le script :
python mastodon_get_access.py
Il renvoie 3 valeurs :
uc_client_id: tructrèslong uc_client_secret: tructrèslong uc_access_token: tructrèslong
Maintenant, on passe à la mise en place du bot.
On clone les fichiers du bot depuis le dépôt de josefkenny :
git clone https://github.com/josefkenny/usercount.git cd usercount
Dans le fichier config.txt
, mettez le nom de l’instance dont vous voulez tooter les stats.
mastodon_hostname: mstdn.io
Ensuite, dans secrets/secrets.txt
, on met les 3 valeurs que l’on a obtenu plus haut.
uc_client_id: tructrèslong uc_client_secret: tructrèslong uc_access_token: tructrèslong
C’est tout bon !
On peut lancer le bot avec :
python usercount.py
La première fois, vous aurez forcément une erreur. Relancez le script quand vous aurez un nombre d’utilisateurs ou de toots différents, ça devrait fonctionner.
Une fois que c’est bon, vous pouvez mettre en place un cron pour que le bot toot automatiquement.
Pour un toot toutes les heures, on édite crontab avec crontab -e
et on y met :
@hourly cd /chemin/vers/usercount && python2 usercount.py > /tmp/usercount.log 2>&1
Et voilà ce que ça donne, pour le bot de mon instance, [email protected] :
Quelqu’un a même fait une variante qui compte tous les comptes de toutes les instances Mastodon. Sympa !
N’oubliez pas de me suivre sur [email protected]. 😉
Dernière modification le 17 décembre 2017.
De mon coté ca marche moins bien :
python usercount.py
Traceback (most recent call last):
File « usercount.py », line 98, in
current_id = int( get_between(pagecontent, « Home to« , « users »).replace(« , », « »))
File « usercount.py », line 92, in get_between
return s[(s.index(substring1)+len(substring1)):s.index(substring2)]
ValueError: substring not found
mastodon@mastodon:~/live/usercount
J’ai fait plusieurs essais et toujours la même erreur
Même problème que @Blog-de- Michel. Y’a un soucis avec la ligne DEFAULT_LOCALE=fr du .env.production de Mastodon… (problème de locale visiblement…)
J’ai ouvert une Issue sur Github : https://github.com/josefkenny/usercount/issues/6
(si on commente cette ligne dans .env.production, ça refonctionne…)
aie aie … :/ J’ai pas été bien loin… et Pyhton, je nage :
$python mastodon_get_access.py
Traceback (most recent call last):
File « mastodon_get_access.py », line 2, in
from mastodon import Mastodon
ImportError: No module named mastodon
Ma faute, il faut installer dépendances avant. J’ai corrigé l’article 🙂
Impeccable ! Ca fonctionne dès qu’un compte est créé. Mon premier graph sur mon instance :
J’ai parlé trop vite… J’ai une erreur de ce type :
Traceback (most recent call last):
File « usercount.py », line 98, in
current_id = int( get_between(pagecontent, « Home to« , « users »).replace(« , », « »))
File « usercount.py », line 92, in get_between
return s[(s.index(substring1)+len(substring1)):s.index(substring2)]
ValueError: substring not found
J’ai entre temps ajouté une option dans le .env.production :
DEFAULT_LOCALE=fr
Y aurait-il un rapport ?
Donc c’est vérifié : l’ajout de l’option DEFAULT_LOCALE=fr dans le .env.production de Mastodon :
– fait planter le User Count Bot (ValueError: substring not found)
– fait passer l’instance en DOWN sur https://instances.mastodon.xyz
Pas de soucis avec
en
donc ouvre une issue 🙂ok
Erreur au moment du toot:
Uploading graph.png…
Uploaded file, returned:
{u’error’: u’Validation failed: File content type is invalid, File is invalid’}
Tooting…
7 accounts
+1 in the last hour
Traceback (most recent call last):
File « /usr/local/lib/python2.7/dist-packages/mastodon/Mastodon.py », line 422, in status_post
media_ids_proper.append(media_id[« id »])
KeyError: ‘id’
Traceback (most recent call last):
File « usercount.py », line 199, in
mastodon.status_post(toot_text, in_reply_to_id=None, media_ids=[media_dict] )
File « /usr/local/lib/python2.7/dist-packages/mastodon/Mastodon.py », line 428, in status_post
raise MastodonIllegalArgumentError(« Invalid media dict: %s » % e)
mastodon.Mastodon.MastodonIllegalArgumentError: Invalid media dict: ‘id’
Une idée les amis ?
par avance merci
J’ai le mm soucis. Je comprend pas l’erreur.
Pour info, mon DEFAULT_LOCALE=fr,
Mais j’ai modifier le .py pour qu’ill parse les bonnes données. Donc j’ai pas les erreurs de detection des chiffres.
Merci 🙂
J’essaye de modifier le usercount.py pour qu’il parse les bonnes données (il semble ne pas trouver les chiffres sur la page about more, mais pour le moment je scotches.
Tu peux donner ta modif stp ?
Avec plaisir :
# Get the number of users, removing commas
current_id = int( get_between(pagecontent, « Abrite« , « utilis »).replace(« , », « »))
# Get the number of toots, removing commas
num_toots = int (get_between(pagecontent, « Ayant publié« , « posts »).replace(« , », « »))
Ne pas oublier de mettre : « # coding: utf-8 » au début du script pour la prise en compte de l’accent.
Plus d’infos sur mes modifs : http://www.dekloo.net
merci !
Entre temps j’avais réussi à « françisé » le script avec xe9 pour le é
mais il me reste cette erreur:
Uploading graph.png…
Uploaded file, returned:
{u’error’: u’Donnxe9es invalides’}
Tooting…
8 accounts
+1 in the last hour
Traceback (most recent call last):
File « /usr/local/lib/python2.7/dist-packages/mastodon/Mastodon.py », line 422, in status_post
media_ids_proper.append(media_id[« id »])
KeyError: ‘id’
Traceback (most recent call last):
File « usercount.py », line 200, in
mastodon.status_post(toot_text, in_reply_to_id=None, media_ids=[media_dict] )
File « /usr/local/lib/python2.7/dist-packages/mastodon/Mastodon.py », line 428, in status_post
raise MastodonIllegalArgumentError(« Invalid media dict: %s » % e)
mastodon.Mastodon.MastodonIllegalArgumentError: Invalid media dict: ‘id’
Quand j’édites le fichier mastostats.csv
timestamp,usercount,tootscount
1492970757,8,155
I have the same error. Sorry im not know french.
Mais pour reprendre l’erreur que j’ai aussi) c’est un pb lié à la fonction upload appelé par le script. Si on désactive cet appel, ca fonctionne bien.