Pleroma/Gegeweb

Je viens de mettre en place un petit système de template pour personnaliser facilement la présentation des commentaires avec #gemipy

Ça permet de modifier le titre de la section (## Commentaires) sans toucher au code, et d’ajouter d’autres infos.

Les mots-clefs à utiliser sont visibles dans le fichier comments.tpl du dossier tpl

https://framagit.org/jln/gemipy/-/tree/testing-tpl (pas encore intégré dans la branche principale)

Retours bienvenus :-)

cc @gerald

@jln J'irais jeter un œil là dessus en fin de journée.

re: gemypi.py Commentaires sur gemini via le fediverse
@jln Au fait je suis allé regarder un peu du coté de la doc de Mastodon.py.
Vu qu'il est utilisé pour poster le toot initial, ne serait-il pas possible de l'utiliser pour récupérer les commentaires ?
Tu supprime de fait le besoin d'avoir recours à json et requests et ça utilise la même interface pour ce qui concerne le fediverse.
À voir…
Malheureusement, je ne connais absolument pas Python. Les modifs que je t'ai proposé étaient relativement faciles à comprendre et faire sans connaître le langage.

re: gemypi.py Commentaires sur gemini via le fediverse
@gerald oui effectivement, c'est une chose à laquelle j'ai également pensé pour déléguer la gestion de la communication avec Mastodon à un module tierce, qui fera les choses mieux que moi et dont on peut espérer la mise à jour en cas d'évolution de l'API. Et a priori ce n'est pas trop compliqué à mettre en œuvre.

re: gemypi.py Commentaires sur gemini via le fediverse

@jln Je dois aller bosser. J’ai quelque chose de fonctionnel. Je ferais une MR ce soir…

USERCRED_FEDI = "./pytooter_usercred.secret"

SERVER_TIMEZONE = pytz.timezone('Europe/Paris')
DATE_FORMAT = "%d %b %Y %H:%M"

def fedi_connectt():
    mastodon = Mastodon(
        access_token = USERCRED_FEDI,
        api_base_url = URL_FEDI
    )
    return mastodon

Puis :

class Comments():
    """ Ensemble des toots composant les commentaires d'un article
    """
    def __init__(self, toot_id, url=URL_FEDI, comment_title=COMMENT_TITLE, no_comment=NO_COMMENT):
        self.toot_id = toot_id
        self.url = url
        self.comment_title = comment_title
        self.no_comment = no_comment
        mastodon = fedi_connectt()
        self.comments = mastodon.status_context(toot_id)["descendants"]
        
    def get_toots(self):
        """ Renvoie les toots d'un thread, formatés pour l'intégration dans la
        gempage
        """
        self.output = f"\n\n{self.comment_title}\n\n"
        if self.comments:
                for toot in self.comments:
                    toot_date = toot['created_at'].astimezone(SERVER_TIMEZONE).strftime(DATE_FORMAT)
                    self.output += f"### {toot['account']['display_name']} – {toot_date}\n"
                    self.output += f"=> {toot['url']} Voir le toot\n\n"
                    toot_content = html2text.HTML2Text()
                    toot_content.ignore_links = True
                    toot_content = toot_content.handle( toot["content"] )
                    self.output += f"{toot_content}\n"
                    
        else:
                self.output += self.no_comment
                
        return self.output

J’ai un peu modifié la sortie. Le titre troisième niveau permet d’avoir les toots dans la table des matières.

re: gemypi.py Commentaires sur gemini via le fediverse

@gerald Merci, je regarderai ça après le boulot aussi…

Concernant le niveau de titre, l’idée est de toute façon de laisser cela à la libre volonté de l’utilisateur, qui modifiera le fichier comments.tpl comme il l’entendra.

re: gemypi.py Commentaires sur gemini via le fediverse
@jln
J'ai envoyé une nouvelle PR sur cette branche.
J'ai été obligé d'ajouter deux lignes vides au début du fichier comment.tpl.
Sinon ça vient se coller juste derrière la dernière ligne de la page.

Si on utilise le script dans une crontab pour éviter de ré-écrir pour rien peut être faudrait-il stocker le nombre de réponses et ne charger les toots et ré-écrire la page que si le nombre de réponses à changé.

Mais ça… pas encore trouver comment faire.
J'y vais un peu à taton avec Python là. ;)

re: gemypi.py Commentaires sur gemini via le fediverse
@gerald
Merci pour la PR, je vais voir ça ce soir ou demain.

Je ne crois pas qu'on puisse connaitre le nombre de toots sans effectuer une requête qui va de toute façon tous les rapatrier (fait compter des "descendants"). En revanche on peut en effet économiser l'écriture de la page.

Je comptais stocker dans l'entête le nombre de toots/réponses, car c'est une donnée qu'on peut vouloir réutiliser dans le tpl. Ce ne sera donc pas compliqué de comparer le nb de toots récupérés et le nombre de toots déjà écrits.

En revanche, si on évite la réécriture, ça veut dire qu'il faut quelque chose qui force cette réécriture si le contenu de l'article a été modifié. On peut imaginer soit que l'auteur force la génération via un autre paramètre dans l'entête (force-gen: True), soit que le script compare les dates de modification du fichier source et du fichier destination, pour régénérer ce dernier s'il est antérieur à l'autre. Mais je ne sais pas trop si c'est fiable de s'appuyer sur ce type d'information système. J'imagine que oui ?

re: gemypi.py Commentaires sur gemini via le fediverse

@gerald

J’ai été obligé d’ajouter deux lignes vides au début du fichier comment.tpl. Sinon ça vient se coller juste derrière la dernière ligne de la page.

C’est suprenant, je n’ai pas eu ce comportement 🤔

re: gemypi.py Commentaires sur gemini via le fediverse

@jln

Je ne crois pas qu’on puisse connaitre le nombre de toots sans effectuer une requête qui va de toute façon tous les rapatrier

Si si. ;) Avec l’ID du toot original :

https://mastodonpy.readthedocs.io/en/stable/#toot-dicts

'replies_count': # The number of replies to this status.

D’ailleurs j’avais pensé à mettre un lien vers le toot original. Puisqu’il faut répondre de là pour commenter.

Mais pour ça il faut que je sois plus à l’aise avec Python. Même si c’est un langage qui à l’air facile à apprendre. ;)

re: gemypi.py Commentaires sur gemini via le fediverse

@gerald

Si si. ;) Avec l’ID du toot original :

Ah oui, cool !

Mais pour ça il faut que je sois plus à l’aise avec Python.

Je te trouve déjà très à l’aise moi 😃

re: gemypi.py Commentaires sur gemini via le fediverse

@jln

(date modif fichiers)

Mais je ne sais pas trop si c’est fiable de s’appuyer sur ce type d’information système. J’imagine que oui ?

Oui c’est fiable, je l’utilise pour gérer du contenu en cache (avec du PHP ou du JS).

Une autre solution… le script tourne comme un deamon et reçoit les notifs pour le toot. J’ai survolé la doc de Mastodon.py mais ça semble possible. Du coup ça pourrait faire du temps réel…

https://mastodonpy.readthedocs.io/en/stable/#streamlistener

re: gemypi.py Commentaires sur gemini via le fediverse

@gerald Pour le moment ce type d’approche dépasse mes connaissances.

re: gemypi.py Commentaires sur gemini via le fediverse
@jln
Ça viendra… ;)

Déjà ne pas ré-écrire pour rien, c'est pas si mal.
C'est déjà bien fonctionnel.
Dans une crontab toute les 10/15' ça peut suffire.
Pas forcément besoin de faire du temps réel. Surtout sur ce média.

re: gemypi.py Commentaires sur gemini via le fediverse
@jln
Je viens de soumettre une nouvelle PR dans la branche de test des templates.

La timezone est récupéré du système.
Si pas défini, la date du toot en UTC est conservé.
Possibilité de définir l'emplacement des commentaires dans la page. (même système que pour le template)

Ça marche bien !

gemini://home.gegeweb.org/~gerald/
replies
0
announces
0
likes
0